在CentOS系統中管理MySQL權限前,需先完成以下基礎步驟:
mysql -u root -p,輸入密碼后進入交互界面。SELECT User, Host FROM mysql.user;可查看當前MySQL中的所有用戶及其允許連接的主機(如localhost表示僅本地連接,%表示允許遠程連接)。使用CREATE USER語句創建用戶,需指定用戶名、主機名(限制連接來源)和密碼。常見格式如下:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'StrongPassword';192.168.1.100或所有IP):CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'StrongPassword'; 或 CREATE USER 'username'@'%' IDENTIFIED BY 'StrongPassword';123456),建議使用包含大小寫字母、數字和符號的復雜密碼。使用ALTER USER語句修改用戶密碼,格式為:
ALTER USER 'username'@'host' IDENTIFIED BY 'NewPassword';
例如:ALTER USER 'newuser'@'localhost' IDENTIFIED BY 'NewSecurePassword123';
修改后需確保用戶下次連接時使用新密碼。
使用DROP USER語句徹底刪除用戶,格式為:
DROP USER 'username'@'host';
例如:DROP USER 'olduser'@'%';
刪除用戶會同時移除其所有權限,操作前需確認用戶無需再使用。
MySQL權限分為全局級別(影響整個MySQL服務器,如創建用戶、備份數據庫)、數據庫級別(影響特定數據庫的所有表)、表級別(影響特定表的部分列)和列級別(影響表的特定列)。以下是常見操作:
使用GRANT語句授予權限,基本格式為:
GRANT 權限類型 ON 對象 TO 'username'@'host';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;(WITH GRANT OPTION允許用戶將自己的權限授予其他用戶,需謹慎使用)。mydb數據庫的所有表):GRANT ALL PRIVILEGES ON mydb.* TO 'dev'@'localhost';dev用戶查詢mydb數據庫的users表):GRANT SELECT ON mydb.users TO 'dev'@'localhost';GRANT INSERT ON mydb.products TO 'sales'@'%';DROP權限時不要授予ALL PRIVILEGES)。MySQL 8.0及以上版本支持角色(Role),可將權限分組并批量授予用戶,簡化權限管理:
CREATE ROLE 'developer_role';GRANT ALL PRIVILEGES ON mydb.* TO 'developer_role';GRANT 'developer_role' TO 'dev1'@'localhost', 'dev2'@'localhost';SHOW GRANTS FOR 'developer_role';使用SHOW GRANTS語句查看用戶的權限詳情,格式為:
SHOW GRANTS FOR 'username'@'host';
例如:SHOW GRANTS FOR 'dev'@'localhost';
輸出結果會顯示用戶擁有的所有權限(如GRANT USAGE ON *.* TO 'dev'@'localhost'表示基本連接權限,GRANT SELECT ON mydb.* TO 'dev'@'localhost'表示數據庫級權限)。
使用REVOKE語句撤銷用戶的特定權限,格式與GRANT相反:
REVOKE 權限類型 ON 對象 FROM 'username'@'host';
dev用戶對mydb數據庫的所有權限:REVOKE ALL PRIVILEGES ON mydb.* FROM 'dev'@'localhost';sales用戶的插入權限:REVOKE INSERT ON mydb.products FROM 'sales'@'%';FLUSH PRIVILEGES;使更改生效(MySQL 8.0+版本可自動生效,但建議仍執行該命令)。修改權限后,需執行FLUSH PRIVILEGES;命令使更改立即生效(MySQL 8.0+版本中,GRANT/REVOKE會自動刷新,但顯式執行更安全)。
權限管理需遵循最小權限原則,即為用戶分配完成任務所需的最少權限。例如:
SELECT、INSERT、UPDATE權限,無需DELETE或DROP權限;SELECT、SHOW VIEW權限,無需修改數據的權限。定期檢查用戶權限,移除不必要的權限或閑置用戶:
SELECT User, Host, Grant_priv FROM mysql.user;SELECT User, Host FROM mysql.user WHERE last_login IS NULL;DROP USER 'unused'@'localhost';創建用戶時,盡量限制其連接的主機范圍(如localhost或特定IP),避免使用%(允許所有主機連接),減少遠程攻擊風險。
為防止密碼泄露或數據篡改,可配置MySQL使用SSL加密連接:
/etc/my.cnf),添加SSL證書路徑:[mysqld]
ssl-ca=/path/to/ca-cert.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
systemctl restart mysqld。mysql --ssl-ca=/path/to/ca-cert.pem --ssl-cert=/path/to/client-cert.pem --ssl-key=/path/to/client-key.pem -u username -p。通過validate_password插件強化密碼強度:
SHOW VARIABLES LIKE 'validate_password%';SET GLOBAL validate_password_policy=STRONG;
SET GLOBAL validate_password_length=8;
/etc/my.cnf的[mysqld]部分。通過以上步驟,可實現CentOS系統中MySQL權限的精細化管理,保障數據庫的安全性與可用性。權限操作前需備份重要數據,并在測試環境驗證命令的正確性。