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

小天天天天    数据库    999+ 次    2018-03-15 10:57:50


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)。


如果你觉得本篇文章对您有帮助,请打赏作者

上一篇: PHP 允许Ajax跨域访问 (Access-Control-Allow-Origin)

下一篇: PHP将数字ID转化为唯一字符串

最新评论

暂无评论

热门文章

最新评论

网站数据

网站文章数:483

今日UV/PV/IP:6/6/6

昨日UV/PV/IP:22/31 /22

TOP