首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 新增使用者的兩種方法:GRANT 語法與直接操作授權表

     編輯:MySQL 綜合教學

前言

在 MySQL 中建立使用者帳號主要有兩種途徑:使用 GRANT 語句(推薦,語法簡潔、錯誤率低)或 直接對授權表執行 INSERT/UPDATE(需手動 FLUSH PRIVILEGES)。本文詳細對比兩種方法並提供實戰範例。

方法一:使用 GRANT 語句(推薦)

先以 root 登入:

shell> mysql --user=root mysql

範例 1:建立超級使用者 monty

GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'something' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'something' WITH GRANT OPTION;

說明: 必須同時建立 localhost 與 % 兩條記錄,否則本地匿名帳號優先權較高會導致 monty@localhost 無法生效。

範例 2:建立管理帳號 admin(僅本地、無密碼、具備管理權限)

GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost';

可執行 mysqladmin reload、flush-*、processlist 等管理指令,無資料庫操作權限。

範例 3:建立無權限佔位帳號 dummy

GRANT USAGE ON *.* TO 'dummy'@'localhost';

USAGE 等同於「無任何權限」,用於預留帳號,後續再補授權。

範例 4:依來源主機與資料庫精細授權(custom 帳號)

-- 僅允許從 localhost 存取 bankaccount
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON bankaccount.* TO 'custom'@'localhost' IDENTIFIED BY 'stupid';

-- 僅允許從 whitehouse.gov 存取 expenses
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expenses.* TO 'custom'@'whitehouse.gov' IDENTIFIED BY 'stupid';

-- 允許從任意主機存取 customer
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON customer.* TO 'custom'@'%' IDENTIFIED BY 'stupid';

方法二:直接操作授權表(進階)

同樣先以 root 登入 mysql 資料庫,然後插入記錄:

建立對應使用者記錄

INSERT INTO user (Host, User, Password) VALUES ('localhost', 'custom', PASSWORD('stupid'));
INSERT INTO user (Host, User, Password) VALUES ('server.domain', 'custom', PASSWORD('stupid'));
INSERT INTO user (Host, User, Password) VALUES ('whitehouse.gov', 'custom', PASSWORD('stupid'));

此時僅建立登入憑證,所有權限欄位預設為 'N'。

授予資料庫層級權限(操作 db 表)

INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv)
VALUES ('localhost', 'bankaccount', 'custom', 'Y','Y','Y','Y','Y','Y');

INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv)
VALUES ('whitehouse.gov', 'expenses', 'custom', 'Y','Y','Y','Y','Y','Y');

INSERT INTO db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv)
VALUES ('%', 'customer', 'custom', 'Y','Y','Y','Y','Y','Y');

生效變更

FLUSH PRIVILEGES;

通配符網域授權技巧

允許來自 mydomainname.com 任意子網域的連線:

-- GRANT 方式
GRANT ALL PRIVILEGES ON *.* TO 'myusername'@'%.mydomainname.com' IDENTIFIED BY 'mypassword';

-- 直接操作表方式
INSERT INTO user (Host, User, Password) VALUES ('%.mydomainname.com', 'myusername', PASSWORD('mypassword'));
FLUSH PRIVILEGES;

輔助管理工具

除命令列外,亦可使用 xmysqladmin、mysql_webadmin、xmysql 等圖形化工具管理授權表(位於 MySQL Contrib 目錄)。

結語

日常運維強烈建議使用 GRANT/REVOKE 語句,語義清晰且自動處理權限生效。直接操作授權表僅適合批次匯入、遷移或特殊自動化場景,且務必記得 FLUSH PRIVILEGES。掌握兩種方法,靈活應對不同管理需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved