剛安裝 MySQL,需在命令行創建用戶 `hr`、密碼 `123456`,並授予適當權限。
mysql -u root -p
# 輸入 root 密碼 (若未設置密碼直接回車)
-- 指定主機為 % 允許遠程連接,或 localhost 僅本地
CREATE USER 'hr'@'%' IDENTIFIED BY '123456';
-- 或僅本地
CREATE USER 'hr'@'localhost' IDENTIFIED BY '123456';
-- 授予所有數據庫所有表的所有權限 (生產環境慎用!)
GRANT ALL PRIVILEGES ON *.* TO 'hr'@'%' WITH GRANT OPTION;
-- 推薦:僅授予特定數據庫權限
GRANT ALL PRIVILEGES ON `mydb`.* TO 'hr'@'%';
-- 僅讀權限示例
GRANT SELECT ON `mydb`.* TO 'hr'@'%';
FLUSH PRIVILEGES;
SELECT User, Host FROM mysql.user WHERE User = 'hr';
SHOW GRANTS FOR 'hr'@'%';
mysql -u root -p
-- 在 MySQL 提示符下執行:
CREATE USER 'hr'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'hr'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
| 項目 | 說明 |
|---|---|
| 主機名 `%` vs `localhost` | `%` 允許任意 IP 連接;`localhost` 僅本地 Unix socket/127.0.0.1。生產環境建議限制具體 IP (如 `'hr'@'192.168.1.%'`)。 |
| MySQL 8.0 認證插件 | 默認 `caching_sha2_password`,舊客端 (Navicat 12-、舊 JDBC) 可能不支持。需改用 `mysql_native_password`: `ALTER USER 'hr'@'%' IDENTIFIED WITH mysql_native_password BY '123456';` |
| 防火牆/安全組 | 服務器防火牆需開放 3306 端口;雲服務器需配置安全組入站規則。 |
| bind-address 配置 | `/etc/mysql/my.cnf` 或 `mysqld.cnf` 中 `bind-address = 0.0.0.0` 允許遠程連接 (默認 127.0.0.1 僅本地)。修改後重啟 MySQL。 |
| 密碼策略 | 若報錯 "密碼不符合策略",可降低 `validate_password.policy` 或設置更複雜密碼。 |
ERROR 1396 (HY000): Operation CREATE USER failed for 'hr'@'%' → 用戶已存在,先 `DROP USER 'hr'@'%';`。ERROR 1045 (28000): Access denied for user 'hr'@'...' → 密碼錯誤、主機不匹配、權限未刷新、防火牆攔截、bind-address 未配置。ERROR 1133 (42000): Can't find any matching row in the user table → `FLUSH PRIVILEGES` 或用戶名/主機拼寫錯誤。MySQL 創建用戶授權核心四步:登錄 Root → CREATE USER → GRANT PRIVILEGES → FLUSH PRIVILEGES。生產環境務必遵循最小權限原則、限制訪問主機、配置防火牆、使用強密碼、注意認證插件兼容性。