【发布时间】:2013-07-27 15:34:26
【问题描述】:
我对 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'@%";
我可以看到他们只有 USAGE 权限。我的理解是设置此权限以指示用户没有权限。
那么这个用户是如何从我的表中进行 SELECT 的呢?
如果我这样做:
SELECT * FROM information_schema.table_privileges;
不返回任何结果。
我在这里缺少什么?像SELECT 这样的某些东西是否隐式授予新用户?我必须明确撤销吗?
如果是这样,还有哪些其他权限被隐式授予?
理想情况下,我的目标是让用户除了运行我用GRANT EXECUTE ON 指定的一个(或多个)存储过程之外什么都不做。
【问题讨论】:
-
您可能不确切知道您连接的是哪个用户/主机;检查
SELECT CURRENT_USER();。 -
我得到 'myUser@localhost' 这是我所期望的。但是,如果事情按我想象的那样工作,我不应该被拒绝这样做吗?阻止所有
SELECT查询,包括那个查询和表? -
这不是“真正的”SELECT(即不访问表)——(伪)授权 USAGE 允许您登录数据库服务器,但仅此而已。
-
好吧,我仍然可以对那个用户进行
SELECT * FROM MyTable;。
标签: mysql select permissions grant