mysql数据库安全加固

Mysql数据库安全加固

mysql数据库安全加固_第1张图片

一、安装Mysql服务

1、创建mysql文件安装目录

mkdir /opt/mysql

2、进入该目录下载解压安装文件

cd /opt/mysql/
wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
yum install pcre pcre-devel gcc openssl openssl-devel zlib zlib-devel

3、删除自带的数据库 mariadb(如果虚拟机上有的话,没有则不管),会跟 mysql 发生冲突。
首先执行下面命令查看是否存在,如果有删除即可

rpm -qa | grep mari
rpm -e --nodeps mariadb-libs
rpm -e --nodeps marisa

4、开始安装 mysql,依次执行下述命令

rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm

5、启动mysql服务

systemctl start mysqld.service
systemctl restart mysqld.service
systemctl stop mysqld.service
systemctl status mysqld.service
find / -name my.cnf 	# 查找mysql配置文件

6、mysql 自动给 root 用户设置随机密码,运行命令可查看当前密码,登录成功后需要修改密码

grep "password" /var/log/mysqld.log

在这里插入图片描述

7、利用上面查到的密码,进入 mysql

 mysql -u root -p

mysql数据库安全加固_第2张图片

8、修改数据库密码

set password for 'root'@'localhost'=password('Aa123456');
flush privileges;

9、连接Navicate,记得要开启3306端口,虚拟机直接关闭防火墙即可

# 查看防火墙是否已开放3306端口
firewall-cmd --query-port=3306/tcp
 
# 设置3306端口为永久开放
firewall-cmd --add-port=3306/tcp --permanent
 
# 查看firewalld状态,发现当前是dead状态,即防火墙未开启
systemctl status firewalld
 
# 关闭防火墙
systemctl stop firewalld
 
# 重启防火墙(设置了新的端口记得先关闭,再重启)
systemctl status firewalld

mysql数据库安全加固_第3张图片

10、如果还是登录失败可以进入数据库中执行如下命令,修改当前用户的登录权限(本地登录,指定IP登录和无限制登录)

use mysql;
SELECT Host, User FROM user;
UPDATE user SET Host = '%' WHERE User = 'root';
flush privileges;

二、Mysql安全加固

create user 'test'@'localhost' identified by '[email protected]';	# 只能本地登录
create user 'test'@'192.168.7.22' identified by '[email protected]';	# 指定IP登录
create user 'test'@'%' identified by '[email protected]';			# 无限制
drop user 'test'@'localhost';									# 删除用户
set password = password('[email protected]');						# 修改当前用户密码
set password for 'test'@'%'='Aa123456';						# 修改test用户的密码
alter user 'test'@'%' account lock;								# 锁定test用户
alter user 'test'@'%' account unlock;							# 解锁test用户

一、空密码与有效期

1、执行如下执行SQL语句检查密码是否为空:

select user,host from mysql.user where length(authentication_string) = 0;select user,host,authentication_string,password_lifetime,account_locked from mysql.user;

mysql数据库安全加固_第4张图片

2、新建mysql用户

create user 'test'@'localhost' identified by '[email protected]';	# 只能本地登录
create user 'test'@'192.168.7.22' identified by '[email protected]';	# 指定IP登录
create user 'test'@'%' identified by '[email protected]';			# 无限制

3、删除用户

drop user 'test'@'%';							

4、修改当前用户密码

set password = password('[email protected]');						

5、修改其他用户密码

set password for 'test'@'%'='Aa123456';						# 修改test用户的密码

6、锁定用户

alter user 'test'@'%' account lock;								# 锁定test用户

7、解锁用户

alter user 'test'@'%' account unlock;							# 解锁test用户

8、设置密码有效期

show global variables like 'default_password_lifetime';

在这里插入图片描述

在mysql的配置文件中修改密码的有效期

 vim /etc/my.cnf  # find / -name my.cnf 查找配置文件

mysql数据库安全加固_第5张图片

二、密码复杂度

1、根据业务需要设置密码复杂度,配置文件中修改即可

plugin-load = "validate_password.so"
validate-password = FORCE_PLUS_PERMANENT		# 强制启用该插件,不能被卸载
validate_password_length = 8 					# 密码位数
validate_password_policy = 1                    # 密码强度为medium或者1 
validate_password_mixed_case_count = 1 			# 至少有大小写字母
validate_password_number_count = 1 				# 最少一个数字
validate_password_special_char_count = 1 		# 最少一个符号

在这里插入图片描述

2、配置完成后查看密码复杂度设置

show variables like 'validate%';

mysql数据库安全加固_第6张图片

三、 登录失败和连接超时

1、登录数据库安装两个插件即可

install plugin CONNECTION_CONTROL soname 'connection_control.so';
install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so';

在这里插入图片描述

2、查看安装的两个插件

show plugins;

在这里插入图片描述

3、修改配置文件增加如下两行配置

vim /etc/my.cnf
connection-control-failed-connections-threshold=5   #登陆失败次数限制
connection-control-min-connection-delay=1800000    #限制重试时间,此处为毫秒,注意按需求换算

mysql数据库安全加固_第7张图片

4、重启mysql服务器,查看策略是否生效

service mysqld restart
show variables like '%connection_control%';

mysql数据库安全加固_第8张图片

5、验证配置连续输入5次密码后的情况

mysql -u root -p      

mysql数据库安全加固_第9张图片

6、设置超时时间

set global interactive_timeout=1800;
set global wait_timeout=1800;

在这里插入图片描述

查看配置是否生效

show global variables like 'interactive_timeout';
show global variables like 'wait_timeout';

mysql数据库安全加固_第10张图片

四、远程登录限制

1、如非业务需要应该禁止远程登录或者禁止以root用户登录mysql

select user,host from mysql.user where user='root';

mysql数据库安全加固_第11张图片

2、启用ssl连接进行加密,如果本地管理不适用,如果是远程连接查看是否开启SSL加密组件,执行如下命令查看

show variables like "%have_ssl%";
show variables like "%have_openssl%";

mysql数据库安全加固_第12张图片

五、会话连接数

1、设置myql会话连接数

max_connections	= 150			    #	是对整个服务器的用户做出限制,
max_user_connections = 0			#	是对每个用户的限制,0表示不限制

在这里插入图片描述

六、启用日志审计

1、mysql默认启用日志审计,记录的内容也符合相关安全要求,此项默认符合

log-error=/var/log/mysqld.log

在这里插入图片描述

七、禁用local-infile选项

1、禁用local_infile选项会降低攻击者通过SQL注入漏洞读取敏感文件的能力

执行如下SQL语句:

show variables like 'local_infile';

若返回结果不为OFF,则在/etc/my.cnf配置文件中修改

local_infile = 0

在这里插入图片描述

mysql数据库安全加固_第13张图片

八、禁用符号链接

1、禁用符号链接以防止各种安全风险,在配置文件中添加如下配置

skip_symbolic_links=yes

在这里插入图片描述

九、修改默认端口

port = 3306

在这里插入图片描述

十、用户权限合理分配

1、查看各账户和权限分配情况,应遵循三权分立原则(分为系统管理员、安全管理员、安全审计员等,并检查系统各用户所属的权限组。如:系统管理员不能进行业务操作、审计操作审计员不能进行业务操作、系统管理操作安全员不能进行添加账号操作等)

查看mysql用户

select user,host,account_locked from mysql.user;

mysql数据库安全加固_第14张图片

查看root用户权限信息

show grants for 'root'@'%';

在这里插入图片描述

2、创建MySQL用户和权限

# 1.使用create创建用户,后再授权
# 1.1 创建 bb 用户,设置密码为[email protected],并没有权限
create user 'bb'@'%' identified by '[email protected]';
# 1.2 授予bb查询和添加test库的权限
grant select,insert,update,delete,create,alter on test.* to 'bb';

# 2.使用GRANT创建用户并授权test库的所有操作
grant all privileges on test.* to 'bb'@'%' identified by "[email protected]" with grant option;

命令解释

1. all privileges 是表示所有权限,你也可以使用select、update等权限。
2. ON 用来指定权限针对哪些库和表
3. test.*  表示test库的所有表
4. TO 表示将权限赋予某个用户。
5. 'bb'@'%' 表示bb用户,主机为%。主机可以是IP、IP段、域名以及%
6. identified  by 指定用户的登录密码
with grant option 这个选项表示该用户可以将自己拥有的权限授权给别人

3、回收权限

# 回收alter权限
revoke alter on test.* from 'bb'@'%';
# 回收所有权限
revoke all privilegeson test.* from 'bb'@'%';

你可能感兴趣的:(安全加固,mysql,数据库,网络安全)