共计 2310 个字符,预计需要花费 6 分钟才能阅读完成。
文章背景
ubuntu 20.04 默认反对 mysql8,不反对 mysql5。Ubuntu 20 apt 源的 mysql server 的最新版本已更新到 mysql8.0.27
,咱们能够间接通过 apt
命令来装置!
顺带一提,某些 过期
的 mysql 5 装置教程
中,也是通过 apt
命令来装置最新的 mysql 5.7.35
,但在 Ubuntu
仓库更新到 mysql 8
之后,该类教程曾经 生效
了。
mysql 5.7.35
默认只反对到 Ubuntu 18.04
, 还请读者留神,除非不得已,不要应用过期的版本。
基于平安思考,本文还介绍了一些笔者用到的安全措施。
文章指标
- 换国内源 + 更新软件源;
- 应用 apt 命令装置 mysql-server;
- auth_socket 身份验证机制;
- mysql 平安加固查看;
- 创立独立用户,容许近程拜访,调配正当的权限;
- 近程拜访。
OS | Ubuntu 20.04.3 LTS Desktop | Ubuntu 桌面零碎 |
具体步骤
1. 换国内源 + 更新软件源
Ubuntu 20.04.3 桌面版换源的两种办法
2. 应用 apt 命令装置 mysql-server
应用上面的命令间接装置 mysql-server
。
sudo apt update
sudo apt install mysql-server
装置实现后,mysql 服务会主动启动。应用 systemctl status
命令来查看 mysql 服务的状态。
好耶!装置胜利~
3. auth_socket 身份验证机制
如同 Ubuntu 零碎个别,mysql 的默认超级用户也是 root。
在 mysql8 中,root 默认应用 auth_socket plugin
进行身份验证。
这种验证形式不要求输出明码,即便输出了明码也不验证,如下图。
这个特点让很多人感觉很不平安,理论认真钻研一下这种形式,还是平安的,因为它有另外两个限度:只能用 UNIX 的 socket 形式登陆,这就保障了只能本地登陆,用户在应用这种登陆形式时曾经通过了操作系统的平安验证;操作系统的用户和 MySQL 数据库的用户名必须统一,例如你要登陆 MySQL 的 root 用户,必须用操作系统的 root 用户登陆。
(第二个限度存疑,笔者的超级用户不是 root,但未然能够应用 auth_socket 插件登陆 root)
作为 mysql 官网举荐的身份验证插件,auth_socket
是足够平安的,为了平安思考,咱们不要批改其配置。
4. mysql 平安加固查看
运行 mysql_secure_installation
进行安全检查。
- VALIDATE PASSWORD COMPONENT 明码查看组件(可选),测试用户明码强度,要求用户设置足够强的明码
- Create Root Password 创立 root 明码
- Remove Anonymous Users 移除匿名用户,在生产环境中应禁止匿名用户登陆
- Disable Remote Root Login 禁止近程 Root 登陆
- Remove Test Database 移除测试数据库,在生产环境中应移除
- Reload Privilege Tables 从新加载权限表,让下面的批改立刻失效
5. 创立独立用户,容许近程拜访,调配肯定的权限
尽管是在测试环境,但必要的安全措施还是要恪守的。
笔者创立一个独立用户用于 近程拜访
,实践上咱们应设置近程拜访的 ip 白名单
,mysql 也提供了这个性能,但在本教程中不设置,读者如果有较高的平安需要,能够在防火墙和利用进行相应的设置。
首先,应用 3 中提到的 root
+ auth_socket
登陆 mysql。
sudo mysql
创立 QingYan
数据库测试用。
CREATE DATABASE IF NOT EXISTS QingYan;
创立新用户 ninesun
,设置明码。
CREATE USER 'ninesun'@'%' IDENTIFIED BY '123456';
赋予它在任意主机上对 QingYan 数据库的所有权限。
GRANT ALL PRIVILEGES ON QingYan.* TO 'ninesun'@'%';
坑 : 有的教程中,应用 grant
命令,一行命令能够创立用户并赋予权限,在 mysql 8 会报错,请依照先创立用户再调配权限,两步实现。
刷新权限表,咱们的权限设置失效了!
FLUSH PRIVILEGES;
验证一下,应用组合键 ctrl + C
或输出 exit
退出以后用户,应用 ninesun
账户输出明码登陆。
mysql -u ninesun -p
应用上面的命令列出数据库,会发现 ninesun
只能看到 QingYan
和 information_schema
两个数据库,这阐明咱们的设置失效了。
show databases;
6. 近程拜访
事实上,以上的步骤都是在 localhost 拜访。
如果这时在近程拜访,会发现,拜访被回绝。
这是因为 mysql 的配置文件中 /etc/mysql/mysql.conf.d/mysqld.cnf
的 bind-address
为 127.0.0.1
换回地址,只会监听来自本地的申请,咱们将其改为 0.0.0.0
,监听所有起源的申请。
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
重启使配置失效。
service mysql restart
好耶!!!能够近程拜访了!!
致谢
- How To Install & Secure MySQL Server on Ubuntu 20.04
- 故障剖析 | 正确应用 auth_socket 验证插件
- MySQL auth_socket 验证插件的工作原理
- MySQL 教程:MySQL 数据库学习宝典(从入门到精通)
- MySQL 8.0.15 版本,给用户调配拜访权限提醒 your MySQL server version for the right syntax to use near ‘IDENTIFIED
- MySQL8 创立用户与受权