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

