2013-07-27 33 views
0

我是相当新的MySQL和我一直在创建测试表等用户没有权限,仍然可以选择

无论如何,我创建了一个新的用户,使用

CREATE USER 'myUser'@'localhost' IDENTIFIED BY 'myPassword';

现在,当我登录到这个用户时,我可以从我之前用root创建的表中输入SELECT。当然,这不应该是可能的?用户没有SELECT权限,或者甚至没有任何权限。如果(以root身份登录)...我不是:

SHOW GRANTS FOR 'myUser'@'localhost';

或者

SELECT * FROM information_schema.user_privileges WHERE grantee LIKE "'myUser'@%";

我可以看到他们只拥有使用许可。我的理解是,此权限设置为表示用户没有权限。

那么这个用户如何能够从我的表中选择?

如果我做的:

SELECT * FROM information_schema.table_privileges;

没有返回结果。

我在这里错过了什么?是否隐含地向新用户授予SELECT等特定内容?我是否必须明确撤销这个?

如果是这样,还隐式授予了哪些其他权限?

理想情况下,我的目标是一个用户,除了运行我指定的一个(或多个)存储过程以外,什么都不能做,只能用GRANT EXECUTE ON指定。

+0

有可能你不知道你连接的是哪个用户/主机;用'SELECT CURRENT_USER();'检查。 – fenway

+0

我得到'myUser @ localhost',这是我所期望的。但是,如果事情按照我的想法行事,我不应该被拒绝这么做吗?阻止所有的'SELECT'查询,包括那个和表? – Interminable

+0

这不是“真正的”SELECT(即不访问表) - (伪)granate USAGE允许您登录到数据库服务器,但没有其他许多。 – fenway

回答

0

甚至从来都没有发生,我认为你会在测试模式来创建生产表 - 但事实证明,这是在MySQL refman记录(强调):

此外,mysql.db表包含允许所有帐户 访问test数据库和其他数据库的行,其名称的起始 和test_。即使对于没有 特殊权限的账户(例如默认匿名账户)也是如此。这是 便于测试,但不适用于生产服务器。谁想要仅限于具有用于此目的应该 删除这些mysql.db表行明确授予权限的帐户 数据库访问 管理员。

这样解释你的发现,“无论哪种方式,即使将其删除,然后重新创建它,如果它的名称为‘测试’,它总是会以匿名用户,等访问”

0

在测试过程中,我创建了一个名为'test'的模式。对我而言,'test'实际上是MySQL的一种保留数据库模式名称。匿名用户可以使用它等。

因此,为了测试目的我在那里创建的东西没有一定的权限限制,其他数据库会做。

我真的不能找到超出此页面上这方面的消息: http://www.greensql.com/content/mysql-security-best-practices-hardening-mysql-tips

该网页说,它与它,但我敢肯定我安装没有默认拥有它。

无论哪种方式,即使将其删除,然后重新创建它,如果它的名称为“测试”,它总是会以匿名用户访问等

我希望这可以帮助别人,我花了太长时间困惑这个!

相关问题