MySQL之test数据库默认权限(2)

如果你不想让拥有任意权限(哪怕仅仅只读权限)的用户能任意操作test数据库或者以test_开头命名的数据库,可以delete其mysql.db表中test相关的行,如下:


shell> mysql -u root -p

Enter password: (enter root password here)

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';

mysql> FLUSH PRIVILEGES;

#再次使用只读用户操作

#如下,已经无法任意操作test相关数据库

mysql> select user();

+------------------+

| user()          |

+------------------+

| select@localhost |

+------------------+

mysql> show databases;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| yujx              |

+--------------------+

2 rows in set (0.00 sec)

mysql> create database test;

ERROR 1044 (42000): Access denied for user 'select'@'localhost' to database 'test'

mysql> create database test_a;

ERROR 1044 (42000): Access denied for user 'select'@'localhost' to database 'test_a'

至此,可以看到默认情况下,初始化的mysql环境中mysql.db表默认包含的2行test数据库相关的配置,导致任意用户可以随意操作test或者test_开头的数据库,如果你想避免此问题,可以直接drop test数据库。

关于此现象,大家可能需要注意的问题:

1、正式环境千万别使用test数据库或者创建test_开头的数据库来存储业务数据

2、对用户的权限进行测试、验证的时候,千万别去test数据库,这可能误导你

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/50673e08998ee8ad57d1aa359c44c78d.html