MySQL - 用户权限管理
全局层级
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在 mysql.user
表中。
使用 GRANT ALL ON *.*
和 REVOKE ALL ON *.*
可授予和撤销全局权限。
数据库层级
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在 mysql.db
和 mysql.host
表中。
GRANT ALL ON db_name.*
和 REVOKE ALL ON db_name.*
可授予和撤销数据库权限。
表层级
表权限适用于一个给定表中的所有列。这些权限存储在 mysql.tables_priv
表中。
GRANT ALL ON db_name.tbl_name
和 REVOKE ALL ON db_name.tbl_name
可授予和撤销表权限。
列层级
列权限适用于一个给定表中的单一列。这些权限存储在 mysql.columns_priv
表中。当使用 REVOKE
时,您必须指定与被授权列相同的列。
子程序层级
CREATE ROUTINE, ALTER ROUTINE, EXECUTE
和 GRANT
权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了 CREATE ROUTINE
外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv
表中。
授权
命令:
GRANT privileges ON databasename.tablename TO 'username'@'host'
说明:
- privileges:用户的操作权限,如
SELECT
,INSERT
,UPDATE
等,如果要授予所的权限则使用ALL
- databasename:用户可操作的数据库名
- tablename:用户可操作的表名,如果要授予该用户对所有数据库和表的相应操作权限则可用通配符
*
表示,如*.*
例子:
GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
GRANT ALL ON *.* TO 'pig'@'%';
使用 GRANT
语句也可以直接添加用户并同时授权:
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON test.user
TO 'test_user1'@'localhost'
IDENTIFIED BY 'yourpassword';
每当调整权限后,需要执行以下语句刷新权限:
FLUSH PRIVILEGES;
撤销用户权限
命令:
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
例子:
REVOKE SELECT ON *.* FROM 'pig'@'%';
REVOKE INSERT, UPDATE, DELETE, CREATE, DROP
ON test.test_user
FROM 'test_user1'@'localhost';
查看用户权限
命令:
SHOW GRANTS for 'username'@'host';
例子:
mysql> SHOW GRANTS for 'test_user1'@'localhost';
+----------------------------------------------------------------+
| Grants for [email protected] |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_user1'@'localhost' |
| GRANT SELECT ON `test`.`test_user` TO 'test_user1'@'localhost' |
+----------------------------------------------------------------+
2 rows in set (0.00 sec)
可以看到 test_user1 这个用户的权限,其中 USAGE
代表无权限。而他在
test 数据库的 test_user 表拥有 SELECT 的权限。
另一个方法就是直接查看相关权限的表,以上面例子为例:
mysql> select * from tables_priv where User='test_user1' \G;
*************************** 1. row ***************************
Host: localhost
Db: test
User: test_user1
Table_name: test_user
Grantor: [email protected]
Timestamp: 0000-00-00 00:00:00
Table_priv: Select
Column_priv:
1 row in set (0.04 sec)
ERROR:
No query specified
上一篇: centos服务器上R语言环境安装
下一篇: 【mysql】mysql权限管理
推荐阅读