我正在Google Cloud上使用MySQL 5.7.25版。
我撤消了所有特权:
REVOKE ALL ON *.* FROM 'user1';
我在一个表上添加了SELECT特权:
GRANT SELECT ON database1.table1 TO 'user1';
我使用以下方式检查特权:
SHOW GRANTS FOR 'user1'
Result:
GRANT USAGE ON *.* TO 'user1'@'%' WITH GRANT OPTION
GRANT SELECT ON `database1`.`table1` TO 'user1'@'%'
现在'user1'无法访问其他表。但是,“ user1”仍然可以使用以下方式查看数据库和表的列表:
SHOW DATABASES
SHOW TABLES
我尝试使用:
REVOKE SHOW DATABASES ON *.* FROM 'user1';
在文档中,这似乎是我要撤消的命令。但是,这对特权没有任何其他影响,因为USAGE特权将覆盖此SHOW DATABASES特权。
我已经看到在启动时使用“ skip-show-database”的建议,但是这将关闭所有用户的SHOW DATABASES命令。
如何限制用户仅查看可用的数据库和表?或如何完全关闭单个用户的这些命令?
根据MySQL documentation for the SHOW DATABASES
statement:
SHOW DATABASES
If the server was started with the --skip-show-database option, you cannot use this statement at all unless you have the SHOW DATABASES privilege
标志在skip_show_database
上。