一玖像、用戶角色權(quán)限表描述
1.MySQL用戶角色權(quán)限相關(guān)表
表名 | 描述 |
---|---|
user | 用戶表 |
db | 數(shù)據(jù)庫權(quán)限表 |
tables_priv | 表權(quán)限表 |
columns_priv | 字段權(quán)限表 |
proxies_priv | 代理角色表 |
描述:
上述表团驱,是我們裝完MySQL數(shù)據(jù)庫后蕾羊,系統(tǒng)庫“mysql”中的表。
- 當(dāng)我們創(chuàng)建一個用戶后避矢,相應(yīng)在user表中就會有一行記錄悼瘾。
- db表是數(shù)據(jù)庫權(quán)限的表,表明用戶是否有操作某個數(shù)據(jù)庫的使用權(quán)限审胸。
- tables_priv表是表權(quán)限表亥宿,表明用戶是否有操作某張表的權(quán)限。
- columns_priv表是字段權(quán)限表砂沛,表明用戶是否有操作某個字段的權(quán)限烫扼。
- proxies_priv代理角色表,表明用戶和某個角色之間的關(guān)系尺上。在MySQL中用戶就是角色材蛛。
二、實際案例操作
1.創(chuàng)建一個MySQL用戶
create user 'test01'@'%' identified by 'test01';
描述:
創(chuàng)建一個用戶名為test01的用戶怎抛,密碼是test01卑吭,'%'代表該用戶客戶端IP不限。
示例:'test01'@'192.168.0.%' 马绝,代表test01用戶客戶端IP只能是 [ 192.168.0.0 - 192.168.0.255 ] 豆赏。
執(zhí)行結(jié)果:
在MySQL中相應(yīng)的會有一行記錄,test01。
mysql> select host,user from user;
+-----------+---------------+
| host | user |
+-----------+---------------+
| % | dev_role |
| % | fuyi |
| % | muzi |
| % | root |
| % | test01 |
| localhost | dev |
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+---------------+
9 rows in set (0.00 sec)
刪除用戶(這個不必刪除掷邦,看看就行白胀。):
drop user 'test01'@'%';
2.授予用戶權(quán)限
授予這個用戶 mall.* 也就是“mall”這個數(shù)據(jù)庫下的全部的權(quán)限。
GRANT SELECT ON mall.* TO 'test01'@'%' IDENTIFIED BY 'test01' WITH GRANT OPTION;
授予這個用戶全部數(shù)據(jù)庫的全部權(quán)限抚岗。
GRANT SELECT ON *.* TO 'test01'@'%' IDENTIFIED BY 'test01' WITH GRANT OPTION;
3.查看用戶權(quán)限
查看用戶權(quán)限
SHOW GRANTS FOR 'test01'@'%';
4.刪除用戶權(quán)限
刪除用戶的權(quán)限
REVOKE SELECT ON *.* FROM 'test01'@'%';
刪除用戶的權(quán)限
REVOKE SELECT ON mall.* FROM 'test01'@'%';
5.設(shè)置用戶只能訪問表有限個字段的權(quán)限
5.1 創(chuàng)建表并新增數(shù)據(jù)
CREATE TABLE `account`(
`id` int(11) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`balance` int(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_balance` (`balance`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `account` values ('1','lilei','900');
insert into `account` values ('2','wangwang','600');
insert into `account` values ('3','xiaohua','200');
insert into `account` values ('4','hebing','300');
5.2 查看并清理掉該用戶之前設(shè)置的權(quán)限或杠,單單只設(shè)置用戶表字段權(quán)限,去控制臺查看結(jié)果宣蔚。
GRANT SELECT(id,name) ON mall.account TO 'test01'@'%';
結(jié)果顯示我們只能查 id和name 的字段向抢。
mysql> select * from mall.account ;
ERROR 1142 (42000): SELECT command denied to user 'test01'@'localhost' for table 'account'
mysql>
mysql> select id,name from mall.account ;
+----+----------+
| id | name |
+----+----------+
| 1 | lilei |
| 2 | wangwang |
| 3 | xiaohua |
| 4 | hebing |
+----+----------+
4 rows in set (0.00 sec)
6.用戶角色配置
6.1 查看角色代理是否開啟
mysql> show variables like "%proxy%";
+-----------------------------------+-------+
| Variable_name | Value |
+-----------------------------------+-------+
| check_proxy_users | ON |
| mysql_native_password_proxy_users | ON |
| proxy_user | |
| sha256_password_proxy_users | OFF |
+-----------------------------------+-------+
4 rows in set (0.00 sec)
其中check_proxy_user和mysql_native_password_proxy_users需要ON開啟狀態(tài)。默認是關(guān)閉的胚委,當(dāng)前是開啟的(之前設(shè)置過)挟鸠。
若未開啟則執(zhí)行下列命令:
- 檢查用戶角色開啟
set GLOBAL check_proxy_users = 1;
- native 密碼加密
set GLOBAL mysql_native_password_proxy_users = 1;
執(zhí)行完設(shè)置再次查看就開啟了。
6.2 創(chuàng)建角色和測試用戶
創(chuàng)建一個開發(fā)角色
create USER 'dev_role';
搞兩個用戶
create USER 'muzi';
create USER 'fuyi';
5.7后不需要執(zhí)行這個
GRANT PROXY ON "@" TO 'root'@'%' WITH GRANT OPTION;
授權(quán)角色給用戶
grant proxy on 'dev_role' to 'muzi';
grant proxy on 'dev_role' to 'fuyi';
6.3 授權(quán)給角色,擁有該角色的用戶就都會有這個權(quán)限
grant select(id,name) on mall.account to 'dev_role';
6.4 使用muzi用戶登陸并查看
“muzi”這個用戶沒有密碼亩冬,提示填寫密碼直接回車艘希。
mysql -umuzi -p
mysql> select * from mall.account;
ERROR 1142 (42000): SELECT command denied to user 'dev_role'@'localhost' for table 'account'
mysql> select id,name f from mall.account;
+----+----------+
| id | name |
+----+----------+
| 1 | lilei |
| 2 | wangwang |
| 3 | xiaohua |
| 4 | hebing |
+----+----------+
4 rows in set (0.00 sec)
****可以看到muzi也有了該角色的權(quán)限,只能訪問id和name字段硅急。****
三覆享、總結(jié)
我們可以通過上述的方式去管理我們的數(shù)據(jù)庫,避免程序員從刪庫到跑路的心酸歷程铜秆。
可能上述的方式并非是最最專業(yè)的DBA管理MySQL的用法淹真,不過身為開發(fā)的我們是需要掌握一些這類的知識,即便是測試庫也要有一些規(guī)范连茧,一個root打天下顯得很不專業(yè)。