-
MySQL軟體所提供的權限(mysql.user、mysql.db、mysql.host)
(1) 系統表mysql.user
user權限表中字段分為四類: 使用者字段、權限字段、安全字段和資源控制字段。
- 使用者字段
使用者字段.png
- 權限字段
權限字段.png
- 安全字段
安全字段.png
# 檢視是否支援ssl标準
show variables like 'have_openssl';
- 資源控制字段
資源控制.png
系統表mysql.user中的所有資源字段的預設值為0,表示沒有任何限制。
(2) 系統表mysql.db和mysql.host
在系統資料庫mysql中,權限表除了表user外,還有表db和表host,這兩張表都存儲了某個使用者對資料庫的權限。
- mysql.db表
mysql.db表.png
mysql.host表
mysql.host表.png
(3)其他權限表
在系統資料庫mysql中,除了上述權限表外,還有表tables_priv和columns_priv,其中标tables_priv用來實作單個表的權限設定,表columns_priv用來實作單個字段列的權限設定。
- 系統表mysql.tables_priv表結構 mysql.tables_priv表結構.png
- 系統表mysql.columns_priv的表結構
columns_priv的表結構png
-
使用者機制
(1) 登入和退出MySQL軟體的完整指令
# 登入
mysql -h 127.0.0.1 -u root -p
# 退出(\q)
exit|quit
(2) 建立普通使用者賬戶
- 執行CREATE USER語句來建立使用者賬戶
create user 'mazaiting'@'localhost' identified by '123456';
- 執行INSERT語句來建立使用者
insert into user(host,user,password,ssl_cipher,x509_issuer,x509_subject)
values('localhost', 'linghaoyu', password('linghaoyu'),'','','');
# 使建立使用者生效
flush privileges;
- 執行GRANT語句來建立使用者
grant select on company.t_dept
to 'wangxingqin'@'localhost' identified by 'wangxingqin';
(3) 利用超級權限使用者root修改使用者賬戶密碼
- 修改超級權限使用者賬戶密碼
# 通過mysqladmin指令修改root使用者密碼
mysqladmin -u root -p password "123456"
# 通過SET指令修改密碼
set password=password("123456");
# 更新系統表mysql.user資料記錄修改root使用者密碼
update user set password=password("123456")
where user="root" and host="localhost";
(4) 利用擁有超級權限使用者root修改普通使用者賬戶密碼
# 建立使用者
grant select,create,drop on *.*
to 'mazaiting'@'localhost' identified by 'mazaiting'
with grant option;
# 通過grant指令修改使用者密碼
grant select,create,drop on *.*
to 'mazaiting'@'localhost' identified by '123456';
# 通過set指令修改使用者密碼
set password for 'mazaiting'@'localhost'=password("123456");
# 更新系統表mysql.user資料記錄修改使用者密碼
update user set password=password("mazaiting")
where user='mazaiting' and host='localhost';
# 登入目前使用者,并使用set指令修改密碼
set password=password("123456");
(5) 删除普通使用者賬戶
- 通過DROP USER語句删除普通使用者
drop user 'mazaiting'@'localhost';
- 删除系統表mysql.user資料記錄實作删除使用者賬号
# 選擇mysql資料庫
use mysql;
# 删除使用者
delete from user where user='mazaiting' and host='localhost';
-
權限管理
(1) 對使用者進行授權
# 建立使用者
grant select,create,drop on *.*
to 'mazaiting'@'localhost' identified by 'mazaiting'
with grant option;
# 查詢表資料記錄
select host,user,password,select_priv,update_priv,grant_priv,drop_priv
from mysql.user
where user='mazaiting' \G
(2) 檢視使用者所擁有權限
show grants for 'mazaiting'@'localhost' \G
(3) 收回使用者所擁有權限
# 回收使用者的查詢權限
revoke select on *.* from 'mazaiting'@'localhost';
# 回收使用者的全部權限
revoke all privileges, grant option
from 'mazaiting'@'localhost';