首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 用戶初始化與安全加固:刪除匿名用戶、設置強密碼、最小權限授權

     編輯:MySQL 綜合教學

MySQL 用戶初始化與安全加固:刪除匿名用戶、設置強密碼、最小權限授權

MySQL 初始安裝默認存在匿名用戶、root 無密碼、測試庫等安全隱患。本文提供標準化初始化腳本,覆蓋 root 密碼設置、匿名用戶清理、業務賬號創建、權限最小化、遠程訪問控制等全鏈路加固操作。

一、 默認安全隱患盤點

隱患風險成因
root@localhost 無密碼本地任意用戶獲取最高權限初始化腳本未設置密碼
匿名用戶 ''@'localhost' / ''@'hostname'無需密碼登入、可訪問 test 庫mysql_install_db 默認創建
test 數據庫所有用戶可讀寫數據洩露、惡意寫入默認權限授予
root 允許遠程登入(部分版本)暴力破解、遠程接管授權 Host='%'

二、 標準初始化操作步驟

1. 以 root 登入(首次無密碼)

mysql -u root

2. 設置 root 密碼(多 Host 覆蓋)

-- 5.7+ 語法
ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongRootPass123!';
ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'StrongRootPass123!';
ALTER USER 'root'@'::1' IDENTIFIED BY 'StrongRootPass123!';
-- 若需遠程管理(極不推薦),單獨創建管理賬號
FLUSH PRIVILEGES;

3. 創建業務應用賬號(最小權限原則)

-- 僅允許應用服務器 IP 訪問
CREATE USER 'app_user'@'10.0.1.%' IDENTIFIED BY 'AppUserPass456!';

-- 僅授予業務庫增刪改查權限
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE 
ON `app_db`.* 
TO 'app_user'@'10.0.1.%';

-- 禁止 DDL、GRANT、SHUTDOWN 等危險權限
FLUSH PRIVILEGES;

4. 刪除匿名用戶(關鍵步驟)

-- 查看所有用戶
SELECT User, Host FROM mysql.user;

-- 刪除匿名用戶(注意 Host 匹配)
DROP USER ''@'localhost';
DROP USER ''@'%';
-- 若報錯 ERROR 1396,按實際 Host 刪除:
-- DROP USER ''@'actual_hostname';

💡 技巧:SELECT User, Host FROM mysql.user WHERE User = ''; 精確定位匿名用戶 Host。

5. 刪除測試庫

DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db = 'test' OR Db LIKE 'test\_%';
FLUSH PRIVILEGES;

6. 禁用 root 遠程登入(若誤開啟)

DELETE FROM mysql.user WHERE User = 'root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
FLUSH PRIVILEGES;

三、 自動化初始化腳本

#!/bin/bash
# mysql_secure_init.sh
# 使用:mysql_secure_init.sh 'RootPass' 'AppUser' 'AppPass' 'AppDB' 'AppIP%'

ROOT_PASS=$1
APP_USER=$2
APP_PASS=$3
APP_DB=$4
APP_HOST=$5

mysql -uroot <

四、 進階加固建議

  1. 密碼複雜度策略:安裝 validate_password 插件,強制長度≥12、混合字符類型
  2. 連接限制:CREATE USER ... WITH MAX_QUERIES_PER_HOUR 1000 MAX_CONNECTIONS_PER_HOUR 100
  3. SSL 強制加密:GRANT ... REQUIRE SSL,配置 require_secure_transport=ON
  4. 審計日志:啟用 audit_log 記錄登入、DDL、權限變更
  5. 定期審計:月度腳本檢查 mysql.user 異常 Host、過期賬號、過度授權

五、 常見報錯對照表

報錯原因解決
ERROR 1396 (HY000): Operation DROP USER failed for ''@'localhost'Host 名不匹配(如實際為主機名)SELECT User,Host FROM mysql.user WHERE User=''; 確認後精確刪除
ERROR 1410 (HY000): You are not allowed to create a user with GRANTNO_AUTO_CREATE_USER SQL 模式開啟先 CREATE USER 再 GRANT
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements密碼不符合 validate_password 策略增強密碼複雜度或降低策略等級

六、 總結

MySQL 安全基線 = 強 root 密碼 + 零匿名用戶 + 無測試庫 + 業務最小權限 + 禁用 root 遠程。將上述操作封裝為自動化腳本、納入部署流水線、定期審計複核,構建「安裝即安全、變更可追溯、異常可感知」的數據庫安全防線。

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