Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> 關於伺服器

Linux MySQL 使用者管理完整指令集:建立、授權、刪除、修改密碼與遠端連線

編輯:關於伺服器

MySQL 使用者與權限管理是資料庫安全的核心。本文整理實務常用指令,涵蓋使用者建立、主機限制、權限授予/撤銷、密碼變更、遠端連線設定、資料庫操作、備份還原等完整場景,附帶最佳實務建議。

服務管理與連線

# 服務啟停
systemctl start mysqld
systemctl stop mysqld
systemctl restart mysqld

# 本地連線
mysql -u root -p
# 遠端連線
mysql -h 192.168.1.100 -u root -p
# 執行單條 SQL
mysql -u root -p -e "SHOW DATABASES;"

使用者建立與主機限制

# 建立本地使用者(僅允許 localhost 連線)
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongP@ssw0rd!';

# 建立遠端使用者(允許任意 IP 連線,% 為萬用字元)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';

# 建立特定網段使用者(推薦生產環境)
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongP@ssw0rd!';
CREATE USER 'app_user'@'10.0.%.%' IDENTIFIED BY 'StrongP@ssw0rd!';

注意:MySQL 8.0+ CREATE USER 不再隱含授權,需額外 GRANT。舊版 GRANT ... IDENTIFIED BY 仍支援但不建議使用。

權限授予與撤銷

# 授予特定資料庫所有權限
GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'192.168.1.%';

# 授予所有資料庫所有權限(謹慎使用,僅限管理帳號)
GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;

# 細粒度權限(最小權限原則)
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'192.168.1.%';
GRANT SELECT ON mysql.* TO 'monitor_user'@'localhost';  -- 監控帳號

# 撤銷權限
REVOKE DELETE ON mydb.* FROM 'app_user'@'192.168.1.%';
REVOKE ALL PRIVILEGES ON *.* FROM 'old_user'@'%';

# 立即生效
FLUSH PRIVILEGES;

修改密碼

# MySQL 5.7 / 8.0+ 標準語法
ALTER USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'NewStr0ngP@ss!';
-- 或
SET PASSWORD FOR 'app_user'@'192.168.1.%' = 'NewStr0ngP@ss!';

# 根使用者密碼重置(若遺忘)
# 1. 停止服務,啟動跳過授權表模式
systemctl stop mysqld
mysqld_safe --skip-grant-tables --skip-networking &
# 2. 免密登入修改
mysql -u root
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewRootP@ss!';
# 3. 正常重啟
systemctl restart mysqld

刪除使用者

DROP USER 'old_user'@'%';
DROP USER 'old_user'@'localhost';
FLUSH PRIVILEGES;

資料庫與資料表操作

# 列出資料庫
SHOW DATABASES;

# 建立/刪除資料庫
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
DROP DATABASE mydb;

# 切換資料庫
USE mydb;

# 列出資料表
SHOW TABLES;

# 檢視結構
DESCRIBE mytable;
SHOW CREATE TABLE mytable;

# 建立資料表範例
CREATE TABLE users (
  id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL UNIQUE,
  email VARCHAR(100) NOT NULL,
  password_hash CHAR(60) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

# 資料操作
INSERT INTO users (username, email, password_hash) VALUES ('john', 'john@example.com', '$2y$10$...');
SELECT * FROM users WHERE username='john';
UPDATE users SET email='john.new@example.com' WHERE username='john';
DELETE FROM users WHERE username='john';
TRUNCATE TABLE users;  -- 快速清空表

備份與還原

# 邏輯備份
mysqldump -u root -p --single-transaction --routines --triggers --events mydb > mydb_$(date +%F).sql
# 壓縮備份
mysqldump -u root -p mydb | gzip > mydb_$(date +%F).sql.gz

# 多資料庫備份
mysqldump -u root -p --databases db1 db2 > multi_db.sql

# 還原
mysql -u root -p mydb < mydb_2024-01-15.sql
# 或
mysql -u root -p -e "SOURCE /path/to/mydb.sql;" mydb

# 物理備份(需停機或鎖表,適合大型資料庫)
# Percona XtraBackup、MariaDB Backup

匯入文字資料

# 欄位以 Tab 分隔
LOAD DATA LOCAL INFILE '/path/to/data.txt' INTO TABLE mytable
  FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
  IGNORE 1 LINES;  -- 跳過標題行

遠端連線防火牆與安全設定

# 防火牆開放 3306(僅限應用伺服器 IP)
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.10/32" port protocol="tcp" port="3306" accept'
firewall-cmd --reload

# my.cnf 綁定位址(允許遠端連線)
[mysqld]
bind-address = 0.0.0.0
# 或特定 IP
bind-address = 192.168.1.50

# SSL 加密連線(生產環境強制)
[mysqld]
require_secure_transport=ON
ssl_ca=/etc/mysql/ssl/ca.pem
ssl_cert=/etc/mysql/ssl/server-cert.pem
ssl_key=/etc/mysql/ssl/server-key.pem

最佳實務檢查清單

  • ☑ 根帳號僅允許 localhost,強制複雜密碼、定期輪換。
  • ☑ 應用帳號遵循最小權限:特定資料庫、特定 IP/網段、僅必要權限(SELECT/INSERT/UPDATE/DELETE)。
  • ☑ 禁用 test 資料庫、匿名使用者(DELETE FROM mysql.user WHERE User='';)。
  • ☑ 啟用 skip-name-resolve 避免 DNS 解析延遲(內網環境)。
  • ☑ 設定 max_connect_errors=100000 防止主機被誤封鎖。
  • ☑ 審計日誌:audit_log 插件或 MariaDB Audit Plugin。
  • ☑ 定期 FLUSH PRIVILEGES; 確保權限變更生效(MySQL 8.0+ 通常自動生效)。

結語

MySQL 使用者管理看似基礎,實則關係資料庫安全邊界。落實「最小權限、網段限制、強密碼、審計追蹤」四大原則,配合自動化腳本管理帳號生命週期,才能在合規與安全雙重壓力下守護核心資料資產。

Copyright © Windows教程網 All Rights Reserved