【问题标题】:New user has all privileges in MySQL 5.6新用户拥有 MySQL 5.6 中的所有权限
【发布时间】:2013-09-15 17:05:49
【问题描述】:

我在 mySQL 5.6 中创建新用户时遇到问题

我想要的: 当我创建新用户时,它没有任何权限,我只想在几个特定列中授予一些选择和更新。所以他应该能够更新所有数据库中的任何内容。听起来很公平。

所以,首先,我创建一个新用户:

CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';

在此之后,我使用我的新用户登录,当我执行show grants; 命令时,我有这个:

GRANT USAGE ON *.* TO 'newuser'@'%' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19'

所以在我看来,他不能在我的数据库中做任何事情,因为他没有任何GRANT SELECT 权限。

但是当我在我的测试表中进行选择时,他可以查看所有列和所有结果。他可以更新......并做他想做的一切。就好像他有一个GRANT SELECT,UPDATE,DELETE ... ON *.* TO 'newuser'@'%',但我不能撤销它,因为他没有那个。

当然,我试过撤销所有特权,但我不能,因为他没有任何特权。

我希望我很清楚。所以我很困惑,有什么想法吗?

谢谢!

克莱门特

【问题讨论】:

    标签: mysql database privileges grant


    【解决方案1】:

    在许多默认安装中,所有用户都对名为 test 或以 test_ 开头的任何数据库中的表拥有所有权限。

    来自http://dev.mysql.com/doc/refman/5.6/en/default-privileges.html#idp5999952

    默认情况下,mysql.db 表包含允许任何用户访问 test 数据库和其他名称以 test_ 开头的数据库的行。 ...如果要删除任何用户对测试数据库的访问权限,请执行以下操作:

    mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
    mysql> FLUSH PRIVILEGES;
    

    或者,确保您的测试表不在具有此类名称的数据库中,然后您将看到真实的行为。

    【讨论】:

    • 哦,f*ck...谢谢你的时间,谢谢你的回答!
    • 欢迎来到 Stack Overflow!不要忘记标记正确的答案,一旦你有足够的声誉,就可以为你认为好的问题和答案投票!
    猜你喜欢
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多