向新用户授予只读权限时出现意外结果

时间:2017-04-28 06:17:15

标签: sql mariadb privileges

我要做的是创建一个名为'test'的新用户,只允许该用户读取数据,即只对数据库执行SELECT查询。我通过'root'用户执行了以下SQL语句:

CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
CREATE USER 'test'@'127.0.0.1' IDENTIFIED BY 'test';
CREATE USER 'test'@'::1' IDENTIFIED BY 'test';
GRANT SELECT ON *.* TO 'test'@'localhost';
GRANT SELECT ON *.* TO 'test'@'127.0.0.1';
GRANT SELECT ON *.* TO 'test'@'::1';
FLUSH PRIVILEGES;

但是当我通过新创建的用户'test'访问数据库时,用户可以执行的不仅仅是SELECT记录。有人可以告诉并解释我有什么问题吗?我相信这是创建新用户并为其授予权限的正确方法。

提前致谢。

PS请注意我正在使用MariaDB。

PPS SHOW GRANTS;的输出(通过用户'test'唤起)

+--------------------------------------------------------------------------------------------------------------+
| Grants for test@localhost                                                                                    |
+--------------------------------------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'test'@'localhost' IDENTIFIED BY PASSWORD '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' |
+--------------------------------------------------------------------------------------------------------------+

1 个答案:

答案 0 :(得分:0)

可能的原因是您正在对名为test的数据库(架构)执行实验。此名称在MariaDB / MySQL中是特殊的,无论配置的授权如何,用户都可以完全访问它,这就是为什么在生产环境中使用此模式被认为是不安全的。

MariaDB [(none)]> show grants;
+-------------------------------------------+
| Grants for test@localhost                 |
+-------------------------------------------+
| GRANT SELECT ON *.* TO 'test'@'localhost' |
+-------------------------------------------+
1 row in set (0.00 sec)

MariaDB [(none)]> use db;
Database changed

MariaDB [db]> create table t (i int);
ERROR 1142 (42000): CREATE command denied to user 'test'@'localhost' for table 't'

MariaDB [db]> use test;
Database changed

MariaDB [test]> create table t (i int);
Query OK, 0 rows affected (0.35 sec)