Mysql

級聯 REVOKE 在 MYSQL 中不起作用

  • December 13, 2021

我已經閱讀了關於在發出 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/ ) 都沒有實現RESTRICTCASCADE.

一般來說, aREVOKE只能否定一個相同的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.

不幸的是,我還沒有發現它記錄在案,所以上述結論是基於測試的。

引用自:https://dba.stackexchange.com/questions/247259