[MYSQL] 使用 SQL 語法 快速建立使用者帳號
使用 phpMyAdmin 的圖形介面(GUI)來設定 MySQL 使用者權限雖然直觀,但在建立大量帳號或需要精確、批次管理權限時,直接使用 SQL 語法會是更快、更安全、更有效率的方法。
其實只要三行簡單的 SQL 語法,就能從零開始建立一個新帳號,並賦予所需的權限。
三行語法快速建立新使用者
我們將以建立一個名為 report_user 的帳號為例,目標是只讓它能讀取 product_db 資料庫中的 sales_data 資料表。
1:建立使用者並設定密碼
這是建立使用者帳號並設定初始密碼的第一步。請務必使用一個強密碼。
-- CREATE USER '使用者名稱'@'連線來源' IDENTIFIED BY '密碼';
CREATE USER 'report_user'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';
參數 | 說明 |
---|---|
'report_user' | 您要創建的使用者名稱。 |
'%' | 連線來源。 % 代表允許從任何 IP 位址連線。如果只允許從本機連線,請改用 'localhost'。 |
'StrongP@ssw0rd!' | 設定該帳號的登入密碼。 |
💡 注意: 執行此指令後,該使用者已經具備最基礎的連線能力 (USAGE 權限),有些教學文章會在建立帳號後,接一個給予連線能力的SQL語法,其實可以省略。
2:授予操作權限
這是關鍵步驟。我們只授予使用者讀取(SELECT)特定資料表的權限,確保它不能新增、修改或刪除任何資料。
-- GRANT 權限列表 ON `資料庫名稱`.`資料表名稱` TO '使用者名稱'@'連線來源';
GRANT SELECT ON `product_db`.`sales_data` TO 'report_user'@'%';
權限 | 說明 |
---|---|
SELECT | 唯讀權限,允許查詢資料。 |
ON product_db.sales_data | 精確指定權限作用的範圍:只針對 product_db 資料庫中的 sales_data 資料表。 |
如果要給予所有資料表的讀取權限?
將資料表名稱替換成 * 即可 GRANT SELECT ON product_db.* TO 'report_user'@'%';
3:重新載入權限設定
在任何授權(GRANT)或撤銷權限(REVOKE)操作之後,您都必須執行此指令,才能讓 MySQL 伺服器立即讀取並套用新的權限設定,無需重啟服務。
FLUSH PRIVILEGES;
未來帳號管理進階指令
如果您想修改或刪除這個帳號,這裡有幾個常用的 SQL 語法:
目的 | SQL 語法 | 備註 |
---|---|---|
修改密碼 | ALTER USER 'report_user'@'%' IDENTIFIED BY 'NewSecurePwd'; | 這是比舊版 SET PASSWORD 更推薦的現代語法。 |
撤銷權限 | REVOKE SELECT ON product_db.sales_data FROM 'report_user'@'%'; | 收回該使用者對該表的 SELECT 權限。 |
刪除帳號 | DROP USER 'report_user'@'%'; | 徹底移除該使用者及其所有權限。 |
總結
透過這三個簡單 SQL 語法,您就能快速又安全地建立一個擁有精確權限範圍的新使用者。記住,資料庫安全的黃金法則是「只給予執行任務所需的最小權限」,而 SQL 語法正是實踐這一原則的最佳工具!
備註:
如果你要快速的幫一個新來的程式工程師建立一個可以 CRUD+建表+改表(索引) 的使用者帳號(例如:mis007),語法如下:
CREATE USER 'mis007'@'%' IDENTIFIED BY 'mis007_Password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER ON *.* TO 'mis007'@'%';
FLUSH PRIVILEGES;