MySQL 查看所有数据库的权限

MySQL permissions to see all databases

我的服务器上有一些用户可以访问每个 MySQL 数据库。我正在尝试撤销特权,但我不确定该怎么做。

例如:我有一个用户 bob 可以访问我服务器上的每个数据库。我运行下面看看bob有哪些权限:

mysql -e "select * from information_schema.user_privileges;" | grep bob
'bob'@'%'       def     SELECT  NO
'bob'@'%'       def     INSERT  NO
'bob'@'%'       def     UPDATE  NO
'bob'@'%'       def     DELETE  NO
'bob'@'%'       def     CREATE  NO
'bob'@'%'       def     FILE    NO
'bob'@'%'       def     CREATE USER     NO

没有什么比 GRANTALLSUPER 更突出了。我创建了一个新数据库 sometest,切换到 bob 的帐户并看到 bob 可以访问 sometest。不确定我在这里遗漏了什么。

编辑:我运行 SHOW GRANTS FOR 'bob'@'%'; 并查看:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN,
  PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, 
  LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, 
  CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE 
  ON *.* TO 'bob'@'%'

1) 如何取消此权限?我假设如果我 运行:

REVOKE SELECT, INSERT,... on *.* to 'bob'@'%';

它将删除

等权限
GRANT ALL ON bobsdb.* TO 'bob'@'%';

我不想发生这种情况。但也许最好只是删除所有权限并从头开始重新构建它们。

2) 像这样如何识别所有权限?我必须查看每个用户吗?

您应该能够使用以下命令查看用户的授权:

SHOW GRANTS FOR 'bob'@'localhost';

来自 MySQL 手册:

The SHOW DATABASES privilege enables the account to see database names by issuing the SHOW DATABASE statement. Accounts that do not have this privilege see only databases for which they have some privileges, and cannot use the statement at all if the server was started with the --skip-show-database option. Note that any global privilege is a privilege for the database.

如果启用了 SHOW DATABASES,请撤销该权限。

REVOKE SHOW DATABASES ON *.* FROM 'bob'@'localhost';

最后,使用命令重新加载所有权限:

FLUSH PRIVILEGES;

(或重新启动 MySQL - 如果这是一个选项 - 通常不是)。

P.S:您可能需要将 'localhost' 替换为您的数据库主机名。

部分参考资料:

编辑:

回答您的问题:

1) How does one drop this permission? I assume if I run: REVOKE SELECT, INSERT,... on *.* to 'bob'@'%';

你可以简单地 运行 REVOKE ALL ON *.* TO 'bob'@'%';

2) How does one identify all permissions like this? Do I have to look over every user?

看到这个 blog post. 免责声明:我与这个博客无关。