加强MySQL用户安全

标签: mysql 用户 安全 | 发表时间:2015-09-30 22:30 | 作者:robinson_0612
出处:http://blog.csdn.net
     很多亲们在安装好了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方式来清理用户更稳妥
作者:robinson_0612 发表于2015/9/30 14:30:44 原文链接
阅读:5 评论:0 查看评论

相关 [mysql 用户 安全] 推荐:

加强MySQL用户安全

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

MySQL安全策略

- - OurMySQL
   MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全.    MySQL被运用于越来越多的业务中,在关键业务中对数据安全性的要求也更高,如何保证MySQL的数据安全.    数据安全如果只靠MySQL应用层面显然是不够的,是需要在多个层面来保护的,包括网络、系统、逻辑应用层、数据库层等.

Mysql安全配置介绍

- - OurMySQL
   很多文章中会说,数据库的权限按最小权限为原则,这句话本身没有错,但是却是一句空话. 因为最小权限,这个东西太抽象,很多时候你并弄不清楚具体他需要哪些权限. 现在很多mysql用着root账户在操作,并不是大家不知道用root权限太大不安全,而是很多人并不知道该给予什么样的权限既安全又能保证正常运行.

详解Mysql安全配置

- - FreeBuf.COM
1. 前言 2. Mysql账户权限安全 3. Mysql数据的网络安全配置 4. 密码策略安全 5. Mysql日志 6. Mysql数据库服务所在主机安全配置 7. 部署SQL注入检测、防御模块 8. mysqld安全相关启动选项 9. mysql备份策略. Mysql数据库安全配置、或者叫加固属于风险模型中的一环,它需要安全人员在理论和实践的学习中不断发现新的问题,并针对这些问题对数据的各个方面的配置进行强化.

如何安全地关闭MySQL实例

- - OurMySQL
   本文分析了mysqld进程关闭的过程,以及如何安全、缓和地关闭MySQL实例,对这个过程不甚清楚的同学可以参考下. 1、发起shutdown,发出  SIGTERM信号. 2、有必要的话,新建一个关闭线程(shutdown thread).    如果是客户端发起的关闭,则会新建一个专用的关闭线程.

等保测评2.0:MySQL安全审计

- - FreeBuf互联网安全新媒体平台
本篇文章主要说一说MySQL数据库安全审计控制点的相关内容和理解. MySQL除了自身带有的审计功能外,还存在着一些其它的审计插件. 虽然遇到这些插件的概率不高,我还是把这些插件的基本参数都列出来,到时候如果真遇到了,也不至于一头雾水. a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;.

保障MySQL安全的14个最佳方法

- - ITeye博客
MySQL数据库一贯以高性能、高可性和易用性著称,它已经成为世界上最流行的开源数据库. 大量的个人、WEB开发者、大型公司等都在其网站、关键系统、软件包中广泛使用MySQL数据库. 通常,许多企业在部署一种产品时,安全性常常得不到应有的重视. 企业最关心的是使其可以尽快地运行,企业由此也可以尽快赢利.

Shiro系列之Shiro+Mysql实现用户授权(Authorization)

- - CSDN博客推荐文章
昨天,我在《 Shiro系列之Shiro+Mysql实现用户认证(Authentication)》中简单介绍了使用Shiro+Mysql实现用户认证的功能,今天我们继续使用其中的示例,讲解一下如何实现用户授权. 所谓授权,就是判断当前用户具体哪些权限,能够执行哪些操作,或是访问哪些资源(Web中的URL,又或是页面上的一个按钮,一个编辑框等都可以视为资源).

Shiro系列之Shiro+Mysql实现用户认证(Authentication)

- - CSDN博客推荐文章
网上大多数介绍Apache Shiro的资料都是使用ini文件的简单配置为例,很少用讲到如何配合数据库来实现用户认证的. 我也是刚刚开始接触Shiro,在这里介绍一个入门级别的Shiro+Mysql的配置方法,这个方法仅仅是个开始,并没有和Web,Spring,Mybatis等框架进行整合,后续我还会继续和大家分享我的学习过程及心得.

因安全漏洞,微软建议用户禁用 Windows Gadgets

- - LiveSino - LiveSide 中文版
本周初微软发布了一则 安全公告,告知用户可能会因为“不安全”的 Windows Sidebar 和 Gadgets 恶意代码而受到攻击. Computerworld 称研究员将在本月底的 Black Hat 大会上公开这些安全漏洞. 微软暂时给出的解决方案是:禁用 Windows Sidebar 和 Gadgets 小工具功能.