MySQL 實戰(zhàn)筆記 第01期:MySQL 角色管理
角色 ( Role ) 可以用來批量管理用戶,同一個角色下的用戶,擁有相同的權限。那 MySQL 數據庫是否也有這樣的功能呢 ?答案是肯定的。MySQL 5.7.X 可以通過 mysql.proxies_priv 來模擬角色 (Role) 的功能。下面讓我們來實驗一下(測試的版本 MySQL 5.7.28):
1 配置 proxy
- mysql> show variables like "%proxy%"; #查看當前proxy是否開啟,OFF 表示沒有開啟
- +-----------------------------------+-------+
- | Variable_name | Value |
- +-----------------------------------+-------+
- | check_proxy_users | OFF |
- | mysql_native_password_proxy_users | OFF |
- | proxy_user | |
- | sha256_password_proxy_users | OFF |
- +-----------------------------------+-------+
- 4 rows in set (0.02 sec)
- mysql> set global check_proxy_users =on;
- Query OK, 0 rows affected (0.00 sec)
- mysql> set global mysql_native_password_proxy_users = on;
- Query OK, 0 rows affected (0.01 sec)
- mysql> exit
以上設置參數,對當前會話無效,需要退出后重新登錄,或直接設置到 my.cnf 中去;
2 創(chuàng)建角色和用戶
- mysql> create user role_dba;
- Query OK, 0 rows affected (1.03 sec)
- mysql> create user 'jack';
- Query OK, 0 rows affected (0.01 sec)
- mysql> create user 'mary';
- Query OK, 0 rows affected (0.01 sec)
用戶為設置密碼,如需密碼可以使用 identified by '####' 設置;
3 權限映射
將 role_dba 的權限映射( map )到 jack 、mary
- mysql> grant proxy on role_dba to jack;
- Query OK, 0 rows affected (0.02 sec)
- mysql> grant proxy on role_dba to mary;
- Query OK, 0 rows affected (0.01 sec)
4 給用戶賦權
給 role_dba 賦權(模擬 role 賦權)
- mysql> grant select on *.* to role_dba;
- Query OK, 0 rows affected (0.01 sec)
- mysql> show grants for role_dba;
- +---------------------------------------+
- | Grants for role_dba@% |
- +---------------------------------------+
- | GRANT SELECT ON *.* TO 'role_dba'@'%' |
- +---------------------------------------+
- 1 row in set (0.00 sec)
- mysql> show grants for jack;
- +---------------------------------------------+
- | Grants for jack@% |
- +---------------------------------------------+
- | GRANT USAGE ON *.* TO 'jack'@'%' |
- | GRANT PROXY ON 'role_dba'@'%' TO 'jack'@'%' |
- +---------------------------------------------+
- 2 rows in set (0.00 sec)
- mysql> show grants for mary;
- +---------------------------------------------+
- | Grants for mary@% |
- +---------------------------------------------+
- | GRANT USAGE ON *.* TO 'mary'@'%' |
- | GRANT PROXY ON 'role_dba'@'%' TO 'mary'@'%' |
- +---------------------------------------------+
- 2 rows in set (0.00 sec)
5 查看 mysql.proxies_priv
- mysql> select * from mysql.proxies_priv;
- +-----------+------+--------------+--------------+------------+----------------------+---------------------+
- | Host | User | Proxied_host | Proxied_user | With_grant | Grantor | Timestamp |
- +-----------+------+--------------+--------------+------------+----------------------+---------------------+
- | localhost | root | | | 1 | boot@connecting host | 0000-00-00 00:00:00 |
- | % | will | % | will_dba | 0 | root@localhost | 0000-00-00 00:00:00 |
- | % | tom | % | will_dba | 0 | root@localhost | 0000-00-00 00:00:00 |
- | % | jack | % | role_dba | 0 | root@localhost | 0000-00-00 00:00:00 |
- | % | mary | % | role_dba | 0 | root@localhost | 0000-00-00 00:00:00 |
- +-----------+------+--------------+--------------+------------+----------------------+---------------------+
- 5 rows in set (0.01 sec)
6 驗證
- $ mysql -h 127.0.0.1 -u jack
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 249
- Server version: 5.7.28-log MySQL Community Server (GPL)
- Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> select * from test.ssd limit 1;
- +---+------+------+
- | a | b | c |
- +---+------+------+
- | 1 | NULL | NULL |
- +---+------+------+
- 1 row in set (0.01 sec)
mysql.proxies_priv 僅僅是對 Role 的模擬,和 Oracle 的角色還是有所不同的;官方稱呼為 Role like。
MySQL 8.0 正式增加了 role 功能,有興趣的同學可以自行了解。MySQL 5.6.X 模擬 Role 功能需要安裝插件,具體方法可參考:https://dev.mysql.com/doc/refman/5.6/en/proxy-users.htmlhttps://dev.mysql.com/doc/refman/5.6/en/pluggable-authentication.html