MySQL使用者及許可權管理

oscarwin發表於2019-02-28

在MySQL中使用者資料放在mysql庫的user表裡,在該表中儲存用使用者的使用者名稱,密碼和許可權資訊。

建立使用者

命令:CREATE USER `username`@`host` IDENTIFIED BY `password`;

說明:

  • username:登入的使用者名稱
  • password:是登入的密碼
  • host:指定可以登入的主機,其中localhost表示本機,%表示所有主機

舉例:

CREATE USER `testuser`@`%` IDENTIFIED BY `123`;
複製程式碼

建立一個使用者後,user表中會插入一行新的資料,但是該使用者是沒有任何許可權的

管理使用者許可權

新增使用者許可權

命令:GRANT privileges ON databasename.tablename TO `username`@`host`
說明:

  • privileges:使用者的操作許可權,如SELECT , INSERT , UPDATE,如果要授予所有許可權用all privileges
  • databasename:資料庫名,指定要授予許可權的庫,如果要對所有庫授予許可權用*代替
  • tablename:表名,指定要授予許可權的表,如果要對所有表授予許可權用*代替
  • username:被授予許可權的使用者名稱
  • host:被授予許可權的主機,如果要對所有主機授予許可權用%代替

舉例:

# 對使用者testuser授予在所有主機上對test庫的SELECT許可權
GRANT SELECT ON test.* TO `testuser`@`%`;

# 對所有庫都授予INSERT許可權後,user表中的該使用者Insert_priv的值被置為Y
GRANT INSERT ON *.* TO `testuser`@`%`;

# 給該使用者賦予所有許可權
GRANT ALL privileges ON *.* TO `testuser`@`%`;

# 執行完授予許可權的命令後,必須執行以下命令使修改生效
flush privileges;
複製程式碼

撤銷使用者許可權

命令:REVOKE privileges ON databasename.tablename FROM `username`@`host`;

例子:REVOKE ALL privileges ON *.* FROM `testuser`@`%`;

撤銷許可權的使用方法與授予許可權類似,參照授予的方式進行處理即可。

修改使用者密碼

命令: SET PASSWORD FOR `username`@`host` = PASSWORD(`newpassword`);

例子: SET PASSWORD FOR `testuser`@`%` = PASSWORD(`abcdef`);

檢視許可權

檢視本使用者的許可權:SHOW GRANTS;

檢視指定使用者的許可權:SHOW GRANTS FOR `username`@`host`;

舉例:

# 查詢使用者testuser在所有主機上的許可權
SHOW GRANTS FOR `testuser`@`%`
複製程式碼

刪除使用者

刪除使用者:DROP USER `username`@`host`;

舉例:DROP USER `testuser`@`%`;

使用者被刪除後user表中就不存在該使用者的資料。但是有一點需要注意的是,user表中是通過使用者名稱和主機名來唯一確定一個使用者,如果執行CREATE USER `testuser`@`10.1.1.1` IDENTIFIED BY `password`;CREATE USER `testuser`@`10.1.1.2` IDENTIFIED BY `password`;這兩條語句,會在user表中插入兩條資訊。因此,刪除使用者的時候也只能分兩次刪除。

總結

本篇文章介紹了MySQL管理使用者常用的一些命令,包括建立使用者,新增使用者許可權,刪除使用者許可權,修改使用者密碼,查詢使用者許可權。另外,user表也是一種資料表,因此也可以用MySQL操作表的SQL語句去操作該表,比如刪除使用者可以使用DELETE FORM USER WHERE User = testuser。當然,這種方式是不被推薦的,存在更大的誤操作風險。

相關文章