1. 程式人生 > 其它 >MySQL新增使用者及賦予許可權

MySQL新增使用者及賦予許可權

原文連結:   https://www.cnblogs.com/idlo/p/10872324.html

建立使用者
USE mysql; #建立使用者需要操作 mysql 表
# 語法格式為 [@'host']  host 為 'localhost' 表示本地登入使用者,host 為 IP地址或 IP 地址區間,表示指定IP地址的主機可登入,host 為 "%",表示所有主機都可登入,省略代表所有主機
CREATE USER 'username'[@'host'] IDENTIFIED BY 'password';
# eg. 常見 local_user 使用者可以在所有主機登入,密碼為 123456
CREATE USER 
'local_user' IDENTIFIED BY '123456'; # eg. 建立 local_user 只允許在本地登入 CREATE USER 'local_user'@'localhost' IDENTIFIED BY '123456';

檢視使用者許可權

# 可以通過查詢 user 表獲取 語法格式為
SELECT  privileges|* FROM user WHERE `user` = 'username';
# eg. 檢視 local_user 的許可權
SELECT * FROM user WHERE `user` = 'local_user';
# 也可以用 SHOW GRANTS 檢視
SHOW GRANTS FOR 
'username' [@host]; # eg. SHOW GRANTS FOR local_user;

賦予使用者許可權

# 語法格式
GRANT privileges ON database.table TO 'username'@'host' [IDENTIFIED BY 'password'];
# eg. 賦予 local_user 在所有主機的所有許可權,但不包含給其他賬號賦予許可權的許可權
GRANT all ON *.* TO 'local_user'@'%';
# 重新整理許可權 許可權更新後重新整理才會起作用
FLUSH PRIVILEGES;
GRANT命令說明:
priveleges (許可權列表),可以是all, 表示所有許可權,也可以是select,update等許可權,多個許可權的名詞,相互之間用逗號分開。
ON 用來指定許可權針對哪些庫和表。格式為資料庫 .表名 ,點號前面用來指定資料庫名,點號後面用來指定表名,
*.* 表示所有資料庫所有表。 TO 表示將許可權賦予某個使用者, 格式為username@host,@前面為使用者名稱,@後面接限制的主機,可以是IP、IP段、域名以及%,%表示任何地方。注意:這裡%有的版本不包括本地,以前碰到過給某個使用者設定了%允許任何地方登入,但是在本地登入不了,這個和版本有關係,遇到這個問題再加一個localhost的使用者就可以了。 IDENTIFIED BY 指定使用者的登入密碼,該項可以省略(某些版本下回報錯,必須省略)。 WITH GRANT OPTION 這個選項表示該使用者可以將自己擁有的許可權授權給別人。注意:經常有人在建立操作使用者的時候不指定WITH GRANT OPTION選項導致後來該使用者不能使用GRANT命令建立使用者或者給其它使用者授權。 備註:可以使用GRANT重複給使用者新增許可權,許可權疊加,比如你先給使用者新增一個select許可權,然後又給使用者新增一個insert許可權,那麼該使用者就同時擁有了select和insert許可權。 授權原則說明: 只授予能滿足需要的最小許可權,防止使用者幹壞事。比如使用者只是需要查詢,那就只給select許可權就可以了,不要給使用者賦予update、insert或者delete許可權。 建立使用者的時候限制使用者的登入主機,一般是限制成指定IP或者內網IP段。 初始化資料庫的時候刪除沒有密碼的使用者。安裝完資料庫的時候會自動建立一些使用者,這些使用者預設沒有密碼。 為每個使用者設定滿足密碼複雜度的密碼。 定期清理不需要的使用者。回收許可權或者刪除使用者。

收回使用者許可權

# 語法格式
REVOKE privileges ON database.table FROM 'username'@'host';
# eg. 收回 local_user 的寫入和更新許可權
REVOKE insert,update ON *.* FROM 'local_user'@'%';

刪除使用者

# 語法格式
DROP USER 'username'@'host';
# eg. 刪除本地使用者 local_user
DROP USER 'local_user'@'localhost';