首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 建立用戶帳號與授權完整教學

     編輯:MySQL 資料庫相關知識

方法一:CREATE USER (MySQL 5.0.2+)

CREATE USER 'user'@'host' IDENTIFIED BY 'password';
-- 指定加密密碼
CREATE USER 'user'@'host' IDENTIFIED BY PASSWORD '*hash';

需具備 CREATE USER 全域權限或 mysql.user 的 INSERT 權限。帳號建立後無任何權限,需另行 GRANT。

方法二:GRANT 同時建立用戶並授權 (推薦)

語法:GRANT privileges ON db.tbl TO 'user'@'host' IDENTIFIED BY 'pass' [WITH GRANT OPTION];

範例:建立四種典型帳號

-- 超級管理員 (本機 + 遠端)
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'pass' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION;

-- 運維帳號 (僅管理權限)
GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost';

-- 佔位帳號 (無權限,後續再給)
GRANT USAGE ON *.* TO 'dummy'@'localhost';

關鍵點:同時建立 'user'@'localhost' 與 'user'@'%' 可避免匿名用戶優先匹配導致權限異常。

方法三:直接操作授權表 (不推薦,易出錯)


INSERT INTO mysql.user (Host,User,Password,Select_priv,Insert_priv,...)
VALUES ('localhost','monty',PASSWORD('pass'),'Y','Y',...);
INSERT INTO mysql.user (Host,User,Password) VALUES ('localhost','dummy','');
FLUSH PRIVILEGES;

需手動 FLUSH PRIVILEGES 重載權限;密碼必須用 PASSWORD() 加密。

實戰範例:多資料庫分離授權


-- 用戶 custom 分別存取三個資料庫,限制來源主機
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON bankaccount.* TO 'custom'@'localhost' IDENTIFIED BY 'obscure';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expenses.*   TO 'custom'@'whitehouse.gov' IDENTIFIED BY 'obscure';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON customer.*   TO 'custom'@'server.domain' IDENTIFIED BY 'obscure';

若用 INSERT 寫授權表,需同時向 mysql.user 與 mysql.db 插入記錄,最後 FLUSH PRIVILEGES。

通配符主機授權


GRANT ALL ON *.* TO 'myname'@'%.mydomain.com' IDENTIFIED BY 'mypass';
-- 等同 INSERT
INSERT INTO mysql.user (Host,User,Password) VALUES ('%.mydomain.com','myname',PASSWORD('mypass'));
FLUSH PRIVILEGES;

刪除用戶

DROP USER 'user'@'host';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved