GRANT概述
该GRANT语句使系统管理员可以授予权限和角色,这些权限和角色可以授予用户帐户和角色。这些语法限制适用:
GRANT不能混合在同一语句中授予权限和角色。给定 GRANT语句必须授予特权或角色。
要使用GRANT,您必须拥有该 GRANT OPTION权限,并且您必须具有您授予的权限。当 read_only启用了系统变量,GRANT另外需要CONNECTION_ADMIN 或SUPER特权。
GRANT要么为所有命名用户和角色成功,要么回滚,如果发生任何错误,则无效。只有当所有命名用户和角色成功时,该语句才会写入二进制日志。
以下是几个DEMO
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost';
GRANT 'role1', 'role2' TO 'user1'@'%', 'user2'@'localhost';//采用@'%'可实现远程链接
GRANT SELECT ON world.* TO 'role3';
帐户或角色名称的主机名部分(如果省略)默认为'%',而采用@'%'可实现远程链接。
通常,数据库管理员首先使用 CREATE USER创建帐户并定义其非特权特征(如密码),是否使用安全连接以及对服务器资源的访问限制,然后使用它 GRANT来定义其权限。 ALTER USER可用于更改现有帐户的非特权。例如:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';
ALTER USER 'jeffrey'@'localhost' WITH MAX_QUERIES_PER_HOUR 90;
如果要确定操作产生的特权,请使用SHOW GRANTS 例子如下:
mysql> SHOW GRANTS FOR 'jeffrey'@'localhost';
+------------------------------------------------------------------+
| Grants for jeffrey@localhost |
+------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `jeffrey`@`localhost` |
| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO `jeffrey`@`localhost` |
+------------------------------------------------------------------+