数据库管理人员可以参考本文档进行 MySQL 数据库系统的安全配置加固,提高数据库的安全性,确保数据库服务稳定、安全、可靠地运行。

漏洞发现

您可以使用安骑士企业版自动检测您的服务器上是否存在 MySQL 漏洞问题,或者您也可以自己排查您服务器上的 MySQL 服务是否存在安全问题。

安全加固

  1. 帐号安全

    • 禁止 Mysql 以管理员帐号权限运行

      以普通帐户安全运行 mysqld,禁止以管理员帐号权限运行 MySQL 服务。在 /etc/my.cnf 配置文件中进行以下设置。

       
       
      1. [mysql.server]
      2. user=mysql
    • 避免不同用户间共享帐号

      参考以下步骤。

      1. 创建用户。

         
         
        1. mysql> mysql> insert into
        2. mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub
        3. ject) values("localhost","pppadmin",password("passwd"),'','','');

        执行以上命令可以创建一个 phplamp 用户。

      2. 使用该用户登录 MySQL 服务。

         
         
        1. mysql>exit;
        2. @>mysql -u phplamp -p
        3. @>输入密码
        4. mysql>登录成功
    • 删除无关帐号

      DROP USER 语句可用于删除一个或多个 MySQL 账户。使用 DROP USER 命令时,必须确保当前账号拥有 MySQL 数据库的全局 CREATE USER 权限或 DELETE 权限。账户名称的用户和主机部分分别与用户表记录的 User 和 Host 列值相对应。

      执行DROP USER user;语句,您可以取消一个账户和其权限,并删除来自所有授权表的帐户权限记录。

  2. 口令

    检查账户默认密码和弱密码。口令长度需要至少八位,并包括数字、小写字母、大写字母和特殊符号四类中的至少两种类型,且五次以内不得设置相同的口令。密码应至少每 90 天进行一次更换。

    您可以通过执行以下命令修改密码。

     
     
    1. mysql> update user set password=password('test!p3') where user='root';
    2. mysql> flush privileges;
  3. 授权

    在数据库权限配置能力范围内,根据用户的业务需要,配置其所需的最小权限。

    1. 查看数据库授权情况。

       
       
      1. mysql> use mysql;
      2. mysql> select * from user;
      3. mysql>select * from db;
      4. mysql>select * from host;
      5. mysql>select * from tables_priv;
      6. mysql>select * from columns_priv;
    2. 通过 revoke 命令回收不必要的或危险的授权。

       
       
      1. mysql> help revoke
      2. Name: 'REVOKE'
      3. Description:
      4. Syntax:
      5. REVOKE
      6. priv_type [(column_list)]
      7. [, priv_type [(column_list)]] ...
      8. ON [object_type]
      9. {
      10. *
      11. | *.*
      12. | db_name.*
      13. | db_name.tbl_name
      14. | tbl_name
      15. | db_name.routine_name
      16. }
      17. FROM user [, user] ...
  4. 开启日志审计功能

    数据库应配置日志功能,便于记录运行状况和操作行为。

    MySQL服务有以下几种日志类型:

    • 错误日志: -log-err
    • 查询日志: -log (可选)
    • 慢查询日志: -log-slow-queries (可选)
    • 更新日志: -log-update
    • 二进制日志: -log-bin

      找到 MySQL 的安装目录,在 my.ini 配置文件中增加上述所需的日志类型参数,保存配置文件后,重启 MySQL 服务即可启用日志功能。例如,

       
       
      1. #Enter a name for the binary log. Otherwise a default name will be used.
      2. #log-bin=
      3. #Enter a name for the query log file. Otherwise a default name will be used.
      4. #log=
      5. #Enter a name for the error log file. Otherwise a default name will be used.
      6. log-error=
      7. #Enter a name for the update log file. Otherwise a default name will be used.
      8. #log-update=

      该参数中启用错误日志。如果您需要启用其他的日志,只需把对应参数前面的 “#” 删除即可。

      日志查询操作说明

      • 执行show variables like 'log_%';命令可查看所有的 log。
      • 执行show variables like 'log_bin';命令可查看具体的 log。
  5. 安装最新补丁

    确保系统安装了最新的安全补丁。

    注意: 在保证业务及网络安全的前提下,并经过兼容性测试后,安装更新补丁。

  6. 如果不需要,应禁止远程访问

    禁止网络连接,防止猜解密码攻击、溢出攻击、和嗅探攻击。

    注意: 仅限于应用和数据库在同一台主机的情况。

    如果数据库不需要远程访问,可以禁止远程 TCP/IP 连接,通过在 MySQL 服务器的启动参数中添加--skip-networking参数使 MySQL 服务不监听任何 TCP/IP 连接,增加安全性。

    您可以使用 安全组 进行内外网访问控制,建议不要将数据库高危服务对互联网开放。

  7. 设置可信 IP 访问控制

    通过数据库所在操作系统的防火墙限制,实现只有信任的 IP 才能通过监听器访问数据库。

     
     
    1. mysql> GRANT ALL PRIVILEGES ON db.*
    2. ·-> -> TO 用户名@'IP子网/掩码';
  8. 连接数设置

    根据您的机器性能和业务需求,设置最大、最小连接数。

    在 MySQL 配置文件(my.conf 或 my.ini)的 [mysqld] 配置段中添加max_connections = 1000,保存配置文件,重启 MySQL 服务后即可生效。

MySQL服务安全加固的更多相关文章

  1. mysql常见安全加固策略

    原创 2017年01月17日 21:36:50 标签: 数据库 / mysql / 安全加固 5760 常见Mysql配置文件:linux系统下是my.conf,windows环境下是my.ini: ...

  2. mysql安装及加固

    mysql安装 查看是否安装mysql 我们先看一下有没有安装mysql yum list installed mysql | grep mysql 本地只安装了php链接mysql的库,没有安装my ...

  3. MySql免安装版安装配置,附MySQL服务无法启动解决方案

          文首提要:             我下载的MySQL版本是:mysql-5.7.17-winx64.zip  Archive版:系统:Windows7 64位. 一.解压文件 下载好My ...

  4. Mac下启动和停止Mysql服务

    方法1. 启动Mysql服务   sudo /Library/StartupItems/MySQLCOM/MySQLCOM start   停止Mysql服务   sudo /Library/Star ...

  5. 关于在安装MySQL时报错"本地计算机上的mysql服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止"的解决方法

    首先将你下载的MySQL安装或者解压(对应安装版和解压版),下载地址http://dev.mysql.com/downloads/mysql/ 然后复制你安装目录中的my-default.ini,更改 ...

  6. 本地无法启动MySQL服务,报的错误:1067,进程意外终止

    在本地计算机无法启动MYSQL服务错误1067进程意外终止 这种情况一般是my.ini文件配置出错了 首先找到这个文件: 默认安装路径 C:/Program Files/MySQL/MySQL Ser ...

  7. CentOS 7下MySQL服务启动失败的解决思路

    今天,启动MySQL服务器失败,如下所示: [root@spark01 ~]# /etc/init.d/mysqld start Starting mysqld (via systemctl): Jo ...

  8. Mysql服务启动的时候 如何加载配置文件

    Mysql服务启动的时候 如何引导配置文件 (启动加载顺序)

  9. 启动Mysql服务提示Can’t connect to local MySQL server through socket的解决方法

    启动Mysql服务常会提示下面错误: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/ ...

随机推荐

  1. Mina简单的入门示例

    Mina是Apache下的一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序.它提供了一个通过Java NIO在不同的传输协议上抽象的事件驱动的异步API,例如TCP/IP和 ...

  2. 关于VMware Linux 虚拟机忘记root 密码找回

    因为昨天新安装过虚拟机设置了新的密码,再加上我好长时间没有用自己旧的虚拟机,导致忘记了密码,原来虽然知道在单用模式下,找回密码,但是确实是自己从来都没有做过,还好我们组大手飞翔哥告诉了我,怎么找回ro ...

  3. 【iCore4 双核心板_uC/OS-II】例程八:消息邮箱

    一.实验说明: 消息邮箱是uC/OS-II中的另一种通信机制,可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量.通常该指针指向一个包含了“消息”的特定数据结构.   二.实验截图:   ...

  4. 关于 GET、POST、表单、Content-Type

    关于 GET.POST.表单.Content-Type headers HTTP 的请求头,在这里也可以放参数,不论 GET 请求或 POST 请求都可以. GET 请求 GET 请求的参数都在 UR ...

  5. Java编程的逻辑 (87) - 类加载机制

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  6. Houdini技术体系 过程化地形系统(一):Far Cry5的植被系统分析

    背景     在大世界游戏里,植被(biome)是自然环境非常重要的组成部分,虽然UE4里的也有比较不错的地形+植被系统,但相比国外AAA级游戏的效果,还是有不少的差距,简介如下: UE4的植被分为( ...

  7. Quartz.net设置任务中同时最多运行一个实例 [DisallowConcurrentExecution]

    Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行, 如果定时任执行太长,会长时间占用资源,导致其它任务堵塞. 比如Job设置1分钟跑一次,每次获取50条短信发 ...

  8. How to secure the ASP.NET_SessionId cookie? 设置ASP.NET_SessionId Secure=true

    How to secure the ASP.NET_SessionId cookie? To add the ; secure suffix to the Set-Cookie http header ...

  9. String 源码探究

    起因:忽然想到平时用的HashMap 当key是字符串的时候为什么总可以覆盖,然后看了String的源码发现: private final char value[]; private int hash ...

  10. Unity导入fbx格式的模型

    1. 在Model文件夹右击,选择 import new Asset,然后选择要导入的模型 2. 将纹理图片导入Pictures中 3. 在Materials中创建一个Material,然后点击属性中 ...