最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL用戶賬戶分類的使用

 更新時(shí)間:2025年11月16日 14:43:28   作者:lang20150928  
MySQL 8.0.16引入用戶賬戶分類機(jī)制,通過SYSTEM_USER權(quán)限區(qū)分系統(tǒng)用戶和普通用戶,下面就來詳細(xì)的介紹一下如何使用,感興趣的可以了解一下

MySQL 8.0.16 及以后版本 中引入的一項(xiàng)重要安全機(jī)制:用戶賬戶分類(Account Categories),通過 SYSTEM_USER 權(quán)限來區(qū)分 系統(tǒng)用戶(System User)普通用戶(Regular User)。

下面我將用中文為你逐層解析、通俗易懂地解釋這段內(nèi)容的核心思想和實(shí)際意義,幫助你真正“理解”它。

一、核心概念:什么是“系統(tǒng)用戶”和“普通用戶”?

從 MySQL 8.0.16 開始,MySQL 把用戶分為兩類:

類型判斷標(biāo)準(zhǔn)俗稱
系統(tǒng)用戶(System User)擁有 SYSTEM_USER 權(quán)限的用戶“高權(quán)限管理員”
普通用戶(Regular User)沒有 SYSTEM_USER 權(quán)限的用戶“一般管理員或應(yīng)用用戶”

? 注意:SYSTEM_USER 是一個(gè)獨(dú)立的權(quán)限,它不賦予任何其他操作能力(比如建表、查數(shù)據(jù)),它的作用是控制誰能管理“系統(tǒng)級賬戶”。

二、為什么要分“系統(tǒng)用戶”和“普通用戶”?—— 安全隔離

問題背景:

在早期版本中,只要一個(gè)用戶有 CREATE USERSUPER 權(quán)限,他就可以:

  • 創(chuàng)建/刪除/修改任何用戶(包括 root)
  • 終止任何會(huì)話(包括 DBA 的連接)
  • 設(shè)置存儲(chǔ)過程的 DEFINER 為 root

這就導(dǎo)致了一個(gè)嚴(yán)重問題:
?? 一個(gè)“普通管理員”可能誤刪 root 賬戶,或者被攻擊者利用提權(quán),造成整個(gè)數(shù)據(jù)庫失控。

解決方案:

引入 SYSTEM_USER 權(quán)限作為“守門員”,實(shí)現(xiàn)權(quán)限的層級控制。

三、關(guān)鍵規(guī)則總結(jié)(重點(diǎn)?。?/h2>

? 規(guī)則 1:誰可以改誰?

操作者身份能否修改“系統(tǒng)用戶”?能否修改“普通用戶”?
系統(tǒng)用戶(有 SYSTEM_USER)? 可以(需其他權(quán)限配合)? 可以
普通用戶(無 SYSTEM_USER)? 不可以? 可以

?? 舉例:

  • 用戶 A 是普通用戶,擁有 CREATE USER 權(quán)限 → 他只能創(chuàng)建/修改/刪除其他“普通用戶”,不能動(dòng) root。
  • 用戶 B 是系統(tǒng)用戶,擁有 CREATE USER → 他可以操作所有用戶,包括 root。

這就像公司里的“超級管理員”和“部門管理員”:

  • 部門管理員可以管理本部門員工賬號;
  • 但不能動(dòng) CEO 或總管理員的賬號;
  • 只有超級管理員才能動(dòng) CEO 的賬號。

? 規(guī)則 2:哪些操作受SYSTEM_USER限制?

以下操作如果涉及“系統(tǒng)用戶”,執(zhí)行者必須自己也是“系統(tǒng)用戶”:

操作說明
賬戶管理(CREATE USER, GRANT, ALTER USER, DROP USER)修改系統(tǒng)用戶的密碼、權(quán)限、認(rèn)證方式等,必須由系統(tǒng)用戶操作
終止會(huì)話(KILL)你想 KILL 一個(gè)系統(tǒng)用戶的連接?你也得是系統(tǒng)用戶才行!
設(shè)置 DEFINER如果你想讓一個(gè)存儲(chǔ)過程/視圖以“系統(tǒng)用戶”身份運(yùn)行(DEFINER = 'root'@'localhost'),那你必須有 SYSTEM_USER 權(quán)限
設(shè)置 mandatory_roles不能把“系統(tǒng)用戶角色”設(shè)為強(qiáng)制角色(避免所有用戶自動(dòng)獲得高權(quán)限)
審計(jì)豁免(MySQL Enterprise Audit)從 8.0.28 起,系統(tǒng)用戶自動(dòng)獲得 AUDIT_ABORT_EXEMPT,即使審計(jì)規(guī)則禁止某些查詢,系統(tǒng)用戶仍可執(zhí)行 —— 這是為了防止審計(jì)配置錯(cuò)誤導(dǎo)致“完全無法登錄”的災(zāi)難

四、“會(huì)話”也有系統(tǒng)/普通之分

不僅用戶分類型,當(dāng)前連接的“會(huì)話”也分類型

  • 會(huì)話是否為“系統(tǒng)會(huì)話”,取決于:
    • 當(dāng)前用戶的賬號是否有 SYSTEM_USER
    • 或者當(dāng)前激活的角色中是否有包含 SYSTEM_USER 的角色

會(huì)話可以動(dòng)態(tài)變化!

-- 當(dāng)前是普通會(huì)話
SET ROLE admin_role; -- 如果 admin_role 包含 SYSTEM_USER
-- 現(xiàn)在變成了系統(tǒng)會(huì)話!

-- 再取消角色
SET ROLE NONE;
-- 又變回普通會(huì)話了

?? 注意:

  • 權(quán)限變更(如 GRANT SYSTEM_USER TO user)只對新連接生效,不影響已存在的會(huì)話。
  • 存儲(chǔ)過程執(zhí)行時(shí),繼承的是調(diào)用它的會(huì)話類型,而不是 DEFINER 是否是系統(tǒng)用戶。

五、如何保護(hù)系統(tǒng)賬戶不被普通用戶篡改?(實(shí)戰(zhàn)建議)

僅僅不讓普通用戶有 SYSTEM_USER 權(quán)限還不夠!因?yàn)檫€有另一種方式可以改用戶信息:

?? 直接修改 mysql 系統(tǒng)數(shù)據(jù)庫中的表(如 mysql.user)!

所以,為了徹底保護(hù)系統(tǒng)賬戶,你需要雙重防護(hù):

? 防護(hù)策略 1:禁止普通用戶操作mysql表

即使用戶有 ALL PRIVILEGES ON *.*,也可以通過 Partial Revoke(部分撤銷) 剝奪其對 mysql 庫的操作權(quán)。

示例:創(chuàng)建一個(gè)“全能但安全”的普通管理員 u1

-- 1. 創(chuàng)建用戶
CREATE USER u1 IDENTIFIED BY 'password';

-- 2. 授予全局所有權(quán)限(包含 SYSTEM_USER)
GRANT ALL ON *.* TO u1 WITH GRANT OPTION;

-- 3. 撤銷 SYSTEM_USER —— 讓 u1 成為普通用戶
REVOKE SYSTEM_USER ON *.* FROM u1;

-- 4. 撤銷對 mysql 系統(tǒng)庫的所有修改權(quán)限
--    防止他直接 INSERT/UPDATE mysql.user 來繞過限制
REVOKE ALL ON mysql.* FROM u1;

? 結(jié)果:

  • u1 可以管理所有數(shù)據(jù)庫、所有普通用戶;
  • 但不能修改系統(tǒng)用戶(如 root);
  • 也不能直接改 mysql.user 表來“偷渡”;
  • 完全安全!

更精細(xì)的權(quán)限控制示例:

示例 1:只允許讀mysql表(用于監(jiān)控)

CREATE USER monitor IDENTIFIED BY 'pass';
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO monitor;
REVOKE INSERT, UPDATE, DELETE ON mysql.* FROM monitor;
-- monitor 可以讀 mysql.user、mysql.db 查用戶信息,但不能改

示例 2:只允許看特定字段

CREATE USER auditor IDENTIFIED BY 'pass';
GRANT ALL ON *.* TO auditor;
REVOKE ALL ON mysql.* FROM auditor;
GRANT SELECT ON mysql.db TO auditor;
GRANT SELECT (Host, User) ON mysql.user TO auditor;
-- 只能查看 user 表的 Host 和 User 字段

六、常見問題解答(FAQ)

? Q1:SYSTEM_USER和SUPER有什么區(qū)別?

特性SYSTEM_USERSUPER(已棄用)
功能控制是否能操作“系統(tǒng)用戶”舊時(shí)代的萬能權(quán)限,幾乎無所不能
精細(xì)度更細(xì)粒度,專用于賬戶管理隔離太粗放,容易造成權(quán)限泛濫
推薦? 推薦使用?? 已標(biāo)記為 deprecated,未來會(huì)被移除

?? SUPER 正在被拆解成多個(gè)專用權(quán)限(如 CONNECTION_ADMIN, SYSTEM_USER, SET_USER_ID 等),這是 MySQL 權(quán)限體系現(xiàn)代化的一部分。

? Q2: root 用戶是系統(tǒng)用戶嗎?

? 是的!默認(rèn)的 root@localhost 在 MySQL 8.0+ 中會(huì)被自動(dòng)賦予 SYSTEM_USER 權(quán)限,屬于系統(tǒng)用戶。

? Q3: 我怎么查看某個(gè)用戶有沒有SYSTEM_USER權(quán)限?

-- 查看用戶權(quán)限
SHOW GRANTS FOR 'username'@'host';

-- 或查詢 mysql.user 表
SELECT User, Host, System_user FROM mysql.user WHERE User = 'root';

注意:字段名是 System_user(在 mysql.user 表中),值為 'Y''N'。

七、總結(jié):一句話理解

?? SYSTEM_USER 權(quán)限是一個(gè)“守門員”,它決定了一個(gè)用戶是否有資格去管理和影響那些“更高權(quán)限的系統(tǒng)賬戶”(如 root),從而實(shí)現(xiàn)了權(quán)限的層級隔離,提升了數(shù)據(jù)庫的安全性。

??? 實(shí)際建議(給 DBA 的最佳實(shí)踐)

  1. 只給真正需要的 DBA 分配 SYSTEM_USER 權(quán)限
  2. 普通運(yùn)維人員、應(yīng)用管理員應(yīng)設(shè)為“普通用戶”
  3. 使用 Partial Revoke 禁止普通用戶訪問 mysql 系統(tǒng)庫
  4. 避免使用 SUPER,改用細(xì)粒度權(quán)限(如 CONNECTION_ADMIN, SYSTEM_USER)
  5. 定期審計(jì)誰有 SYSTEM_USER 權(quán)限

如果你是數(shù)據(jù)庫管理員,這個(gè)機(jī)制就像是給你的“保險(xiǎn)箱”加了一把鎖:
?? 普通員工可以處理日常事務(wù),但動(dòng)不了保險(xiǎn)箱(root 賬號);
?? 只有拿著特定鑰匙(SYSTEM_USER)的人才能打開。

這樣,即使有人拿到管理員賬號,也無法輕易破壞核心系統(tǒng)。

如有具體場景(比如你想創(chuàng)建一個(gè)“受限管理員”),我可以幫你寫具體的 SQL 示例。

到此這篇關(guān)于MySQL用戶賬戶分類的使用的文章就介紹到這了,更多相關(guān)MySQL用戶賬戶分類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

灵台县| 绥江县| 卢龙县| 嵊州市| 蓝山县| 鹤峰县| 福鼎市| 儋州市| 安陆市| 武安市| 和龙市| 鹿邑县| 喀喇沁旗| 耒阳市| 鸡东县| 当涂县| 衢州市| 长春市| 车致| 手游| 桑日县| 高台县| 宁阳县| 三门峡市| 马龙县| 宁都县| 肇州县| 射洪县| 舒兰市| 文山县| 安达市| 固原市| 雷山县| 咸宁市| 吉安市| 上蔡县| 岑巩县| 天峻县| 佳木斯市| 定日县| 蓬溪县|