MySql數據庫之數據庫安全性(自主存取控制:創建用戶和角色、改密、刪除用戶、授權、收回權限)

目錄

一、創建用戶

二、修改用戶密碼

三、授予用戶權限

四、收回用戶授權

五、刪除用戶

六、完整方案驗證

七、MySql8.0新特性(role)

注:有關MySql數據庫的其他操作請參見MySql目錄進行查找。


一、創建用戶

完整語法:CREATE USER ‘用戶名’@’登陸的主機’ IDENTIFIED BY ‘密碼’;

例子:CREATE USER 'jdh'@'localhost' IDENTIFIED BY '111111';

這個例子創建了一個用戶名爲:jdh,密碼爲:111111,且允許登陸的主機爲:本地的一個新用戶。

若要允許遠程登陸,則localhost可以替換爲相應的主機ip,或者直接替換爲:%(表示任何一臺主機都可以遠程登陸)。

普通用戶創建語法:CREATE USER '新用戶名';

這種格式創建的用戶可以無密碼登陸。

樣例:

創建七個用戶:U1, U2, U3, U4, U5, U6, U7

CREATE USER U1, U2, U3, U4, U5, U6, U7;

創建完成後可以進入數據庫mysql中查看創建的用戶:

SELECT Host, User FROM user;

二、修改用戶密碼

修改密碼格式:alter user 'jdh'@'localhost' identified with mysql_native_password by '123456';

修改密碼爲:123456,並指定加密規則爲mysql_native_password

三、授予用戶權限

授權語法:GRANT 權限  ON 對象(數據庫.表) TO ‘用戶名’@‘登陸主機’  [WITH GRANT OPTION];

-[WITH GRANT OPTION] :若加上了WITH GRANT OPTION子句,獲得某種權限的用戶還可以把這種權限再授予其他的用戶。

樣例:GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, EXECUTE ON *.* TO 'jdh'@'localhost';

解釋:這個例子授予了以上這些權限給用戶jdh,允許其通過本地登陸來對數據庫行使這些權限。

若想授予所有權限給所有的數據庫對象:GRANT ALL PRIVILEGES ON *.* TO 'jdh'@'localhost';

刷新系統權限表:FLUSH PRIVILEGES;

GRANT 語句的一般格式:GRANT <權限>... ON <對象類型> <對象名>... TO <用戶>... [WITH GRANT OPTION];

樣例:

樣例1:GRANT SELECT ON TABLE Student TO U1;

解釋:把查詢Student表的權限授予給用戶U1。

樣例2:GRANT ALL PRIVILEGES ON TABLE Student, Course TO U2, U3;

解釋:將Student和Course表的所有權限授予給用戶U2, U3。MySql中不允許將多個對象的權限同時授予給用戶,因此分兩次進行。

樣例3:GRANT UPDATE(Sno), SELECT ON TABLE Student TO U4;

解釋:將查詢Student表和修改學生學號的權限授予用戶U4。

四、收回用戶授權

收回格式:REVOKE <權限> … ON <對象類型> <對象>… FROM 用戶…;

樣例:REVOKE UPDATE(Sno) ON TABLE Student FROM U4;

解釋:把用戶U4修改學生學號的的權限收回。

五、刪除用戶

刪除格式:drop user '用戶名'@'登陸主機';

刪除格式:drop user '用戶名';

1、刪除創建的用戶:

DROP USER U1, U2, U3, U4, U5, U6, U7;

2、刪除後查看分配表:

SELECT Host, User FROM user;

六、完整方案驗證

方案:採用SYSTEM超級用戶登錄數據庫,完成所有權限分配工作,然後用相應用戶名登陸數據庫以驗證權限分配正確性;

1、登陸root用戶:mysql -h localhost -u root -p

2、創建用戶U1、U2、U3:CREATE USER U1, U2, U3;

3、給U1分配表Student的SELECT, UPDATE(Sage)權限:

GRANT SELECT, UPDATE(Sage) ON TABLE Student TO U1;

授權後查看U1用戶擁有的權限:

SHOW GRANTS FOR U1;

4、給U2分配表Student的SELECT, UPDATE(Sage)權限帶有WITH GRANT OPTION;

GRANT SELECT, UPDATE(Sage) ON TABLE Student TO U2 WITH GRANT OPTION;

授權後查看U2用戶擁有的權限:

SHOW GRANTS FOR U2;

5、登陸U1查詢Student表、更新Sage、插入數據、刪除數據、授權擁有的權限給用戶U3。

1)登陸:mysql -h localhost -u U1

2)查詢:SELECT * FROM Student;

3)更新Sage:UPDATE Student SET Sage = Sage + 1;

4)插入:INSERT INTO Student VALUES('111111111', 'haha', 'M', 30, 'CS');

5)刪除:DROP TABLE Student;

6)授權:GRANT SELECT, UPDATE(Sage) ON TABLE Student TO U3;

7、登陸U2授權擁有的權限給用戶U3

mysql -h localhost -u U2

GRANT SELECT, UPDATE(Sage) ON TABLE Student TO U3;

8、刪除用戶U1、U2、U3。

最終登陸回root用戶刪除U1、U2、U3。

七、MySql8.0新特性(role)

參考博客:https://blog.csdn.net/yanzongshuai/article/details/79118472

 

注:有關MySql數據庫的其他操作請參見MySql目錄進行查找。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章