MySQL 目录
1、MySQL 8.0 引擎和索引
2、MySQL 8.0 查询数据
3、MySQL 8.0 操作数据库和数据表
4、Mysql 8.0 权限概述与授权(一)
5、Mysql 8.0 权限概述与授权(二)
6、Mysql 8.0 权限概述与授权(三)
7、持续更新中…
授权
授权就是为了某个用户授予权限。
在MySQL中,必须是拥有 GRANT 权限的用户才可以执行 GRANT 语句。要使用 GRANT 或 REVOKE 必须拥有 GRANT OPTION 权限。
- 全局层级
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在 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.tb1_name 和 REVOKE ALL ON db_name.tb1_name 只授权和撤销表权限
- 列层级
列权限只适用于一个给定表中的单一列。这些权限存储在MySQL.columns_priv 表中。当使用 REVOKE 时,必须指定与授权列相同的列。
- 子程序层级
CREATE ROUTINE、ALTER ROUTINE、EXECUTE 和 GRANT 权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。
下面举个例子:
先创建一个用户名为 test_1 , 密码为123456
mysql> CREATE USER 'test_1'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
从user 表查看新用户
mysql> SELECT host,user,select_priv,update_priv FROM user WHERE user='test_1';
+-----------+--------+-------------+-------------+
| host | user | select_priv | update_priv |
+-----------+--------+-------------+-------------+
| localhost | test_1 | N | N |
+-----------+--------+-------------+-------------+
1 row in set (0.00 sec)
查看相应权限
mysql> SHOW GRANTS FOR 'test_1'@'localhost';
+--------------------------------------------+
| Grants for test_1@localhost |
+--------------------------------------------+
| GRANT USAGE ON *.* TO `test_1`@`localhost` |
+--------------------------------------------+
1 row in set (0.00 sec)
现在我有一个要求:指定用户名为’test_1’ 管理 名为rmysql 的数据库。并赋予 GRANT OPTION 权限
mysql> GRANT ALL PRIVILEGES ON rmysql.* TO 'test_1'@'localhost' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
WITH GRANT OPTION: 被授予的用户可以将这些权限赋予别的用户。
在查看权限
mysql> SHOW GRANTS FOR 'test_1'@'localhost'; +------------------------------------------------------------------------------+
| Grants for test_1@localhost |
+------------------------------------------------------------------------------+
| GRANT USAGE ON TO `test_1`@`localhost` |
| GRANT ALL PRIVILEGES ON `rmysql`.* TO `test_1`@`localhost` WITH GRANT OPTION |
+------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
ALL PRIVILEGES :为所有权限
收回权限
收回权限就是取消已经赋予用户的某些权限。收回用户不必要的权限在一定程度上保证系统的安全性。
REVOKE ALL PRIVILEGES , GRANT OPTION FROM 'user'@'host' [, 'user'@'host' ....]
REVOKE 语句必须和 FROM 语句一起使用, FROM 语句指明需要收回权限的账户。