±------------------------------------------+
1 row in set (0.00 sec)
复制代码
使用 GRANT 语句可以为用户授予权限。
5.2.1 授予权限
GRANT 语句基本语法如下:
GRANT privilege, …
ON privilege_level
TO account_name;
复制代码
GRANT 语句支持一次授予多个权限,使用逗号进行分隔。
privilege_level 指定权限的作用级别,包括:
- 全局权限,作用于 MySQL 服务器中的所有数据库。全局权限使用
*.*
表示,例如,以下语句授予 dev01@localhost 用户查询所有数据库中的所有表的权限:
mysql> GRANT SELECT
-> ON .
-> TO dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW GRANTS FOR dev01@localhost;
±-------------------------------------------+
| Grants for dev01@localhost |
±-------------------------------------------+
| GRANT SELECT ON . TO dev01
@localhost
|
±-------------------------------------------+
1 row in set (0.00 sec)
复制代码
全局权限存储在 mysql.user 表中。
- 数据库权限,作用于指定数据库中的所有对象。数据库权限使用
db_name.*
表示,例如,以下语句授予 dev01@localhost 用户查询数据库 world 中的所有表的权限:
mysql> GRANT ALL
-> ON world.*
-> TO dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW GRANTS FOR dev01@localhost;
±---------------------------------------------------------+
| Grants for dev01@localhost |
±---------------------------------------------------------+
| GRANT SELECT ON . TO dev01
@localhost
|
| GRANT ALL PRIVILEG Java开源项目【ali1024.coding.net/public/P7/Java/git】 ES ON world
.* TO dev01
@localhost
|
±---------------------------------------------------------+
2 rows in set (0.00 sec)
复制代码
数据库权限存储在 mysql.db 表中。
- 表权限,作用于指定表的所有列。数据库权限使用
db_name.table_name
表示;如果不指定 db_name,使用默认数据库;如果没有默认数据库,将会返回错误。例如,以下语句授予 dev01@localhost 用户数据库 world 中country 表的增删改查权限:
mysql> GRANT SELECT, INSERT, UPDATE, DELETE
-> ON world.country
-> TO dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW GRANTS FOR dev01@localhost;
±---------------------------------------------------------------------------------+
| Grants for dev01@localhost |
±---------------------------------------------------------------------------------+
| GRANT SELECT ON . TO dev01
@localhost
|
| GRANT ALL PRIVILEGES ON world
.* TO dev01
@localhost
|
| GRANT SELECT, INSERT, UPDATE, DELETE ON world
.country
TO dev01
@localhost
|
±---------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
复制代码
表权限存储在 mysql.tables_priv 表中。
- 列权限,作用于指定表的指定列。每个列权限都需要指定具体的列名。例如,以下语句授予 dev01@localhost 用户在 world.country 表中 code 和 name 字段的查询权限,以及 population 字段的修改权限:
mysql> GRANT SELECT(code, name), UPDATE(population)
-> ON world.country
-> TO dev01@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW GRANTS FOR dev01@localhost;
±---------------------------------------------------------------------------------------------------------------------------------+</