加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL的test数据库默认权限

发布时间:2022-03-26 05:17:19 所属栏目:MySql教程 来源:互联网
导读:默认情况下,mysql.db表中包含的行表示任意用户可以访问test数据库和test_开头的数据库。这些行的User字段的值为空,表示匹配任意用户。这意味着这些数据库(test数据库和test_开头的数据库)默认可以被任意用户使用(即使没有权限的用户)。 mysql select
       默认情况下,mysql.db表中包含的行表示任意用户可以访问test数据库和test_开头的数据库。这些行的User字段的值为空,表示匹配任意用户。这意味着这些数据库(test数据库和test_开头的数据库)默认可以被任意用户使用(即使没有权限的用户)。
  
      mysql> select * from mysql.dbG
  
     Host: %
 
     Db: test
 
    User:
 
     Select_priv: Y
 
    Insert_priv: Y
 
    Update_priv: Y
 
     Delete_priv: Y
 
    Create_priv: Y
 
Drop_priv: Y
 
Grant_priv: N
 
References_priv: Y
 
Index_priv: Y
 
Alter_priv: Y
 
Create_tmp_table_priv: Y
 
Lock_tables_priv: Y
 
Create_view_priv: Y
 
Show_view_priv: Y
 
Create_routine_priv: Y
 
Alter_routine_priv: N
 
Execute_priv: N
 
Event_priv: Y
 
Trigger_priv: Y
 
*************************** 2. row ***************************
 
Host: %
 
Db: test_%
 
User:
 
Select_priv: Y
 
Insert_priv: Y
 
Update_priv: Y
 
Delete_priv: Y
 
Create_priv: Y
 
Drop_priv: Y
 
Grant_priv: N
 
References_priv: Y
 
Index_priv: Y
 
Alter_priv: Y
 
Create_tmp_table_priv: Y
 
Lock_tables_priv: Y
 
Create_view_priv: Y
 
Show_view_priv: Y
 
Create_routine_priv: Y
 
Alter_routine_priv: N
 
Execute_priv: N
 
Event_priv: Y
 
Trigger_priv: Y
 
2 rows in set (0.00 sec)
 
可以看到,任意用户对test数据库和test_开头的数据库都拥有很大的权限(上述为Y的权限)
  
mysql> flush privileges;  
 
Query OK, 0 rows affected (0.00 sec)
  
mysql> show grants for 'select'@'localhost';
 
+---------------------------------------------------------------------------------------------------------
 
| Grants for select@localhost                                                                                   |
 
+---------------------------------------------------------------------------------------------------------
 
| GRANT USAGE ON *.* TO 'select'@'localhost' IDENTIFIED BY PASSWORD '*852200EDF18814F8BFC1F1DC816AAC4152D8262E'
 
| GRANT SELECT ON `yujx`.`t` TO 'select'@'localhost'                                                            |
 
+-------------------------------------------------------------------------------------------------
 
2 rows in set (0.00 sec)
  
mysql> show databases;                       
 
+--------------------+
 
| Database           |
 
+--------------------+
 
| information_schema |
 
| test_a             |
 
| yujx               |
 
+--------------------+
 
3 rows in set (0.00 sec)
 
#同样适用于test_开头的库
mysql> use test_a
 
Database changed
 
mysql> create table a ( x int);
 
Query OK, 0 rows affected (0.01 sec)
 
mysql> drop database test_a;
 
Query OK, 0 rows affected (0.00 sec)
 
#delete from mysql.db where db like 'test%'
如果你不想让拥有任意权限(哪怕仅仅只读权限)的用户能任意操作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;
 
mysql> show databases;
 
+--------------------+
 
| Database           |
 
+--------------------+
 
| information_schema |
 
| yujx               |
 
+--------------------+
 
2 rows in set (0.00 sec)
 
至此,可以看到默认情况下,初始化的mysql环境中mysql.db表默认包含的2行test数据库相关的配置,导致任意用户可以随意操作test或者test_开头的数据库,如果你想避免此问题,可以直接drop test数据库。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读