TLDR;
是否可以授予某個「審核」使用者僅存取 MySQL 元資料(至少是架構、表、列)的權限,而不存取表中的確切資料?
MySQL 8
在此問題之前,
我已經嘗試過或知道:
mysql
、privilege
、metadata
等showdatabases
權限,但只能取得schema清單infomatica_schema
的所有資助都白費了SELECT ON *.*
是另一個答案,但我的領導不想透過它洩漏資料我的公司命令 devops 收集 MySQL 元數據,以用於審計或安全監控或其他問題(我不知道整個故事的細節)。我的領導層預計不會發生不必要的資料外洩。 順便說一句,我不知道他們(也許是審計部門)將收集元資料的具體方法。我所要做的就是為他們創建一個授權使用者。
P粉7397060892024-03-22 18:38:15
我想我找到了解決這個問題的方法,但這只是一種駭客行為,而不是真正的解決方案。
https://dev.mysql.com/doc /refman/8.0/en/show-tables.html 說:
也就是說,您不能使用 SHOW TABLES,也不能在針對 INFORMATION_SCHEMA 的查詢中查看表(因為 SHOW TABLES 實際上只是針對這些系統視圖的查詢)。
但是「沒有特權」的語言讓我思考。是否存在使用者可以擁有但不允許讀取或寫入資料的權限?
https://dev.mysql.com/doc/refman /8.0/en/grant.html 說:
SHOW VIEW
怎麼樣?這僅允許查看元數據,而不允許查詢表或視圖。
所以我試了一下:
mysql> create user 'auditor'@'%'; mysql> grant show view on test.* to 'auditor'@'%';
然後我以該使用者身分登入並嘗試:
mysql> show grants; +----------------------------------------------+ | Grants for auditor@% | +----------------------------------------------+ | GRANT USAGE ON *.* TO `auditor`@`%` | | GRANT SHOW VIEW ON `test`.* TO `auditor`@`%` | +----------------------------------------------+ mysql> use test mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | Accounts | | Bugs | | BugsProducts | | BugStatus | ...
我還可以查看列等。
需要明確的是,這些是具體的表,而不是視圖。但由於我的審核員使用者對錶沒有任何權限(甚至是不相關的權限),因此它符合讓他們查看有關表的元資料的目的。
在 MySQL 8.0.20 中,他們加入了 SHOW ROUTINES
權限。在此之前,您需要 SELECT
權限才能查看預存程序或函數的主體。但您在問題中沒有提到審計員查看例程。