在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
。當然,這種方式是不被推薦的,存在更大的誤操作風險。