萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Linux 命令列建立 MySQL 使用者與權限管理完整實戰指南

前置準備

# 以 root 登入 MySQL
mysql -u root -p
# 輸入 root 密碼

建立使用者

-- 建立本地連線使用者
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd!';

-- 建立允許遠程連線使用者(% 通配所有主機)
CREATE USER 'myuser'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';

-- 指定主機/IP
CREATE USER 'myuser'@'192.168.1.%' IDENTIFIED BY 'StrongP@ssw0rd!';

-- 驗證建立結果
SELECT Host, User, authentication_string FROM mysql.user WHERE User = 'myuser';

權限體系詳解

授權實戰範例

1. 應用讀寫帳號(最常見)

GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE 
ON myapp.* TO 'app_user'@'%';

2. 唯讀報表帳號

GRANT SELECT ON myapp.* TO 'readonly'@'%';

3. 開發/測試全權限

GRANT ALL PRIVILEGES ON dev_db.* TO 'dev'@'%';

4. 特定表/欄位級權限

GRANT SELECT (id, username, email) ON myapp.users TO 'api_user'@'%';
GRANT UPDATE (status) ON myapp.orders TO 'order_service'@'%';

5. 通配符資料庫(多租戶)

GRANT ALL PRIVILEGES ON `tenant_%`.* TO 'saas_admin'@'%';

資源限制(防止佔用過多連線/查詢)

-- 每小時最大查詢 1000 次、連線 20 次、並發連線 5 個
GRANT USAGE ON *.* TO 'app_user'@'%' 
WITH MAX_QUERIES_PER_HOUR 1000 
     MAX_CONNECTIONS_PER_HOUR 20 
     MAX_USER_CONNECTIONS 5;

查看限制:SHOW GRANTS FOR 'app_user'@'%';

撤銷權限

REVOKE DELETE ON myapp.* FROM 'app_user'@'%';
REVOKE ALL PRIVILEGES ON *.* FROM 'old_user'@'%';

關鍵生效步驟

FLUSH PRIVILEGES;
-- MySQL 8.0+ 通常自動生效,但執行一下無妨

密碼管理與安全加固

-- 修改密碼
ALTER USER 'myuser'@'%' IDENTIFIED BY 'NewStr0ng!Pass';

-- 密碼過期策略
ALTER USER 'myuser'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;

-- 密碼歷史(防重複使用)
ALTER USER 'myuser'@'%' PASSWORD HISTORY 5;

-- 強制 SSL 連線
ALTER USER 'myuser'@'%' REQUIRE SSL;

常見問題排查

權限說明典型場景
ALL PRIVILEGES所有權限(除 GRANT OPTION)管理帳號
SELECT查詢唯讀報表帳號
INSERT/UPDATE/DELETE增刪改應用帳號
CREATE/DROP/ALTER結構變更遷移腳本/管理工具
INDEX索引管理DBA
LOCK TABLES鎖表備份工具
CREATE VIEW/SHOW VIEW視圖開發/報表
EXECUTE執行存儲程序/函式應用帳號
RELOAD/SHUTDOWN/PROCESS管理操作監控/備份帳號
REPLICATION SLAVE/CLIENT複制相關從庫帳號
現象原因解決
Access deniedHost 不匹配建立對應 Host 的用戶或用 %
Plugin caching_sha2_password8.0 預設插件舊驅動不支援ALTER USER ... IDENTIFIED WITH mysql_native_password BY 'pwd'
權限不生效未 FLUSH PRIVILEGES / 快取執行 FLUSH PRIVILEGES 或重新連線

自動化腳本範例

#!/bin/bash
# create_db_user.sh
DB_USER=$1
DB_PASS=$2
DB_NAME=$3

mysql -u root -p"${ROOT_PASS}" <

結語

遵循最小權限原則:應用帳號僅授必要增刪改查,嚴禁 root/ALL PRIVILEGES 直連業務。定期審計 mysql.user、mysql.db、mysql.tables_priv,撤銷無用帳號。

copyright © 萬盛學電腦網 all rights reserved