ubuntu 20.04 Desktop mysql8:最方便的安装方法,进行安全加固,创建允许远程用户访问

文章背景

ubuntu 20.04 默认支持 mysql8 ,不支持 mysql5 。Ubuntu 20 apt源的 mysql server 的最新版本已更新到 mysql8.0.27 ,我们可以直接通过 apt 命令来安装!

ubuntu 20.04 Desktop mysql8:最方便的安装方法,进行安全加固,创建允许远程用户访问_第1张图片

顺带一提,某些 过时mysql 5 安装教程 中,也是通过 apt 命令来安装最新的 mysql 5.7.35 ,但在 Ubuntu 仓库更新到 mysql 8 之后,该类教程已经 失效 了。

mysql 5.7.35 默认只支持到 Ubuntu 18.04 , 还请读者注意,除非不得已,不要使用过时的版本。

基于安全考虑,本文还介绍了一些笔者用到的安全措施。

文章目标

  1. 换国内源+更新软件源;
  2. 使用 apt 命令安装 mysql-server ;
  3. auth_socket 身份验证机制;
  4. mysql 安全加固检查;
  5. 创建独立用户,允许远程访问,分配合理的权限;
  6. 远程访问。
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 服务的状态。

ubuntu 20.04 Desktop mysql8:最方便的安装方法,进行安全加固,创建允许远程用户访问_第2张图片

好耶!安装成功~

3. auth_socket 身份验证机制

如同 Ubuntu 系统一般, mysql 的默认超级用户也是 root 。
在 mysql8 中,root 默认使用 auth_socket plugin 进行身份验证。

ubuntu 20.04 Desktop mysql8:最方便的安装方法,进行安全加固,创建允许远程用户访问_第3张图片

这种验证方式不要求输入密码,即使输入了密码也不验证,如下图。

ubuntu 20.04 Desktop mysql8:最方便的安装方法,进行安全加固,创建允许远程用户访问_第4张图片

这个特点让很多人觉得很不安全,实际仔细研究一下这种方式,还是安全的,因为它有另外两个限制:只能用 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

ubuntu 20.04 Desktop mysql8:最方便的安装方法,进行安全加固,创建允许远程用户访问_第5张图片

创建 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 只能看到 QingYaninformation_schema 两个数据库,这说明我们的设置生效了。

show databases;

ubuntu 20.04 Desktop mysql8:最方便的安装方法,进行安全加固,创建允许远程用户访问_第6张图片

6. 远程访问

事实上,以上的步骤都是在 localhost 访问。
如果这时在远程访问,会发现,访问被拒绝。
这是因为 mysql的配置文件中 /etc/mysql/mysql.conf.d/mysqld.cnf bind-address127.0.0.1 换回地址,只会监听来自本地的请求,我们将其改为 0.0.0.0 ,监听所有来源的请求。

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

ubuntu 20.04 Desktop mysql8:最方便的安装方法,进行安全加固,创建允许远程用户访问_第7张图片

重启使配置生效。

service mysql restart

好耶!!!可以远程访问了!!

致谢

  1. How To Install & Secure MySQL Server on Ubuntu 20.04
  2. 故障分析 | 正确使用 auth_socket 验证插件
  3. MySQL auth_socket 验证插件的工作原理
  4. MySQL教程:MySQL数据库学习宝典(从入门到精通)
  5. MySQL 8.0.15版本,给用户分配访问权限提示 your MySQL server version for the right syntax to use near 'IDENTIFIED
  6. MySQL8 创建用户与授权

你可能感兴趣的:(ubuntu 20.04 Desktop mysql8:最方便的安装方法,进行安全加固,创建允许远程用户访问)