我正在运行 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 '...'
这意味着它没有选择权限
答案1
答案2
这种行为确实有些令人不安。
我只能想到两种 SELECT 可以像这样不受限制地运行的情况:
情况 #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。然后它就会消失。
试一试 !!!
警告:如果这是 MySQL/Windows 问题,请检查 my.ini
此外,没有全局变量可以改变此功能。此选项仅适用于 mysql 的启动。
更新时间:2011-09-09 12:56 EDT
登录后尝试使用此 SQL 命令:
SELECT USER(),CURRENT_USER();
这些功能会报告您的身份验证方式
用户()报告您如何在 MySQL 中进行身份验证
当前用户()报告您被允许在 MySQL 中进行身份验证的方式
请使用这些发现更新您的问题!!!
答案3
根据您的授权命令(在 *.* 上的使用)似乎您已授予对所有数据库的访问权限。通过限制相应用户仅访问特定数据库来更新权限。即 USAGE ON数据库名称。*代替*.*