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

MySQL 使用者帳號與權限管理完整實戰

     編輯:MySQL 資料庫相關知識

一、GRANT 建立使用者(推薦方式)

案例 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;

說明:

  • monty@localhost:本機連線
  • monty@%:任意主機連線(通配符)
  • 需同時建立兩條,否則本機匿名使用者優先順序較高會導致無法登入
  • WITH GRANT OPTION:允許將權限授予他人

案例 2:管理使用者 admin

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

無密碼、僅本機、具 RELOAD/PROCESS 管理權限(可執行 mysqladmin reload、flush-*、processlist),無資料庫操作權限。

案例 3:虛設使用者 dummy

GRANT USAGE ON *.* TO dummy@localhost;

無密碼、僅本機、USAGE 代表「無任何全域權限」,預留日後授予資料庫層級權限。

二、直接修改授權表(進階)

適用於批量腳本或特殊需求,操作後必須執行 FLUSH PRIVILEGES。

建立使用者 custom

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'));

授予資料庫權限

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;

三、忘記密碼的替代解法

方法 1:修改 my.ini 啟用 skip-grant-tables

  1. 在 [mysqld] 區段加入 skip-grant-tables
  2. 重啟服務
  3. 以任意使用者身分登入(超級權限)
  4. 更新密碼:UPDATE user SET password=PASSWORD('1234') WHERE user='root';
  5. 移除 skip-grant-tables,重啟服務

方法 2:複製已知密碼的 user 表檔案覆蓋

若有其他可正常存取的 MySQL 實例,可複製其 mysql 資料庫下的 user.* 檔案覆蓋即可。

四、開啟 root 遠程存取權限

方法 1:GRANT 雙重授權

GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'password' WITH GRANT OPTION;

方法 2:直接修改 user 表

UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

注意:MySQL 5.0 圖形安裝精靈已內建「允許 root 遠程連線」選項,預設關閉。

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