加强MySQL用户安全

     很多亲们在安装好了MySQL数据库之后,对于mysql用户表并没有做任何特殊的处理,因此缺省情况下,存在密码为空的用户,也有很多用户名和密码都为空的情形,我们称之为双空用户。这种情形下的登录,在此统称为异常登陆。对于生产环境的数据库来说,这会带来一些不确定的安全隐患。下面是关于这个问题的描述以及清理掉无关用户的方法。
    有关mysql用户相关参考:
MySQL 用户与权限管理
MySQL 修改用户密码及重置root密码

1、演示异常登录

a、演示双空用户登陆
[root@xlkoracel ~]# mysql -uroot -p
Enter password:
(root@localhost) [(none)]> show variables like 'version';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| version       | 5.6.26 |
+---------------+--------+

(root@localhost) [(none)]> select user,host,password from mysql.user;
+-------+-------------+-------------------------------------------+
| user  | host        | password                                  |
+-------+-------------+-------------------------------------------+
| root  | localhost   | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
| root  | xlkoracel   |                                           |
| root  | 127.0.0.1   |                                           |
| root  | ::1         |                                           |
|       | localhost   |                                           |
|       | xlkoracel   |                                           |
| mycat | localhost   | *975B2CD4FF9AE554FE8AD33168FBFC326D2021DD |
| mycat | 192.168.1.% | *975B2CD4FF9AE554FE8AD33168FBFC326D2021DD |
| mycat | 192.168.%.% | *975B2CD4FF9AE554FE8AD33168FBFC326D2021DD |
| root  | 192.168.%.% | *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |
+-------+-------------+-------------------------------------------+

(root@localhost) [(none)]> -- 可以看到存在用户名和密码同时为空的情形
(root@localhost) [(none)]> -- 退出后尝试使用任意用户名登录
(root@localhost) [(none)]> exit
Bye
[root@xlkoracel ~]# mysql -uxx ###无需指定密码参数-p
(xx@localhost) [(none)]> -- 可以成功登陆
(xx@localhost) [(none)]> -- 下面查看一下自身的权限
(xx@localhost) [(none)]> show grants;  --当前只有usage权限
+--------------------------------------+
| Grants for @localhost                |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+

(xx@localhost) [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+

(xx@localhost) [(none)]> use test;
Database changed
(xx@localhost) [test]> show tables;
Empty set (0.00 sec)

(xx@localhost) [test]> create table t(id int);
Query OK, 0 rows affected (0.14 sec)

(xx@localhost) [test]> insert into t values(1);
Query OK, 1 row affected (0.01 sec)

(xx@localhost) [test]> select * from t;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

(xx@localhost) [test]> --从上可以看出,usage权限已经可以完成很多任务
(xx@localhost) [test]> use infromation_schema;
ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'infromation_schema'
(xx@localhost) [test]> exit;

b、演示密码为空的用户登陆
[root@xlkoracel ~]# mysql -uroot -hxlkoracel  ###注,此时也无需指定参数-p
(root@xlkoracel) [(none)]> --可以成功登陆
(root@xlkoracel) [(none)]> show grants;   --查看自身权限,为ALL PRIVILEGES,权限更大
+---------------------------------------------------------------------+
| Grants for root@xlkoracel                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'xlkoracel' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'xlkoracel' WITH GRANT OPTION        |
+---------------------------------------------------------------------+

2、清理异常用户

[root@xlkoracel ~]# mysql -uroot -p
Enter password:
(root@localhost) [(none)]> select user,host,password from mysql.user
    -> where (user is null or user='') and (password is null or password='');
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
|      | localhost |          |
|      | xlkoracel |          |
+------+-----------+----------+
2 rows in set (0.01 sec)

(root@xlkoracel) [(none)]> -- Author : Leshami
(root@xlkoracel) [(none)]> -- Blog   : http://blog.csdn.net/leshami
(root@localhost) [(none)]> -- 使用drop 方式清理用户
(root@localhost) [(none)]> drop user ''@'localhost';
Query OK, 0 rows affected (0.24 sec)

(root@localhost) [(none)]> select user,host,password from mysql.user
    -> where (user is null or user='') and (password is null or password='');
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
|      | xlkoracel |          |
+------+-----------+----------+
1 row in set (0.00 sec)

(root@localhost) [(none)]> -- 直接用delete从mysql.user表清理用户
(root@localhost) [(none)]> delete from mysql.user
    -> where (user is null or user='') and (password is null or password='');
Query OK, 1 row affected (0.06 sec)

(root@localhost) [(none)]> -- 直接用delete从mysql.user表清理所有密码为空的用户
(root@xlkoracel) [(none)]> delete from mysql.user where password is null or password='';
Query OK, 3 rows affected (0.00 sec)

3、小结
a、对于部署到生产环境的mysql服务器建议清理所有密码为空的用户以及双空用户
b、建议清理前先备份,使用drop user方式来清理用户更稳妥

时间: 2024-09-19 08:58:35

加强MySQL用户安全的相关文章

nginx、php-fpm、mysql用户权限解析

前几天学习了,在nginx下搭建wordpress博客.在<烂泥:使用nginx利用虚拟主机搭建WordPress博客>文章中,我们特别提到了有关程序运行在哪个用户下面. 这篇文章我们就特别来讲解下,nginx.php-fpm以及mysql运行在各个用户下的配置. 先来做个说明:nginx本身不能处理PHP,它只是个web服务器.当接收到客户端请求后,如果是php请求,则转发给php解释器处理,并把结果返回给客户端.如果是静态页面的话,nginx自身处理,然后把结果返回给客户端. Nginx下

甲骨文向MySQL用户开发者客户做出十项承诺

最近时期甲骨文与SUN公司的合并是许多开发者十分关注的问题,主要因为MYSQL这一数据库的易主可能会引起新的变化,本周甲骨文向MySQL用户.开发者.客户做出十项承诺. 甲骨文公司与欧盟委员会就甲骨文SUN公司的交易案进行了建设性的讨论,并承诺将保持MySQL在数据库市场的竞争力.为了进一步获得欧盟的批准,甲骨文公司公开其十项承诺,内容如下: 1.保证存储引擎API持续可用性.甲骨文保证并阶段性加强MySQL的可插拔存储引擎架构,让用户可以灵活选择从本地和第三方产品提供存储引擎.此保证意味着My

MySQL管理员指南之--MySQL用户管理

MySQL管理员应该知道如何设置MySQL用户账号,指出哪个用户可以连接服务器,从哪里连接,连接后能做什么.MySQL 3.22.11开始引入两条语句使得这项工作更容易做:GRANT语句创建MySQL用户并指定其权限,而REVOKE语句删除权限.两条语句扮演了MySQL数据库的前端角色,并提供与直接操作这些表的内容不同的另一种方法.CREATE和REVOKE语句影响4个表: 还有第5个授权表(host),但它不受GRANT和REVOKE的影响. 当你对一个用户发出一条GRANT语句时,在user

MySQL用户管理(1)

MySQL管理员应该知道如何设置MySQL用户账号,指出哪个用户可以连接服务器,从哪里连接,连接后能做什么.MySQL 3.22.11开始引入两条语句使得这项工作更容易做:GRANT语句创建MySQL用户并指定其权限,而REVOKE语句删除权限.两条语句扮演了mysql数据库的前端角色,并提供与直接操作这些表的内容不同的另一种方法.CREATE和REVOKE语句影响4个表:授权表 内容 user 能连接服务器的用户以及他们拥有的任何全局权限 db 数据库级权限 tables_priv 表级权限

MySQL用户管理(转)

mysql|用户管理 MySQL用户管理[晏子]  http://clyan.hongnet.com/index.html MySQL管理员应该知道如何设置MySQL用户账号,指出哪个用户可以连接服务器,从哪里连接,连接后能做什么.MySQL 3.22.11开始引入两条语句使得这项工作更容易做:GRANT语句创建MySQL用户并指定其权限,而REVOKE语句删除权限.两条语句扮演了mysql数据库的前端角色,并提供与直接操作这些表的内容不同的另一种方法.CREATE和REVOKE语句影响4个表:

MySQL用户管理

mysql|用户管理 MySQL管理员应该知道如何设置MySQL用户账号,指出哪个用户可以连接服务器,从哪里连接,连接后能做什么.MySQL 3.22.11开始引入两条语句使得这项工作更容易做:GRANT语句创建MySQL用户并指定其权限,而REVOKE语句删除权限.两条语句扮演了mysql数据库的前端角色,并提供与直接操作这些表的内容不同的另一种方法.CREATE和REVOKE语句影响4个表:授权表 内容 user 能连接服务器的用户以及他们拥有的任何全局权限 db 数据库级权限 tables

MySQL 4.1.0 中文参考手册 --- 6.6 基本的 MySQL 用户实用命令

mysql|参考|参考手册|中文 MySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译 MySQL Reference Manual for version 4.1.0-alpha. 6.6 基本的 MySQL 用户实用命令6.6.1 USE 句法 USE db_name USE db_name 语句告诉 MySQL 使用 db_name 数据库作为以后查询的缺省数据库.数据库保持为当前数据库,只到该会话结束或另一个 USE 语句发出: mysql> USE db1;mysql> S

MYSQL用户帐号管理

mysql|帐号管理     MySQL管理员应该知道怎样通过指定哪些用户可连接到服务器.从哪里进行连接,以及在连接时做什么,来设置MySQL用户账号.MySQL3.22.11引入了两个更容易进行这项工作的语句:GRANT 语句创建MySQL用户并指定其权限,REVOKE 语句删除权限.这两个语句充当mysql数据库中的授权表的前端,并提供直接操纵这些表内容的可选择的方法.GRANT 和REVOKE 语句影响以下四个表: 授权表 内容 user 可连接到服务器的用户和他们拥有的任何全局特权 db

mysql dba系统学习(15)mysql用户管理之二

mysql用户管理 一,创建和删除用户 mysql> select current_user();  查询当前的登录用户 +----------------+ | current_user() | +----------------+ | root@localhost | +----------------+  创建用户的时候没有分配任何权限,%表示的是任何机器,但是不包括localhost和127.0.0.1 mysql> create user 'chenzhongyang'@'%' id

MySQL用户创建和授权

环境 MySQL 5.1 + 命令行工具 问题 MySQL用户创建和授权 解决 1.以 root用户登录创建新用户 C:\Users\Wentasy>mysql -uroot -p mysql> CREATE USER music IDENTIFIED BY 'music'; 2.以root用户登录创建数据库 create database music default charset utf8; create table tb_user ( tb_user_id int(11) primary