Mysql:如何防止用户对所有数据库的表具有只读权限?

Mysql:如何防止用户对所有数据库的表具有只读权限?

我正在运行 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

因为你改变了全球的权限,因此您需要执行以下操作才能使其生效:

  1. 发出一条FLUSH PRIVILEGES;语句来重新加载授权表
  2. 断开当前客户端并重新连接

阅读更多...

答案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数据库名称。*代替*.*

相关内容