級聯 REVOKE 在 MYSQL 中不起作用
我已經閱讀了關於在發出 REVOKE 語句時級聯權限的 SQL 選項。我已經用Google搜尋了這個選項是如何在 MySQL 中實現的,但根本沒有找到它。
這是關於 REVOKE 語法的文件頁面,沒有級聯選項的跡象。
SQL 標準級聯語法具有以下格式:
REVOKE [GRANT OPTION FOR] privileges ON object FROM user {RESTRICT | CASCADE}
是否可以在 MySQL 中級聯撤銷權限?
MySQL 和 Mariadb ( https://mariadb.com/kb/en/library/revoke/ ) 都沒有實現
RESTRICT
或CASCADE
.一般來說, a
REVOKE
只能否定一個相同的GRANT
。例如,您不能GRANT ALL ...
,那麼REVOKE UPDATE ...
。也就是說,MySQL 和 MariaDB 的 GRANT/REVOKE 功能非常有限。
“角色”在 MySQL 8.0 和 MariaDB 10.0 中可用。(但我認為這與您的問題無關。)
從 dbms 到 dbms,語法自然會有所不同。
將“一點”改為“有時很多”。
MySQL 沒有實現語句中的
RESTRICT
/CASCADE
選項。此外,MySQL 以一種與和不兼容的方式REVOKE
隱式執行語句。REVOKE``RESTRICT``CASCADE
讓我們假設:
- root 使用者執行:
GRANT INSERT ON table1 TO user1 WITH GRANT OPTION
,- 然後,user1 執行:
GRANT INSERT ON table1 TO user2
,- 最後,root 使用者執行:
REVOKE INSERT ON table1 FROM user1
.現在,user2 仍然能夠向 table1 添加行。
這不是
RESTRICT
行為 - 因為 root 使用者能夠執行REVOKE INSERT ON table1 FROM user1
. 這也不是CASCADE
行為 - 因為 user2 仍然可以向 table1 添加行。MySQL 刪除給定使用者的特權,忽略該使用者是否將此特權授予其他使用者。該
REVOKE
語句對使用WITH ADMIN OPTION
.不幸的是,我還沒有發現它記錄在案,所以上述結論是基於測試的。