MySQL的權限管理設置方法
在 MySQL 中,用戶查看自己的權限和設置(修改)權限是兩個不同的操作:
- 查看權限:普通用戶可自行操作
- 設置/修改權限:必須由管理員(如 root)執(zhí)行,普通用戶不能給自己授權(除非被授予
GRANT OPTION)
下面分兩部分詳細說明:
一、? 用戶如何查看自己的權限?
方法 1:使用SHOW GRANTS(最推薦)
-- 查看當前用戶的全部權限 SHOW GRANTS;
? 輸出示例:
+------------------------------------------------------------------+ | Grants for 'app_user'@'%' | +------------------------------------------------------------------+ | GRANT USAGE ON *.* TO `app_user`@`%` | | GRANT SELECT, INSERT, UPDATE ON `shop_db`.* TO `app_user`@`%` | +------------------------------------------------------------------+
USAGE表示“能連接”,無實際數(shù)據(jù)權限- 第二行表示:對
shop_db庫的所有表有 查詢、插入、更新 權限
方法 2:確認當前身份(避免混淆)
-- 查看當前會話使用的賬號 SELECT USER(); -- 你登錄時用的賬號(如 'app_user'@'192.168.1.50') SELECT CURRENT_USER(); -- MySQL 實際用于權限校驗的賬號(如 'app_user'@'%')
?? 通常
CURRENT_USER()才是權限匹配的依據(jù)。
方法 3:檢查是否有某項具體權限(高級)
-- 檢查是否對某個庫有 SELECT 權限
SELECT
TABLE_SCHEMA AS database_name,
PRIVILEGE_TYPE
FROM INFORMATION_SCHEMA.SCHEMA_PRIVILEGES
WHERE GRANTEE = CONCAT('''', REPLACE(CURRENT_USER(), '@', '''@'''), '''')
AND PRIVILEGE_TYPE = 'SELECT';
?? 普通用戶一般用不到,
SHOW GRANTS已足夠。
二、??? 如何設置(授予)權限?(需管理員操作)
?? 重要前提:
普通用戶無法給自己授權!必須由具有GRANT OPTION權限的管理員(如 root)執(zhí)行。
步驟 1:管理員登錄 MySQL
mysql -u root -p
步驟 2:使用GRANT語句授予權限
?? 場景 1:授予數(shù)據(jù)庫級權限(最常用)
-- 授予 app_user 對 shop_db 庫的 增刪改查 權限 GRANT SELECT, INSERT, UPDATE, DELETE ON shop_db.* TO 'app_user'@'%'; -- 刷新權限(MySQL 8.0+ 通常不需要,但安全起見可加) FLUSH PRIVILEGES;
?? 場景 2:授予只讀權限
GRANT SELECT ON shop_db.* TO 'readonly_user'@'192.168.1.%';
?? 場景 3:授予所有權限(慎用?。?/h4>
GRANT ALL PRIVILEGES ON shop_db.* TO 'admin_user'@'localhost';
GRANT ALL PRIVILEGES ON shop_db.* TO 'admin_user'@'localhost';
?? 場景 4:允許該用戶再授權給他人(危險?。?/h4>
GRANT SELECT ON shop_db.* TO 'user'@'%' WITH GRANT OPTION;
GRANT SELECT ON shop_db.* TO 'user'@'%' WITH GRANT OPTION;
常用權限類型速查表
| 權限 | 作用 |
|---|---|
SELECT | 查詢數(shù)據(jù) |
INSERT | 插入數(shù)據(jù) |
UPDATE | 修改數(shù)據(jù) |
DELETE | 刪除數(shù)據(jù) |
CREATE | 創(chuàng)建表/庫 |
DROP | 刪除表/庫 |
ALTER | 修改表結構 |
INDEX | 創(chuàng)建/刪除索引 |
EXECUTE | 執(zhí)行存儲過程 |
ALL PRIVILEGES | 所有權限(不含 GRANT OPTION) |
?? 語法格式:
GRANT 權限列表 ON 數(shù)據(jù)庫.表 TO '用戶名'@'主機';
步驟 3:驗證權限是否生效
管理員可查看剛授予的權限:
SHOW GRANTS FOR 'app_user'@'%';
用戶重新連接后即可使用新權限。
三、? 撤銷權限(Revoke)
管理員也可隨時收回權限:
-- 撤銷 app_user 的 DELETE 權限 REVOKE DELETE ON shop_db.* FROM 'app_user'@'%'; -- 撤銷所有權限 REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app_user'@'%';
四、?? 最佳實踐建議
對普通用戶:
- 使用
SHOW GRANTS;快速了解自己能做什么 - 不要嘗試直接修改
mysql.user表(會導致權限不一致)
對管理員:
- 最小權限原則:只給業(yè)務必需的權限(如 Web 應用通常不需要
DROP) - 限制主機范圍:如
'app_user'@'10.0.0.%'而非'app_user'@'%' - 避免使用 root 跑應用!創(chuàng)建專用賬號
五、常見問題解答
Q:為什么我執(zhí)行GRANT報錯 “Access denied”?
A:你當前用戶沒有 GRANT OPTION 權限。請聯(lián)系 DBA 或用 root 操作。
Q:授予權限后,應用仍報 “Permission denied”?
A:檢查:
- 是否連接的是正確的數(shù)據(jù)庫?
- 用戶 host 是否匹配?(
'user'@'localhost'≠'user'@'%') - 是否需要重啟應用?(某些連接池會緩存權限)
Q:能否授權到列級別?
A:可以,但極少用:
GRANT SELECT (name, email) ON shop_db.users TO 'user'@'%';
? 總結
| 操作 | 誰執(zhí)行 | 命令 |
|---|---|---|
| 查看自己權限 | 任意用戶 | SHOW GRANTS; |
| 授予/修改權限 | 管理員 | GRANT ... TO 'user'@'host'; |
| 撤銷權限 | 管理員 | REVOKE ... FROM 'user'@'host'; |
?? 核心原則:
權限管理 = 安全基石,務必遵循最小權限、明確范圍、定期審計。
到此這篇關于MySQL的權限管理的簡單介紹的文章就介紹到這了,更多相關mysql權限管理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Linux系統(tǒng)每日定時備份mysql數(shù)據(jù)的方法步驟
這篇文章主要介紹了Linux系統(tǒng)每日定時備份mysql數(shù)據(jù)的方法步驟,包括創(chuàng)建文件夾、編寫腳本、設置定時任務和測試腳本,詳細步驟涵蓋從文件夾創(chuàng)建到腳本執(zhí)行的全過程,幫助用戶實現(xiàn)數(shù)據(jù)庫的自動備份,需要的朋友可以參考下2024-11-11

