MariaDB/MySQL安全配置以及账户管理

MySQL安装好后,我们要对MySQL做一些初步的安全设置,使得其适用于生产环境,此外对MySQL账户的管理设置也是有讲究的,本文从安全的角度给大家介绍MySQL/MariaDB的相关设置。

我们知道,初次安装好MySQL后,MySQL会默认自带一些用户和数据库,主要用于测试。而实际生产环境中不需要这些,为了避免带来安全隐患,我们应当移出这些测试库和无关用户。

本文假设你已经安装好了MaiaDB:《CentOS7下源码编译安装MariaDB 10.2》,安装路径及配置与该文一致。

手动删除多余的库

首先进入mysql:

/usr/local/mariadb/bin/mysql -uroot -p
知识兔

使用账号root和密码登录MySQL。

然后使用命令show databases;,你会发现有个“test”表:

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
知识兔

默认情况下,MariaDB附带一个名为“test”的数据库,任何人都可以访问,生产环境中应该删除test数据库。

DROP DATABASE test;
知识兔

手动删除多余的账户

然后查询MySQL的账户,你会发现有好几个账户:

MariaDB [mysql]> select host,user from mysql.user;
+-----------------------+------+
| host                  | user |
+-----------------------+------+
| 127.0.0.1             | root |
| ::1                   | root |
| localhost             |      |
| localhost             | root |
| localhost.localdomain |      |
| localhost.localdomain | root |
+-----------------------+------+
6 rows in set (0.01 sec)
知识兔

默认情况下,MariaDB安装有一个匿名用户,允许任何人登录到MariaDB而无需创建用户帐户,生产环境中应该删除这些多余的账户。

DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
FLUSH PRIVILEGES; #刷新权限
知识兔

删除后,记得再刷新权限,顿时你会觉得世界清静多了。

使用工具删除多余的库和用户

如果你懒得敲那么多代码,那么你可以使用MySQL自带的一个安全设置工具:mysql_secure_installation,在MySQL的安装目录下直接执行,根据提示输入“Y”或“n”,即可完成安全配置。

允许安全设置工具:

/usr/local/mariadb/bin/mysql_secure_installation --basedir=/usr/local/mariadb
知识兔

注意路径不要写错,成功运行后,会出现如下提示:

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
#修改root密码
Change the root password? [Y/n] n
#删除匿名用户
Remove anonymous users? [Y/n] Y
#禁止root远程登录
Disallow root login remotely? [Y/n] Y
#删除test数据库
Remove test database and access to it? [Y/n] Y
#重载权限表使之立即生效
Reload privilege tables now? [Y/n] Y
知识兔

完成以上步骤,你的MariaDB就基本安全了。

创建新账户和数据库权限

同样需要先进入mysql:

/usr/local/mariadb/bin/mysql -uroot -p
知识兔

创建一个新账户lesuo,并设置密码为123456x:

create user 'lesuo'@'localhost' identified by '123456x';
知识兔

创建一个数据库名为lesuodb:

create database lesuodb DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
知识兔

将数据库lesuodb分配给账号lesuo:

grant all privileges on `lesuodb`.* to 'lesuo'@'localhost';
知识兔

刷新权限使之立即生效:

flush privileges;
知识兔

远程连接MySQL/MariaDB

复杂些的应用就需要数据库提供对外远程访问,比如开放内网段、特定IP、公网访问等。

允许用户lesuo凭密码123456从任意机器访问数据库lesuodb,用户lesuo拥有操作数据库lesuodb的所有权限。

grant all privileges on `lesuodb`.* to 'lesuo'@'%' identified by '123456';
知识兔

允许用户lesuo凭密码123456从网段192.168.11.*的机器上访问数据库lesuodb,用户lesuo拥有操作数据库lesuodb的select,insert,update,create权限。

grant select,insert,update,create on lesuodb.* to lesuo@'192.168.11.%' identified by '123456';
知识兔

刷新权限使之立即生效:

flush privileges;
知识兔

开放远程连接的服务器记得设置防火墙开放MySQL端口(默认3306)。

以上就是MySQL的账户相关安全设置的全部内容,接下来会有文章介绍常用的mysql操作,如导入和导出,同步和备份等,敬请关注。

计算机