SQL用户权限语句操作
用户创建
第一种:
CREATE USER case_dev identified BY 'pass123'; //密码默认为MD5加密,明文的密码不能使用
第二种:
mysql> insert into User(Host,User,Password)
-> value ('::1','xuanling',password('123456')); //password('123456')使密码为MD5密文,明文的密码不能使用
Query OK, 1 row affected, 3 warnings (0.00 sec)
删除用户
drop user xuanling;
或 删除mysql.user表中user列含有'xuanling'的行
授权语句
FLUSH PRIVILEGES;//刷新权限
如果使用的是上面第二种用户创建方式,则会出现以下问题
mysql> grant select on table sql1.class to xuanling;
ERROR 1133 (42000): Can't find any matching row in the user table
原因:mysql没有检测到密码,无法识别用户,
解决方法如下,(identified by '123456')仅需要使用一次,之后系统会会自动匹配密码(即使换了密码也不用再写一次)
mysql> grant select on table class to xuanling identified by '123456';
Query OK, 0 rows affected (0.00 sec)
给用户所有的权限
mysql> grant all/(all privileges) on table student to xuanling;
Query OK, 0 rows affected (0.00 sec)
将权限赋给xuanling 并允许它将此权限赋予其他用户
mysql> grant update on table student to xuanling with grant option;
Query OK, 0 rows affected (0.00 sec)
创建public用户并授予权限
mysql> grant all privileges on table student to public identified by 'aa';
Query OK, 0 rows affected (0.00 sec)
收回权限
mysql> revoke select on table class from xuanling;
Query OK, 0 rows affected (0.00 sec)
收回用户xuanling对表student的所有权限
mysql> revoke all/(all privileges) on table student from xuanling;
Query OK, 0 rows affected (0.00 sec)
查看权限
全局层级
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。
数据库层级
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。
表层级
表权限适用于一个给定表中的所有列。这些权限存储在mysql.tables_priv表中。
列层级
列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中
子程序层级
CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE
ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。