1. 程式人生 > 其它 >MySql使用者與許可權控制

MySql使用者與許可權控制

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 操作函式許可權

當用戶發出操作請求時

  1. Mysql檢查user表中的許可權資訊 匹配user、host欄位值,檢視全域性許可權是否允許,如果找到匹配資訊。則執行操作,否則繼續向下查詢許可權
  2. 檢查db表中的許可權資訊 匹配user、host值,檢視請求的資料庫級別的許可權是否允許,如果找到匹配結果,則執行操作,否則繼續向下查詢許可權
  3. 檢查tables_priv表中的許可權資訊,匹配user、host值,檢視請求的資料表級別是否允許,如果找到匹配結果,則執行操作,否則繼續向下查詢許可權
  4. 檢查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 `使用者`@`%`