我有MySQL 5.0.82sp1运行,我注意到,所有的用户可以调用所有数据库的表上select命令。 他们没有这样的特权,所以没有什么可以撤销的。 有一些MySQL设置默认授予这种只读访问?
这似乎总是给出结果
select * from some_database_name.some_table_name
它显示了什么。
即使我通过发出命令来撤消所有权限,它也能正常工作
revoke all privileges, grant option from 'username'@'localhost';
我通过发出命令来检查它
show grants;
表明
GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD '...'
这意味着它没有select权限
由于您更改了全局权限,因此您需要执行以下操作才能生效:
FLUSH PRIVILEGES; 语句来重新加载授权表 阅读更多…
有一些令人不安的事情。
我只能想到两种情况下SELECTs可以像这样运行:
状态#1:/etc/my.cnf中的skip-grant-tables
请检查/etc/my.cnf没有这个:
[mysqld] skip-grant-tables
如果是这样,删除skip-grant-tables行,并立即重新启动mysql。
状态#2:从命令行跳过授予表
可以使用skip-grant-tables选项启动mysql,而不用触摸my.cnf。 在Linux操作系统中,请运行以下命令:
$ service mysql start --skip-grant-tables
在Linux命令行中,查看是否激活skip-grant-tables ,请运行以下命令:
$ mysqld --help --verbose | grep -C 3 "skip-grants"
你会看到这样的线条:
secure-file-priv (No default value) server-id 106451130 show-slave-auth-info FALSE skip-grant-tables FALSE skip-name-resolve TRUE skip-networking FALSE skip-show-database FALSE
如果skip-grant-tables为TRUE,只要重新启动mysql即可。 它应该消失。
试一试 !!!
CAVEAT:如果这是一个MySQL / Windows问题,请检查my.ini
此外,没有全局variables来改变这个function。 这个选项只适用于mysql的启动。
更新2011-09-09 12:56 EDT
login后尝试使用此SQL命令:
SELECT USER(),CURRENT_USER();
这些function报告你authentication的方式
USER()报告你如何尝试在MySQL中进行身份validation
CURRENT_USER()报告你如何被允许在MySQL中进行身份validation
请用这些发现更新您的问题!
从你的授权命令( USAGE ON *。* )看来,你已经授权访问所有的数据库。 通过限制仅访问相应用户的特定数据库来更新特权。 即USAGE ON databasename。*而不是*。*