我的服务器上有一些用户可以访问每个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
没有像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'@'%'
1)如何取消此权限?我假设我跑:
REVOKE SELECT, INSERT,... on *.* to 'bob'@'%';
它将删除
等权限GRANT ALL ON bobsdb.* TO 'bob'@'%';
我不想发生这种情况。但也许最好只删除所有权限并从头开始重新构建它们。
2)如何识别这样的所有权限?我是否必须查看每个用户?
答案 0 :(得分:3)
您应该能够使用以下命令查看用户的授权:
SHOW GRANTS FOR 'bob'@'localhost';
来自MySQL手册:
SHOW DATABASES权限允许帐户通过发出SHOW DATABASE语句来查看数据库名称。没有此权限的帐户只能看到具有某些权限的数据库,如果服务器是使用--skip-show-database选项启动的,则根本不能使用该语句。请注意,任何全局特权都是数据库的特权。
如果启用了SHOW DATABASES,则撤消该权限。
REVOKE SHOW DATABASES ON *.* FROM 'bob'@'localhost';
最后,使用以下命令重新加载所有权限:
FLUSH PRIVILEGES;
(或重启MySQL - 如果这是一个选项 - 通常不是)。
P.S:您可能需要将“localhost”替换为db主机名。
一些参考文献:
修改强>
回答你的问题:
1)如何取消此权限?我假设我跑:
REVOKE SELECT, INSERT,... on *.* to 'bob'@'%';
您只需运行REVOKE ALL ON *.* TO 'bob'@'%';
2)如何识别这样的所有权限?我是否必须查看每个用户?
请参阅此blog post. 免责声明:我与此博客无关。