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

MySQL 帳號管理全攻略:建用戶、改權限、重置密碼、遠程訪問與多實例端口

     編輯:MySQL 資料庫相關知識

一、用 GRANT 建立三類典型用戶

-- 超級用戶 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;

-- 管理用戶 admin,本機免密,僅有 RELOAD、PROCESS 權限
GRANT RELOAD,PROCESS ON *.* TO admin@localhost;

-- 虛擬用戶 dummy,本機免密,無任何權限(USAGE),後續再授權
GRANT USAGE ON *.* TO dummy@localhost;

關鍵點:必須同時建立 `user@localhost` 與 `user@%`,否則匿名用戶優先匹配導致無法登錄。

二、直接操作授權表(需 FLUSH PRIVILEGES)

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

三、忘記 root 密碼的兩種救援方案

方案 A:跳過授權表啟動

  1. 編輯 `my.ini`,在 `[mysqld]` 區段加入 `skip-grant-tables`,重啟服務。
  2. 免密以 root 登錄,執行:UPDATE user SET Password=PASSWORD('1234') WHERE User='root';
  3. 刪除 `skip-grant-tables`,重啟服務。

方案 B:複製已知密碼實例的 user 表文件

將正常實例 `mysql` 資料庫下的 `user.MYD`、`user.MYI`、`user.frm` 複製覆蓋至目標實例,即可用源實例密碼登錄。

四、開放 root 遠程訪問

方法 1:GRANT 雙條授權

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

方法 2:直接修改 user 表

UPDATE user SET Host='%' WHERE User='root'; FLUSH PRIVILEGES;  -- 允許遠程
UPDATE user SET Host='localhost' WHERE User='root'; FLUSH PRIVILEGES; -- 僅本機

五、多版本共存端口衝突處理

若 3306 被舊版佔用,新實例改用 3307/3309 等端口,連線時指定 `--port=3307` 或連線字串加 `port=3307` 即可。

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