我要做的是创建一个名为'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' |
+--------------------------------------------------------------------------------------------------------------+
答案 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)