在 MySQL 中提供了一个GRANT 语句,该语句可以为用户授权。
GRANT语句的语法格式如下:
GRANT privileges [(columns)][,privileges[(columns)]] ON database.table
To 'username'@'hostname' [IDENTIFIED BY [PASSWORD]'password']
[,'username '@'hostname' [IDENTIFIED BY [PASSWORD]'password']]...
[WITH with option [with option]...]
上述语法格式中,privileges 表示权限类型,columns 参数表示权限作用于某一列,该参数可以省略不写,此时权限作用于整个表,username 表示用户名,hostname 表示主机名,IDENTIFIED BY 参数为用户设置密码,PASSWORD 参数为关键字,password 为用户的新密码。
WITH 关键字后面可以带有多个参数 with_option,这个参数有5个取值,具体如下。
(1)GRANT OPTION:将自己的权限授予其他用户。
(2)MAX_QUERIES_PER_HOUR count:设置每小时最多可以执行多少次(count)查询。
(3)MAX_UPDATES_PER_HOUR count:设置每小时最多可以执行多少次更新
(4)MAX_CONNECTIONS_PER_HOUR count:设置每小时最大的连接数量。
(5)MAX USER_CONNECTIONS:设置每个用户最多可以同时建立连接的数量。
使用 GRANT 语句创建一个新的用户,用户名为 user4、密码为 123,user4 用户对所有数据库有 INSERT、SELECT 权限,并使用 WITH GRANT OPTION 子句,GRANT语句如下:
GRANT INSERT,SELECT ON *.* To 'user4'@'localhost' IDENTIFIED BY '123' WITH GRANT OPTION;
上述语句执行成功后,可以使用 SELECT语句来查询 user 表中的用户权限,查询结果如下:
mysql> use mysql;
Database changed
mysql> SELECT Host,User,password,Insert_priv,Select_priv,Grant_priv FROM mysql.user WHERE user='user4'\G
************************* 1.row *************************
Host: localhost
User: user4
Password: *23AE809DDACAF96AFOFD78ED04B6A265E05AA257
Insert priv: Y
Select priv: Y
Grant priv: Y
1 row in set (0.05 sec)
从上述结果可以看出,User 的值为 user4,Insert_priv、Select_priv、Grant_priv 的值都为 Y,因此可以说明用户 user4 对所有数据库具有增加、查询以及对其他用户赋予相应权限的功能。