MySQL數(shù)據(jù)庫之用戶管理與權(quán)限控制的完整指南
在 MySQL 數(shù)據(jù)庫的日常使用與運維中,用戶管理與權(quán)限控制是保障數(shù)據(jù)安全的核心環(huán)節(jié)。如果所有操作都使用 root 超級用戶,一旦賬號泄露,整個數(shù)據(jù)庫將面臨毀滅性風(fēng)險。本文將從零開始,詳細(xì)講解 MySQL 用戶的創(chuàng)建、刪除、密碼修改,以及權(quán)限的授予、回收、查看等全套操作,幫你快速掌握安全合規(guī)的用戶權(quán)限管理方法。
一、為什么要做 MySQL 用戶管理?
在生產(chǎn)環(huán)境或多人協(xié)作場景中,絕對不能所有人都用 root 賬號。root 擁有數(shù)據(jù)庫的所有權(quán)限,可刪庫、可改表、可訪問所有數(shù)據(jù),風(fēng)險極高。

正確的做法是:按業(yè)務(wù)分工創(chuàng)建專用用戶,分配最小必要權(quán)限。
- 張三只負(fù)責(zé) mytest 庫,就只給 mytest 庫的操作權(quán)限
- 李四只負(fù)責(zé) msg 庫,就只給 msg 庫的操作權(quán)限
- 普通開發(fā)只給查詢權(quán)限,運維才授予部分管理權(quán)限
通過最小權(quán)限原則,能極大降低誤操作、數(shù)據(jù)泄露、惡意刪庫的風(fēng)險。
二、MySQL 用戶信息存哪里?
MySQL 的所有用戶信息,都存儲在系統(tǒng)庫 mysql 的 user 表中。
1. 查看用戶信息
-- 切換到系統(tǒng)庫 use mysql; -- 查看關(guān)鍵用戶信息 select host, user, authentication_string from user;
2. 關(guān)鍵字段解釋
- host:允許登錄的主機地址
localhost:僅允許本機登錄%:允許所有 IP 登錄(生產(chǎn)環(huán)境慎用)- 具體 IP:僅允許該 IP 登錄(最安全)
- user:用戶名
- authentication_string:密碼加密后的值(MySQL 不存儲明文密碼)
*_priv:各類權(quán)限字段,標(biāo)記用戶擁有的權(quán)限
三、用戶管理核心操作
1. 創(chuàng)建用戶
語法
create user '用戶名'@'登錄主機' identified by '密碼';
示例
-- 創(chuàng)建僅本機登錄的用戶 whb,密碼 12345678 create user 'whb'@'localhost' identified by '12345678';
常見問題:密碼強度不足
報錯:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
解決方法:
-- 查看密碼策略 SHOW VARIABLES LIKE 'validate_password%'; -- 臨時降低密碼策略(測試環(huán)境) set global validate_password_policy=0; set global validate_password_length=4;
安全提醒:不要創(chuàng)建 % 允許所有主機登錄的用戶,除非業(yè)務(wù)必需。
2. 刪除用戶
語法
drop user '用戶名'@'登錄主機';
錯誤示范
-- 錯誤:默認(rèn)匹配 %,找不到用戶 drop user whb;
正確示例
-- 刪除本機登錄的 whb 用戶 drop user 'whb'@'localhost';
3. 修改用戶密碼
① 用戶修改自己的密碼
set password=password('新密碼');
② root 修改其他用戶密碼
set password for 'whb'@'localhost'=password('87654321');
四、MySQL 權(quán)限體系
MySQL 內(nèi)置了完整的權(quán)限列表,覆蓋庫、表、視圖、存儲過程、服務(wù)器管理等維度。
常用權(quán)限速查
| 權(quán)限 | 作用 | 作用范圍 |
|---|---|---|
| SELECT | 查詢數(shù)據(jù) | 表 / 視圖 |
| INSERT | 插入數(shù)據(jù) | 表 |
| UPDATE | 更新數(shù)據(jù) | 表 |
| DELETE | 刪除數(shù)據(jù) | 表 |
| CREATE | 創(chuàng)建庫 / 表 / 索引 | 庫 / 表 |
| DROP | 刪除庫 / 表 | 庫 / 表 |
| ALTER | 修改表結(jié)構(gòu) | 表 |
| INDEX | 創(chuàng)建索引 | 表 |
| ALL PRIVILEGES | 所有權(quán)限 | 任意對象 |
五、權(quán)限控制核心操作
1. 給用戶授權(quán)
新創(chuàng)建的用戶默認(rèn)無任何權(quán)限,必須手動授權(quán)。
語法
grant 權(quán)限列表 on 庫.對象 to '用戶名'@'登錄主機' [identified by '密碼'];
權(quán)限寫法說明
- 單個權(quán)限:
grant select on ... - 多個權(quán)限:
grant select, insert, update on ... - 所有權(quán)限:
grant all privileges on ...
授權(quán)范圍
*.*:所有庫的所有對象庫名.*:指定庫下所有表 / 對象庫名.表名:指定庫的指定表
示例
-- 給 whb 授予 test 庫所有表的查詢權(quán)限 grant select on test.* to 'whb'@'localhost'; -- 給 whb 授予 test 庫所有權(quán)限 grant all privileges on test.* to 'whb'@'localhost';
2. 查看用戶權(quán)限
-- 查看指定用戶權(quán)限 show grants for 'whb'@'localhost';
3. 權(quán)限不生效?刷新權(quán)限
授權(quán)后若未立即生效,執(zhí)行:
flush privileges;
4. 回收權(quán)限
語法
revoke 權(quán)限列表 on 庫.對象 from '用戶名'@'登錄主機';
示例
-- 回收 whb 在 test 庫的所有權(quán)限 revoke all on test.* from 'whb'@'localhost';
六、完整實操流程(一步一驗)
root 登錄,創(chuàng)建用戶
create user 'whb'@'localhost' identified by '12345678';
授權(quán)
grant select on test.* to 'whb'@'localhost'; flush privileges;
新開終端,用 whb 登錄
mysql -uwhb -p
驗證權(quán)限
- 可查看 test 庫、可查詢表數(shù)據(jù)
- 執(zhí)行刪除 / 插入會報錯:權(quán)限不足
回收權(quán)限
revoke all on test.* from 'whb'@'localhost';
再次驗證:test 庫消失,無法訪問
七、安全最佳實踐
- 禁止使用 root 賬號日常開發(fā)
- host 盡量用具體 IP/localhost,不用
% - 權(quán)限最小化:能給查詢就不給修改,能給單庫就不給全庫
- 密碼復(fù)雜度要高,定期更換
- 定期清理無用用戶,回收閑置權(quán)限
- 生產(chǎn)環(huán)境禁止隨意 grant all
總結(jié)
MySQL 用戶管理與權(quán)限控制是數(shù)據(jù)庫安全的第一道防線。核心就三件事:
- 創(chuàng)建專用用戶,限定登錄主機
- 授予最小權(quán)限,按需分配
- 及時回收 / 清理,保持權(quán)限合規(guī)
掌握本文所有命令,你就能獨立完成企業(yè)級 MySQL 用戶權(quán)限維護(hù),遠(yuǎn)離刪庫跑路風(fēng)險。
到此這篇關(guān)于MySQL數(shù)據(jù)庫之用戶管理與權(quán)限控制的完整指南的文章就介紹到這了,更多相關(guān)MySQL用戶管理與權(quán)限控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MYSQL多表聯(lián)查on和where的區(qū)別小結(jié)
在使用left join時過濾條件放到on后面還是where后面是有區(qū)別的,如果沒有搞清楚他們的區(qū)別,連表匯總的結(jié)果就會變少或者變多,本文就來詳細(xì)介紹一下兩者的區(qū)別,感興趣的可以了解一下2023-11-11
如何解決MySQL安裝遇到Start service紅叉問題
在安裝MySQL時,若遇到StartService步驟打紅叉無法繼續(xù),可通過計算機管理以管理員身份運行服務(wù),找到MySQL服務(wù),更改為本地系統(tǒng)賬戶登錄,解決安裝問題,此方法為實際操作經(jīng)驗,可供參考,確保安裝順利完成2024-10-10
mysql逗號分隔的一行數(shù)據(jù)轉(zhuǎn)為多行數(shù)據(jù)的兩種方法
本文主要介紹了兩種將MySQL中逗號分隔的一行數(shù)據(jù)轉(zhuǎn)換為多行數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
MySQL中的insert-on-duplicate語句舉例詳解
這篇文章主要給大家介紹了關(guān)于MySQL中insert-on-duplicate語句的相關(guān)資料,文中通過圖文以及代碼示例將insert-on-duplicate的用法介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-06-06
在一臺服務(wù)器上安裝兩個或多個mysql的實現(xiàn)步驟
這篇文章給大家介紹如何在一臺服務(wù)器上安裝兩個或多個mysql的實現(xiàn)步驟,有需要的朋友們可以參考學(xué)習(xí),下面跟著小編一起來看看吧。2016-09-09

