www.baike369.com
百科369 > MySQL教程 > MySQL授权——为用户赋予权限

MySQL授权——为用户赋予权限


MySQL授权——为用户赋予权限

授权就是为某个用户赋予某些权限。例如,可以为新建的用户赋予查询所有数据库和表的权限。

合理的授权能够保证数据库的安全;不合理的授权会使数据库存在安全隐患。

授予的权限可以分为多个层级:

1. 全局层级

全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。

2. 数据库层级

数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。

3. 表层级

表权限适用于一个给定表中的所有列。这些权限存储在mysql.tables_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。

4. 列层级

列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,必须指定与被授权列相同的列。

5. 子程序层级

CREATE ROUTINE、ALTER ROUTINE、EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级,而且,除了CREATE ROUTINE外,这些权限可以被授予子程序层级,并存储在mysql.procs_priv表中。

在MySQL中,必须是拥有GRANT权限的用户才可以执行GRANT语句。

要使用GRANT或REVOKE,必须拥有GRANT OPTION权限,并且必须用于正在授予或撤销的权限。GRANT的语法如下:

GRANT priv_type [(columns)][,priv_type [(columns)]]...
ON [object_type] table1,table2,...,tablen
TO user [IDENTIFIED BY [PASSWORD] 'password']
[,user [IDENTIFIED BY [PASSWORD] 'password']]...
    [WITH GRANT OPTION]

object_type=TABLE | FUNCTION | PROCEDURE

GRANT OPTION取值:
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count

其中:

  • priv_type参数表示权限类型。
  • columns参数表示权限作用于哪些列上,不指定该参数,表示作用于整个表上。
  • object_type指定授权作用的对象类型包括TABLE(表)、FUNCTION(函数)和PROCEDURE(存储过程),当从旧版本的MySQL升级时,要使用object_type子句,必须升级授权表。
  • table1,table2,...,tablen表示授予权限的列所在的表。
  • user参数表示用户账户,由用户名和主机名构成,形式是'username'@'hostname'。
  • IDENTIFIED BY参数用于设置密码。
  • password参数是用户的新密码。
  • WITH关键字后可以跟一个或多个GRANT OPTION。GRANT OPTION的取值有5个,意义如下:
    • GRANT OPTION:将自己的权限赋予其它用户。
    • MAX_QUERIES_PER_HOUR count:设置每个小时可以执行count次查询。
    • MAX_UPDATES_PER_HOUR count:设置每个小时可以执行count次更新。
    • MAX_CONNECTIONS_PER_HOUR count:设置每个小时可以建立count个连接。
    • MAX_USER_CONNECTIONS count:设置单个用户可以同时建立count个连接。

实例1

使用GRANT命令创建一个新用户test2,密码为newpwd。用户test2对所有的数据库有SELECT和UPDATE权限,并授予GRANT权限。

GRANT语句的SQL代码如下:

GRANT SELECT,UPDATE ON *.* TO 'test2'@'localhost' IDENTIFIED BY 'newpwd'
      WITH GRANT OPTION;

执行结果如下:

使用GRANT命令创建新用户的操作效果

结果显示,GRANT语句执行成功。

可以使用SELECT语句来查询user表,以查看test2用户的信息。SELECT语句的执行结果如下:

使用SELECT语句来查询user表的操作效果

查询结果显示,User的值为test2;Select_priv、Update_priv和Grant_priv的值为Y;Password的值为加密后的值。

被授予GRANT权限的用户可以登录MySQL,并创建其它用户账户。


实例2

1. 使用test2用户登录MySQL服务器。如下图所示:

使用test2用户登录MySQL服务器的操作效果

2. 查询test用户的权限。如下图所示:

查询test用户的权限的操作效果

3. 使用GRANT命令为用户test设置权限。设置test用户对所有数据库有SELECT权限。GRANT语句的代码如下:

GRANT SELECT ON *.* TO 'test'@'localhost';

执行结果如下:

使用GRANT命令为用户test设置权限的操作效果

结果显示,GRANT语句执行成功。

4. 使用SELECT语句查看test用户的信息。SELECT语句的执行结果如下:

使用SELECT语句查看test用户的信息的操作效果

查询结果显示,User的值为test;Select_priv的值为Y。这说明test2用户可以将自己的权限赋给别的用户。原因是WITH GRANT OPTION子句可以使test2用户具有GRANT权限。test2用户可以使用GRANT语句将自己的权限授权给别的用户。

Copyright© 2011-2016 www.baike369.com All Rights Reserved