MySQL查看所有数据库的权限

Sal*_*Sal 5 mysql privileges

我的服务器上有一些用户可以访问每个 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
Run Code Online (Sandbox Code Playgroud)

GRANT没有什么像或ALL那样跳出来SUPER。我创建一个新的数据库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'@'%'
Run Code Online (Sandbox Code Playgroud)

1)如何放弃这一权限?我假设如果我运行:

REVOKE SELECT, INSERT,... on *.* to 'bob'@'%';
Run Code Online (Sandbox Code Playgroud)

它将删除权限,例如

GRANT ALL ON bobsdb.* TO 'bob'@'%';
Run Code Online (Sandbox Code Playgroud)

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

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

Rad*_*u T 5

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

SHOW GRANTS FOR 'bob'@'localhost';
Run Code Online (Sandbox Code Playgroud)

来自 MySQL 手册:

SHOW DATABASES 权限使帐户能够通过发出 SHOW DATABASE 语句来查看数据库名称。没有此权限的帐户只能看到他们拥有某些权限的数据库,并且如果服务器是使用 --skip-show-database 选项启动的,则根本无法使用该语句。请注意,任何全局权限都是数据库的权限。

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

REVOKE SHOW DATABASES ON *.* FROM 'bob'@'localhost';
Run Code Online (Sandbox Code Playgroud)

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

FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

(或者重新启动 MySQL - 如果可以选择 - 通常不是)。

PS:您可能需要将“localhost”替换为您的数据库主机名。

一些参考:

编辑:

回答您的问题:

1)如何放弃这一权限?我假设如果我运行:REVOKE SELECT, INSERT,... on *.* to 'bob'@'%';

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

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

请参阅这篇博文。 免责声明:我与此博客无关。