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

以非 root 身分運行 MySQL 完整指南:Windows 服務與 Linux/Unix 權限最小化實戰

     編輯:MySQL 資料庫相關知識

核心原則

絕不以 root/Administrator 身分運行 mysqld。最小權限原則:資料庫進程僅擁有資料目錄讀寫、日誌寫入、tmpdir 讀寫、socket 建立權限。

Linux/Unix 環境標準化流程

  1. 建立專用帳號:
    groupadd -r mysql && useradd -r -g mysql -s /sbin/nologin -d /var/lib/mysql mysql
  2. 停止服務並遷移資料目錄擁有權:
    systemctl stop mysqld
    chown -R mysql:mysql /var/lib/mysql

    注意:若資料目錄含符號連結,需 chown -h 遞歸處理連結目標。
  3. 設定啟動使用者(二選一):
  • my.cnf:
    [mysqld]
    user = mysql
  • systemd override:
    systemctl edit mysqld
    [Service]
    User=mysql
    Group=mysql
  1. 驗證:
    ps -eo user,cmd | grep mysqld → 應顯示 mysql 而非 root。

Windows 服務環境

  • 建立專用服務帳號(非 Administrator),授予「作為服務登入」權限。
  • 服務屬性 → 登入 → 指定該帳號密碼。
  • 資料目錄 ACL:僅該帳號 + SYSTEM 擁有完全控制權。

安全加固清單

項目建議
root 帳號強制設定強密碼,禁止遠端登入 (host=localhost)
匿名帳號DROP USER ''@'%'; DROP USER ''@'localhost';
測試資料庫DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test%'
FILE 權限僅 admin 帳號持有,防止 LOAD DATA INFILE 讀取系統檔案
PROCESS/SUPER僅 DBA 帳號持有,防止查看他人查詢/修改全域變數
連線數限制GRANT ... WITH MAX_CONNECTIONS_PER_HOUR 100

常見誤區澄清

  • 誤區:以 root 啟動再切換用戶 (--user=mysql) 即安全。
    事實:啟動瞬間仍具 root 權限,若啟動腳本被竄改可提權。systemd User= 直接以目標用戶啟動更安全。
  • 誤區:資料目錄 chown 給 mysql 後,root 仍可讀寫。
    事實:root 繞過 DAC,需配合 SELinux/AppArmor 強制存取控制真正限制。

結語

非 root 運行是資料庫安全基線第一步。標準化部署:專用帳號 + 目錄擁有權遷移 + systemd User= 指定 + 權限最小化授權 + 審計基線掃描,構建纵深防禦體系。

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