首页 > 数据库 > MySQL > 存隐患的MySQL缺省特殊权限表 下一步
1,超级数据库管理员:
2,特定库的管理员:如
3,有权限创建库、表的开发主管
4,普通用户
5,用于复制的用户
咋看这样已经比较安全了,而且考虑的非常全面到位。
下面我们做个测试,我们就可以看到一个让你吃惊的现象,下面是一次操作过程的记录,请仔细阅读,从中发现的问题,
[root@localhost var]# /opt/mysql5/bin/mysql -unigel889
-h172.16.0.230 -p
nigel889@172.16.0.230:
(none) 04:22:10>show grants;
+------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'nigel889'@'172.16.%' IDENTIFIED
BY PASSWORD '*00A51F3F48415C7D4E890898
+-----------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
nigel889@172.16.0.230: (none)
04:22:17>show databases;
+--------------------+
|
Database
+--------------------+
| information_schema |
|
test
+--------------------+
2 rows in set (0.00 sec)
上面看上去一切正常,在预料之中,请继续往下阅读
nigel889@172.16.0.230: (none) 04:22:31>
nigel889@172.16.0.230: (none)
04:22:31>create database
nigel_889;
ERROR 1044 (42000): Access denied for
user 'nigel889'@'172.16.%' to
database 'nigel_889'
nigel889@172.16.0.230:
(none) 04:23:41>create database
test_889;
Query OK, 1 row affected (0.04 sec)
nigel889@172.16.0.230: (none)
04:23:50>show databases;
+--------------------+
|
Database
+--------------------+
| information_schema |
|
test
|
test_889
+--------------------+
3 rows in set (0.00 sec)
上面是不是感觉就有点和我们想象的不太一样了,有点怪异,继续往下
nigel889@172.16.0.230: (none) 04:23:56>
nigel889@172.16.0.230: (none)
04:23:56>create database test_abcd1234;
Query OK, 1 row affected (0.00 sec)
nigel889@172.16.0.230: (none)
04:25:28>show databases;
+--------------------+
|
Database
+--------------------+
| information_schema |
|
test
|
test_889
|
test_abcd1234
+--------------------+
4 rows in set (0.00 sec)
nigel889@172.16.0.230: (none)
04:25:30>
nigel889@172.16.0.230:
(none) 04:25:30>create database
testdb_abcd1234;
ERROR 1044 (42000): Access denied for user 'nigel889'@'172.16.%' to
database 'testdb_abcd1234'
nigel889@172.16.0.230:
(none) 04:26:12>
nigel889@172.16.0.230:
(none) 04:26:12>use test_889
Database changed
nigel889@172.16.0.230:
test_889 04:26:34>create table a(id int auto_increment not null
primary key,
> name nchar(20)) engine=innodb;
Query OK, 0 rows affected (1.20 sec)
nigel889@172.16.0.230: test_889
04:27:40>
nigel889@172.16.0.230:
test_889 04:27:40>show create table aG
*************************** 1. row
***************************
Create Table: CREATE TABLE `a` (
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.04 sec)
nigel889@172.16.0.230: test_889
04:28:48>insert into a select '1','leo';
Query OK, 1 row affected (0.07 sec)
Records: 1
nigel889@172.16.0.230: test_889
04:29:38>select * from a;
+----+------+
| id | name |
+----+------+
|
+----+------+
1 row in set (0.00 sec)
不但可以创建数据,还可以建表,插入想要的数据
nigel889@172.16.0.230: test_889
04:30:23>show grants;
+---------------------------------------------------------------------------------------------
| GRANT USAGE ON *.* TO 'nigel889'@'172.16.%' IDENTIFIED
BY PASSWORD '*00A51F3F48415C7D4E890898
+-----------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
nigel889@172.16.0.230: test_889 04:30:26>
权限名称:
--具体含义
ALL [PRIVILEGES]
授予除了‘GRANT OPTION’的所有权限
ALTER
可以使用 ‘ALTER TABLE’语句
ALTER ROUTINE
允许存储过程和存储程序被修改或者是删除
CREATE
允许创建数据库及表
CREATE ROUTINE
允许创建存储过程及存储函数
CREATE TEMPORARY TABLES
允许使用‘ CREATE TEMPORARY TABLE’即创建临时表
CREATE USER
允许使用 ‘CREATE USER, DROP USER, RENAME USER’及‘ REVOKE ALL
PRIVILEGES’即能够创建、删除、重命名用户及收回用户权限
CREATE VIEW
允许创建和修改视图
DELETE
允许使用‘ DELETE’删除数据
DROP
允许删除数据库,表及视图
EVENT
允许为事件调度器开启事件
EXECUTE
允许执行存储过程及存储函数
FILE
允许操作服务器文件,即创建及读取操作系统文件
GRANT OPTION
允许把自己拥有的权限授予其他用户
INDEX
允许创建和删除索引
INSERT
允许使用‘ INSERT’插入数据
LOCK TABLES
在拥有 ‘SELECT’权限的前提下,允许使用‘ LOCK TABLES’获取表锁
PROCESS
允许使用‘SHOW PROCESSLIST’查看所有进程情况
REFERENCES
此权限在5.1中还未实现
RELOAD
允许使用‘ FLUSH’ 选项刷新日志,缓存等
REPLICATION CLIENT
允许查看主从服务器的位置
REPLICATION SLAVE
允许从服务器到主服务器上读取binlog,即允许复制
SELECT
允许使用‘ SELECT’读取数据
SHOW DATABASES
使用‘ SHOW DATABASES’ 查看数据库
SHOW VIEW
允许使用‘SHOW CREATE VIEW’查看创建视图信息
SHUTDOWN
允许使用‘mysqladmin shutdown’关闭数据库
SUPER
其他的管理操作权限,比如 CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL,
及 mysqladmin debug 命令
TRIGGER
允许操作触发器
UPDATE
允许使用‘ UPDATE’更新数据
USAGE
这是创建用户后第一个拥有的权限,没有任何权限
到这里,我们看到了现象,但是为什么呢?其实我们可以从下面这里找到答案,我们注意到:
root@localhost: (none)
04:31:29>SELECT * FROM mysql.dbG
*************************** 1. row
***************************
Create_tmp_table_priv: Y
*************************** 2. row
***************************