1. MySQL 数据库用户安全策略介绍
安装 MySQL 数据库后,默认的管理员 root 密码为空,很不安全,需要设置密码。针对 MySQL数据库的用户处理,还有更严格的做法:
① 增加 system 并提升权限为超级管理员,即和 root 等价的用户,只是名字不同。
mysql> grant all privileges on *.* to [email protected]‘localhost‘ identified by ‘alinuxer123‘ with grant option;
Query OK, 0 rows affeccted (0.00 sec)
② 删除所有 MySQL 中的用户,包括 root 管理员。
mysql> delete from mysql.user;
Query OK, 2 rows affeccted (0.00 sec)
提示:可以保留 root 用户,也可以把超级管理员 root 用户修改为其他用户名。
2. 为超级管理员 ROOT 用户设置密码
2.1 单实例设置管理员用户的密码
[[email protected] ~]# mysqladmin -uroot password ‘alinuxer‘
2.2 多实例指定 sock 文件设置管理员的密码
[[email protected] ~]# mysqladmin -uroot password ‘alinuxer‘ -S /data/3306/mysql.sock
3. 修改管理员用户 root 密码的多种方法
3.1 方法一:通过 mysqladmin 命令修改
[[email protected] ~]# mysqladmin -uroot -p ‘oldboy123‘ password ‘alinuxer‘ # 单实例。
[[email protected] ~]# mysqladmin -uroot -p ‘oldboy123‘ password ‘alinuxer‘ -S /data/3306/mysql.sock # 多实例。
3.2 方法二:进入数据库通过 SQL 语句 修改密码
mysql> select user,host,password from mysql.user;
+-----------+---------------+-------------------------------------------+
| user | host | password |
+-----------+---------------+-------------------------------------------+
| root | localhost | *FD571203974BA9AFE270FE62151AE967ECA5E0AA | # 加密。
| root | 127.0.0.1 | |
| wordpress | 192.168.136.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| bbs | 192.168.136.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+---------------+-------------------------------------------+
4 rows in set (0.00 sec)
mysql> update mysql.user set password=password("123456") where user=‘root‘ and host=‘localhost‘;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
提示:此方法必须指定 where 条件,必须使用 password() 函数加密。
查看修改的密码(加密):
mysql> select user,host,password from mysql.user;
+-----------+---------------+-------------------------------------------+
| user | host | password |
+-----------+---------------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | |
| wordpress | 192.168.136.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| bbs | 192.168.136.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+---------------+-------------------------------------------+
4 rows in set (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
[[email protected] ~]# mysql -uroot -p123456
mysql> # 修改密码后登录成功。
3.3 方法三:管理员身份登陆修改当前登录用户的密码
mysql> set password=password(‘111111‘); # 修改当前登录用户的密码。
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> Bye
[[email protected] ~]# mysql -uroot -p111111
mysql> # 修改密码后登录成功。
4. 找回丢失的 MySQL 数据库 ROOT 密码
4.1 停止 MySQL 数据库
[[email protected] ~]# /etc/init.d/mysqld stop
Shutting down MySQL. SUCCESS!
4.2 使用 --skip-grant-tables 忽略授权表的方式登陆验证
[[email protected] ~]# mysqld_safe --skip-grant-tables --user=mysql &
[1] 6678
[[email protected] ~]# 180408 16:58:44 mysqld_safe Logging to ‘/application/mysql/data/mysql-server.err‘.
180408 16:58:44 mysqld_safe Starting mysqld daemon with databases from /application/mysql/data
[[email protected] ~]# mysql # 空密码登录。
4.3 通过 update 指定 password 函数和用户修改加密密码
mysql>update mysql.user set password=password("111111") where user=‘root‘ and host=‘localhost‘;
ser=‘root‘ and host=‘localhost‘;
Query OK, 1 row affected (0.07 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges; # 刷新权限。
Query OK, 0 rows affected (0.07 sec)
mysql> Bye # 退出数据库。
[[email protected] ~]# ps -ef|grep mysql # 查看数据库进程。
root 1184 1 0 14:27 ? 00:00:00 /sbin/dhclient -H mysql-server -1 -q -lf /var/lib/dhclient/dhclient-eth0.leases -pf /var/run/dhclient-eth0.pid eth0
root 6678 6134 0 16:58 pts/0 00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --skip-grant-tables --user=mysql
mysql 6921 6678 0 16:58 pts/0 00:00:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --skip-grant-tables --log-error=/application/mysql/data/mysql-server.err --pid-file=/application/mysql/data/mysql-server.pid --socket=/tmp/mysql.sock --port=3306
root 6978 6134 0 17:09 pts/0 00:00:00 grep mysql
# 重启之前 MySQL 数据库进程依旧是忽略授权表方式启动的。
4.4 关闭并启动数据库
[[email protected] ~]# /etc/init.d/mysqld stop
# 此时用这种方式关闭数据库关不了。
[[email protected] ~]# mysqladmin -uroot -p111111 shutdown
# 用这种方式关闭数据库。
[[email protected] ~]# /etc/init.d/mysqld start # 启动数据库。
Starting MySQL.. SUCCESS!
4.5 找回管理员密码并登录成功
[[email protected] ~]# mysql -uroot -p111111 # 登录数据库。
mysql> # 找回密码后登录成功。
原文地址:https://www.cnblogs.com/alinuxer/p/9884443.html