经验之谈-MySQL密码问题!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了经验之谈-MySQL密码问题!相关的知识,希望对你有一定的参考价值。

先说说常用的修改mysql用户密码常用的的几种方式:

1、mysqladmin -u root password "newpass"

如果已经配置了密码:

mysqladmin -uroot -prenzhiyuan password ‘123456‘


2、用SET PASSWORD命令

mysql> SET PASSWORD FOR ‘root‘@‘localhost‘ = PASSWORD(‘renzhiyuan‘);

Query OK, 0 rows affected (0.00 sec)


mysql>


3、UPDATE

mysql> UPDATE user SET Password = PASSWORD(‘123456‘) WHERE user = ‘root‘;

Query OK, 4 rows affected (0.00 sec)

Rows matched: 4  Changed: 4  Warnings: 0


mysql>


查看:

mysql> select user,host,password from user;

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

| user   | host          | password                                  |

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

| root   | localhost     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| root   | 127.0.0.1     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

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

5 rows in set (0.00 sec)


mysql>


MySQL在其内部是不存放用户的明文密码的,基本安全算是满足了。MySQL实际上是使用了两次SHA1夹杂一次unhex的方式对用户密码进行了加密,因此一般来说密文是通过不可逆加密算法得到的。这样即使敏感信息泄漏,除了暴力破解是无法快速从密文直接得到明文的。


mysql> select password(‘mypassword‘),concat(‘*‘,sha1(unhex(sha1(‘mypassword‘))));

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

| password(‘mypassword‘)                    | concat(‘*‘,sha1(unhex(sha1(‘mypassword‘)))) |

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

| *FABE5482D5AADF36D028AC443D117BE1180B9725 | *fabe5482d5aadf36d028ac443d117be1180b9725   |

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

1 row in set (0.47 sec)


mysql> 


那么问题来了?不安全因素是什么?

1、MySQL的历史命令记录:

[[email protected] ~]# cat .mysql_history 

SET PASSWORD FOR ‘root‘@‘localhost‘ = PASSWORD(‘renzhiyuan‘);

show databases;

use mysql;

select host,password,user from user;

grant all on *.* to [email protected]‘192.168.1.243‘ identified by ‘renzhiyuan‘;

flush privileges;

show databases;

flush privileges;

[[email protected] ~]#


2、查看binlog可以查到明文密码(5.6后版本进行了修复)


3、可以通过授权表直接越过密码。


4、明文登陆mysql等。


......


既然这样?如何有效的保护mysql的密码呢?


1、选择合适的版本(比如5.6.x)


2、登陆MySQL的时候,要禁止明文,防止别人通过历史命令查看。


3、管理好mysql的历史命令文件(默认在用户的.mysql_history下


4、MySQL用户权限要慎重给,mysql相关核心文件权限要设置好,比如my.cnf,启动文件等


5、日志记录,行为审计


......



总结:所谓的用户名和密码无非是个正门而已,不要以为其很安全。不过相应的安全维护则是必须的!


本文出自 “[email protected]” 博客,转载请与作者联系!

以上是关于经验之谈-MySQL密码问题!的主要内容,如果未能解决你的问题,请参考以下文章

bos项目经验心得

安装TCExam经验

经验分享基础 docker 内配置 mysql 数据库远程环境

经验之谈-MySQL配置文件读取顺序问题!

经验之谈mysql占用CPU利用率过高的问题

开发经验springboot配置文件加密详解