先说说常用的修改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的历史命令记录: [root@mysql ~]# cat .mysql_history SET PASSWORD FOR 'root'@'localhost' = PASSWORD('renzhiyuan'); show databases; use mysql; select host,password,user from user; grant all on *.* to root@'192.168.1.243' identified by 'renzhiyuan'; flush privileges; show databases; flush privileges; [root@mysql ~]# 2、查看binlog可以查到明文密码(5.6后版本进行了修复) 3、可以通过授权表直接越过密码。 4、明文登陆mysql等。 ......
既然这样?如何有效的保护mysql的密码呢?
1、选择合适的版本(比如5.6.x) 2、登陆MySQL的时候,要禁止明文,防止别人通过历史命令查看。 3、管理好mysql的历史命令文件(默认在用户的.mysql_history下) 4、MySQL用户权限要慎重给,mysql相关核心文件权限要设置好,比如my.cnf,启动文件等 5、日志记录,行为审计 ......
总结:所谓的用户名和密码无非是个正门而已,不要以为其很安全。不过相应的安全维护则是必须的!