MySql使用者與許可權控制
阿新 • • 發佈:2022-04-21
MySql使用者與許可權控制
-- 重新整理許可權命令
# -- 重新整理mysql許可權命令
flush privileges;
使用者管理
1、檢視使用者
#檢視使用者
USE mysql;
SELECT host,user FROM user;
2、建立使用者.
@‘%’
為host連線,建議進行各種指令操作時帶此引數
#建立使用者 CREATE USER 'name' identified by 'password'; #建立使用者 預設host是% CREATE USER `name`@`localhost` identified by '000000' #建立本地host連線
3、修改使用者
# 3.1、修改使用者
UPDATE user SET user ='test2' WHERE user ='test1' AND host = '%'
4、刪除使用者
# 4、刪除使用者
DROP user 'test2'; #建議使用
DELETE FROM user WHERE user = 'test2' AND host = '%'; #此方式可能會有殘留許可權資料 刪除不乾淨
5、修改密碼
# 3.2 修改當前連結使用者的密碼 alter user user() identified by 'new_password'; #寫法一 SET PASSWORD= 'new_password';#寫法二 # 3.3 修改其他使用者的密碼 root登陸後 alter user 'test1'@'%' identified by 'new_password'; #寫法一 SET PASSWORD FOR 'test1'@'%' = '000000'; #寫法二
6、密碼過期策略
#設定 test1 使用者的密碼立刻過期 alter user 'test1'@'%' password expire #設定密碼90天過期 create user "new_user"@"localhost" PASSWORD EXPIRE INTERVAL 90 DAY; #新建使用者 alter user "new_user"@"localhost" PASSWORD EXPIRE INTERVAL 90 DAY; #修改使用者 #設定密碼永不過期 create user "new_user"@"%" PASSWORD EXPIRE NEVER; #新建使用者 alter user "new_user"@"%" PASSWORD EXPIRE NEVER; #修改使用者
許可權管理
1、檢視許可權
#檢視root
SHOW GRANTS
# 或者
SHOW GRANTS FOR CURRENT_USER;
## 檢視某個使用者的全域性許可權
SHOW GRANTS FOR 'user'@'%'
2、賦予許可權
*.*(庫名.表名)
# 賦予使用者 所有許可權
grant ALL PRIVILEGES ON *.* TO 'new_user'@'%';
# 賦予使用者 對 test庫的查詢和修改許可權
grant select,update on test.* to 'new_user'@'%';
# 疊加賦予使用者
grant delete on test.* to 'new_user'@'%';
3、回收許可權
#回收某個許可權
REVOKE UPDATE,DELETE,INSERT ON *.* FROM `username`@`%`; # *.*(庫名.表名)
#回收所有的許可權
REVOKE ALl PRIVILEGES ON *.* FROM `username`@`%`;
許可權表
當mysql建立連線後將資料庫使用者許可權資訊寫到記憶體中進行校驗
在庫名為mysql中以下表:
- user表 使用者資訊
- db表 操作庫許可權
- tables_priv 操作表許可權
- columns_priv 操作列許可權
- procs_priv 操作函式許可權
當用戶發出操作請求時
- Mysql檢查user表中的許可權資訊 匹配user、host欄位值,檢視全域性許可權是否允許,如果找到匹配資訊。則執行操作,否則繼續向下查詢許可權
- 檢查db表中的許可權資訊 匹配user、host值,檢視請求的資料庫級別的許可權是否允許,如果找到匹配結果,則執行操作,否則繼續向下查詢許可權
- 檢查tables_priv表中的許可權資訊,匹配user、host值,檢視請求的資料表級別是否允許,如果找到匹配結果,則執行操作,否則繼續向下查詢許可權
- 檢查columns_priv列中的許可權資訊,匹配user、host值,檢視請求的資料列級別是否允許,如果找到匹配結果,則執行操作,否則mysql返回錯誤資訊
角色管理
1、建立角色
CREATE ROLE 'name'@'%'; #一建立使用者1
CREATE ROLE 'name1', 'name2' ... ;#二 建立使用者
2、給角色賦予許可權
#賦予全部許可權
GRANT ALL PRIVILEGES ON 庫名.表明 TO '角色名';
#賦予查詢刪除許可權
GRANT SELECT,DELETE ON 庫名.表明 TO '角色名';
3、檢視角色許可權
SHOW GRANTS; #root的許可權
SHOW GRANTS FOR "角色名"; #角色名許可權
4、回收角色許可權
REVOKE UPDATE ON 庫名.表名 FROM "角色名";
#回收所有
REVOKE ALl PRIVILEGES ON *.* FROM "角色名";
5、刪除角色
DROP ROLE `角色名`
6、啟用角色
mysql 建立了角色預設都是未啟用狀態
#檢視當前使用者啟用狀態的角色
SELECT CURRENT_ROLE();
#啟用角色 #需要重新登陸後才能檢視
set default role `角色名`@`%` TO `使用者名稱`@`%`;
7、給使用者賦予角色
GRANT `角色名`@`%` TO `使用者名稱`@`%`;
8、回收使用者的角色
REVOKE `角色` FROM `使用者`@`%`