全新安裝的 MySQL 僅有 root@localhost 超級帳號,無密碼。生產環境必須建立專用帳號並遵循最小權限原則。
-- 建立可從任意主機連線、擁有 test 資料庫 SELECT 權限的帳號
GRANT SELECT ON test.* TO 'yonghu'@'%' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
-- 建立僅限本機、具完整權限的管理帳號
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'strong_pwd' WITH GRANT OPTION;
FLUSH PRIVILEGES;
USE mysql;
INSERT INTO user (Host, User, Password) VALUES ('localhost', 'shagua', PASSWORD(''));
FLUSH PRIVILEGES;
需手動設定各權限欄位(Select_priv, Insert_priv 等),不建議新手使用。
| 權限 | 欄位名 | 說明 | 作用層級 |
|---|---|---|---|
| SELECT | Select_priv | 查詢資料 | 表 |
| INSERT | Insert_priv | 新增資料 | 表 |
| UPDATE | Update_priv | 修改資料 | 表 |
| DELETE | Delete_priv | 刪除資料 | 表 |
| CREATE | Create_priv | 建立資料庫/表/索引 | 資料庫/表 |
| DROP | Drop_priv | 刪除資料庫/表 | 資料庫/表 |
| GRANT | Grant_priv | 授權給他人 | 資料庫/表 |
| SHUTDOWN | Shutdown_priv | 關閉服務器 | 服務器管理 |
| FILE | File_priv | 讀寫伺服器檔案 | 檔案存取 |
-- 1. mysqladmin(命令列)
mysqladmin -u root -p'oldpwd' password 'newpwd'
-- 2. SET PASSWORD(需登入 MySQL)
SET PASSWORD FOR 'user'@'host' = PASSWORD('newpwd');
-- 3. UPDATE user 表
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='user' AND Host='host';
FLUSH PRIVILEGES;
-- 4. GRANT ... IDENTIFIED BY(同時授權與設密)
GRANT USAGE ON *.* TO 'user'@'host' IDENTIFIED BY 'newpwd';
root@localhost 仅本機登入mysql.user 表,移除無用帳號OLD_PASSWORD() 相容