1

我面临用户访问控制的问题。更清楚地说,我创建的 mysql 用户可以访问其他表,而不是我授予的访问权限。假设我以 root 身份登录到 mysql 并且有很多数据库,并且在数据库“test”中,有很多表,其中一个是“news”。我想创建一个用户,该用户只能访问“test.news”中的“select”值。这是它的样子:

mysql> grant select on test.news to 'new_user2'@'localhost' identified by 'XXXXXXX';
Query OK, 0 rows affected (0.00 sec)

刷新特权:flush privileges;

现在,注销,我以 new_user2 身份登录:

/opt/lampp/bin/./mysql -u new_user2 -p 

并希望在那里查看数据库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.00 sec)

这很好,从某种意义上说,“root”帐户中有其他数据库对 new_user2 不可见。然后,我想查看测试中的表格。所以-

use test;
show tables;

这对我来说是第一次震惊。我看到了“测试”数据库中的所有表,这是我没想到的。我只想看到“新闻”表。或者,所有被授予访问数据库中一个表的权限的用户实际上都可以查看所有表是否正常?

第二个震惊,我用于select *另一个表-“用户”,它本质上是“测试”中的另一个表,我可以看到用户表中的所有内容。

那么,当我创建“new_user2”并仅授予访问 test.news 的权限时,它如何访问 test.user?select * from news工作正常。。

我真的限制了对“test”数据库中所有其他表的访问吗?如果没有,我该怎么做?

好的。好像这还不够,我实际上可以删除由“root”创建的表..

mysql> drop table member;
Query OK, 0 rows affected (0.42 sec)

这些是 'new_user2'@'localhost' 在 root 登录时的授权...

mysql> SHOW GRANTS FOR 'new_user2'@'localhost';
+------------------------------------------------------------------------------------------------------------------+
| Grants for new_user2@localhost                                                                                   |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'new_user2'@'localhost' IDENTIFIED BY PASSWORD '*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' |
| GRANT SELECT ON `test`.`news` TO 'new_user2'@'localhost'                                                         |
+------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

我觉得,我在这里缺少一些基本的东西。请帮帮我。太感谢了。

4

0 回答 0