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_nameREVOKE ALL ON db_name.tbl_name 可授予和撤销表权限。

列层级

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

子程序层级

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




授权

命令:
GRANT privileges ON databasename.tablename TO 'username'@'host'
说明:
  • privileges:用户的操作权限,如 SELECTINSERTUPDATE
    等,如果要授予所的权限则使用 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 test_user1@localhost                                |
+----------------------------------------------------------------+
| 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: root@localhost
  Timestamp: 0000-00-00 00:00:00
 Table_priv: Select
Column_priv:
1 row in set (0.04 sec)

ERROR:
No query specified




你可能感兴趣的:(MySQL - 用户权限管理)