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

MySQL 基礎操作實戰:連線、修改密碼、建立使用者與權限管理

     編輯:MySQL 綜合教學

MySQL 日常運維三板斧:連線、密碼、權限

資料庫上線後,最基礎也最頻繁的操作就是連線驗證、密碼輪換、帳號權限管理。本文提供標準化操作指令與最佳實務,適合 DBA 手冊收錄。

一、連線 MySQL 伺服器

標準連線語法

mysql -h <主機> -u <使用者> -p[密碼] [<資料庫>]
# 參數說明:
# -h: 主機名或 IP,本機可省略
# -u: 使用者名稱
# -p: 後接密碼 (不安全) 或空白提示輸入 (安全)
# 資料庫: 連線後預設 USE 的資料庫

常用連線範例

場景指令
本機 root 互動式輸入密碼mysql -u root -p
遠端連線指定資料庫mysql -h 192.168.1.100 -u app_user -p business_db
使用 Socket 連線 (繞過 TCP)mysql -u root -p -S /var/run/mysqld/mysql.sock
執行單條 SQL 後退出mysql -u root -p -e "SELECT VERSION();"
批次執行 SQL 檔案mysql -u root -p db_name < script.sql
垂直顯示結果 (適合寬表)mysql -u root -p -e "SHOW ENGINE INNODB STATUS\G"

退出指令

QUIT / EXIT / \q / Ctrl+D

二、修改密碼

方法一:mysqladmin (命令列、無需登入 Shell)

# 修改當前使用者密碼 (需知舊密碼)
mysqladmin -u root -p'old_pass' password 'new_pass'

# 修改指定使用者密碼 (需 SUPER 權限)
mysqladmin -u root -p'root_pass' password 'new_pass' -u target_user

方法二:SQL 指令 (需登入 MySQL Shell)

-- 8.0+ 推薦語法
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 或支援密碼驗證插件
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'NewStrongPass123!';

-- 5.7 相容語法
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewStrongPass123!');
-- 或
UPDATE mysql.user SET authentication_string = PASSWORD('NewStrongPass123!') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

密碼策略最佳實務

  • 長度 ≥ 16 字元,包含大小寫、數字、特殊符號
  • 定期輪換 (90 天),password_expire_interval 自動強制
  • 禁止重複使用近 5 次密碼,password_history
  • 應用帳號與管理帳號分離,應用帳號僅限特定 IP

三、建立使用者與權限管理

8.0+ 現代語法 (推薦)

-- 1. 建立使用者 (預設 caching_sha2_password)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
CREATE USER 'readonly'@'192.168.1.%' IDENTIFIED BY 'ReadOnlyPass456!';

-- 2. 授予權限 (按最小權限原則)
-- 應用帳號:核心業務 CRUD
GRANT SELECT, INSERT, UPDATE, DELETE ON business_db.* TO 'app_user'@'%';

-- 唯讀帳號:報表、備份
GRANT SELECT ON business_db.* TO 'readonly'@'192.168.1.%';

-- 開發帳號:含 DDL (建表、索引)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX ON dev_db.* TO 'dev_user'@'%';

-- 管理帳號:特定管理操作
GRANT PROCESS, REPLICATION CLIENT, SHOW DATABASES ON *.* TO 'monitor'@'10.0.0.%';

-- 3. 生效
FLUSH PRIVILEGES;

權限層級與範圍對照

層級語法範例適用對象
全域GRANT SELECT ON *.* TO 'u'@'h'所有資料庫、所有表
資料庫GRANT SELECT ON db.* TO 'u'@'h'指定資料庫所有表
資料表GRANT SELECT ON db.tbl TO 'u'@'h'指定表
欄位GRANT SELECT (col1,col2) ON db.tbl TO 'u'@'h'指定欄位

常用權限項目速查

  • 資料操作: SELECT, INSERT, UPDATE, DELETE
  • 結構操作: CREATE, ALTER, DROP, INDEX, CREATE VIEW, SHOW VIEW
  • 管理操作: RELOAD, SHUTDOWN, PROCESS, FILE, REPLICATION CLIENT/SLAVE, SUPER
  • 安全操作: CREATE USER, DROP USER, GRANT OPTION

查看與撤銷權限

-- 查看使用者權限
SHOW GRANTS FOR 'app_user'@'%';

-- 撤銷特定權限
REVOKE DELETE ON business_db.* FROM 'app_user'@'%';

-- 撤銷所有權限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'%';

-- 刪除使用者
DROP USER 'app_user'@'%';

四、緊急重設 Root 密碼 (跳過權限表)

  1. 停止服務:systemctl stop mysqld
  2. 跳過權限啟動:mysqld_safe --skip-grant-tables --skip-networking &
  3. 免密登入:mysql -u root
  4. 修改密碼:
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
  5. 正常重啟:systemctl restart mysqld

「連線驗證、密碼輪換、最小權限」三件事做好,資料庫安全基線即立住。建議將上述指令封裝為 Ansible Playbook 或 Shell 腳本,納入例行維運自動化。

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