Mysql数据库安全加固

一、安装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

8、修改数据库密码

set password for 'root'@'localhost'=password('Lyp@123.com');
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

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 'Test@123.com'; # 只能本地登录
create user 'test'@'192.168.7.22' identified by 'Test@123.com'; # 指定IP登录
create user 'test'@'%' identified by 'Test@123.com';            # 无限制
drop user 'test'@'localhost';                                  # 删除用户
set password = password('Test@123.com');                        # 修改当前用户密码
set password for 'test'@'%'='Lyp@123.com';                     # 修改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;

2、新建mysql用户

create user 'test'@'localhost' identified by 'Test@123.com'; # 只能本地登录
create user 'test'@'192.168.7.22' identified by 'Test@123.com'; # 指定IP登录
create user 'test'@'%' identified by 'Test@123.com';            # 无限制

3、删除用户

drop user 'test'@'%';

4、修改当前用户密码

set password = password('Test@123.com');

5、修改其他用户密码

set password for 'test'@'%'='Lyp@123.com';                      # 修改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 查找配置文件

二、密码复杂度

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%';

三、 登录失败和连接超时

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    #限制重试时间,此处为毫秒,注意按需求换算

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

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

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

mysql -u root -p

6、设置超时时间

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

查看配置是否生效

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

四、远程登录限制

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

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

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

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

五、会话连接数

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

八、禁用符号链接

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

skip_symbolic_links=yes

九、修改默认端口

port = 3306

十、用户权限合理分配

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

查看mysql用户

select user,host,account_locked from mysql.user;

查看root用户权限信息

show grants for 'root'@'%';

2、创建MySQL用户和权限

# 1.使用create创建用户,后再授权
# 1.1 创建 bb 用户,设置密码为Bb@123.com,并没有权限
create user 'bb'@'%' identified by 'Bb@123.com';
# 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 "Bb@123.com" 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数据库安全加固相关推荐

  1. 数据库安全之Mysql数据库安全加固

    转载来源 : 数据库安全之Mysql数据库安全加固 :http://www.safebase.cn/article-260336-1.html 账号加固 以普通帐户安全运行mysqld,禁止mysql ...

  2. mysql数据库安全加固_数据库安全加固系统

    安全是多个环节层层防护.共同配合的结果.也就是说在安全领域不能仅仅依靠某一个环节完成所有的安全防护措施,对于数据库安全领域也是一样.数据库领域的安全措施通常包括:身份识别和身份验证.自主访问控制和强制 ...

  3. mysql的安全加固方法_MySQL数据库安全加固方法

    MySQL数据库安全加固方法 基本安全原则 选择稳定.无漏洞版本并及时升级更新.打补丁 配置防火墙策略,更改默认端口 避免使用弱口令,定期更新口令 严格的权限分配和访问控制 具体安全配置 系统层面配置 ...

  4. 数据库原理及MySQL应用 | 数据库安全加固

    数据库安全至关重要,可从多方面对数据库进行加固. 数据库安全怎么强调都不过分,可以从以下方面对数据库进行加固,让它更安全. 01.操作系统级别 可从以下七方面实现操作系统级别的安全加固. 1. 使用数 ...

  5. mysql数据库安全配置文件_MySQL数据库安全配置

    MySQL数据库安全配置 1.前言 MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统.它具有功能强.使用简便.管理方便.运行速度快.安全可靠性强 ...

  6. MySQL数据库安全配置

    文章来源:http://www.xfocus.net MySQL数据库安全配置 1.前言 MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统.它具 ...

  7. 阿里云 linux mysql数据库_Linux Mysql数据库安全配置

    Linux Mysql数据库安全配置 目录: 1.修改mysql管理员账号root的密码(2种方法) 2.修改mysql管理员账号root 3.mysql管理员root账号密码遗忘解决办法(2种方法) ...

  8. 确保帐户安全 谈MySQL数据库安全解决方案

    确保帐户安全 谈MySQL数据库安全解决方案 随着网络的普及,基于网络的应用也越来越多.网络数据库就是其中之一.通过一台或几台服务器可以为很多客户提供服务,这种方式给人们带来了很多方便,但也给不法分子 ...

  9. MySQL数据库安全

    文章目录 前言 一.MySQL 二.数据库安全 1.基础概念 2.数据库安全目标 3.数据库安全防护技术 4.影响数据库安全的因素 三.数据库系统安全相关因素 1.外围网络 2.主机 3.数据库 4. ...

最新文章

  1. (0047)iOS开发之nil/Nil/NULL的区别
  2. android之实现各个组件点击事件监听
  3. 全国计算机等级二级证书foxbase,2002年4月全国计算机等级考试二级FOXBASE笔试试题...
  4. 异步复位同步释放_简谈同步复位和异步复位
  5. LeetCode之Move Zeroes
  6. python3设置编码背景颜色_在pythongtk3中设置条目背景颜色并设置回defau的最佳方法...
  7. 从技术到应用实践,揭秘京东区块链布局全景
  8. echarts源码打包_Echarts源码阅读指南
  9. caffe的python接口学习(2):生成solver文件
  10. idea module重命名后去掉后面带着的原来的名字
  11. 电子元器件封装知识大全(内含AD封装库下载资料)
  12. 河南大学计算机网络考试试卷,计算机网络试卷.doc
  13. FinalData使用方法
  14. 网友问答 | 关于I2C电平转换电路
  15. atomic 原子操作
  16. Dapper基础入门
  17. CSS“隐藏”元素的几种方法的对比
  18. ap mt7260a 华硕_华硕(ASUS)路由器AP模式设置_华硕路由器当无线AP设置-192路由网
  19. 简单实用 | 用Gitbook做笔记 / 写书过程全记录
  20. 包装类-Wrapper

热门文章

  1. 支持OnVif协议的摄像头直播推流php
  2. 关于输入法键盘的Enter键
  3. 解决Realtek High Definition Audio麦克风音量过低的简易方法
  4. 微信小程序应该这样开发
  5. 360度全景拍摄,探索全景世界带你飞跃视野新高度
  6. 在外包公司工作是什么样的体验?
  7. Microsoft Word 教程「4」,如何在 Word 中应用样式、主题?
  8. cad.net 依照旧样条曲线数据生成一条新样条曲线的代码段. spline生成
  9. 赠与今年的大学毕业生 (二)
  10. 实战!双硬盘安装图解!