MySQL简单安全的十个设置方法

简介:

Mysql的默认安装参数是mysql性能最好的配置方法,但会造成数据部安全,且服务器也面临被入侵的风险,也有可能会在短时间内,出现一些性能的问题


这边文章从不同的角度去配置mysql的参数,提高安全的方法,你不能去限制别人而已攻击你的mysql db server,但你可以让他攻击和破解浪费更多的时间

一:用户和密码设置


刚安装好的mysql是没有密码的,只要能登陆到server主机的都可以无限制的访问和操作mysql 数据库,所以设置密码,是管理mysql数据库的第一步


Mysqladmin -u root  password 密码


因为mysql中的root是超级用户,很多攻击者都是想要获取root的密码,根据这点可以更改root的用户名,降低风险


mysql> update user set user='biao' where user='root';


Query OK, 1 row affected (0.22 sec)


Rows matched: 1  Changed: 1  Warnings: 0


也就是说将root的用户名更改为biao,密码和host都是不变的,之后如果再使用root账户登录,就是会提示你被拒绝的


二:增加用户和权限的设置


如果需要给开发或者维护人员添加账号,对权限进行处理,能赋予只读的就赋予只读的权限,或者对特定数据库名给写的权限,以及对登录IP也可以进行限制


GRANT ALL ON *.* TO 'root'@'%'; 这样是对所有的主机都可以访问,只要root的密码是正确的


也可以是域名


GRANT ALL ON *.* TO 'root'@'aaa.bbb.com';会解析域名的主机,主机可以访问mysql db


也可以是网段


GRANT ALL ON *.* TO 'root'@192.168.1.%';表示192.168.1.1~254IP地址都可以访问mysql db


也可以通过linuxiptables 定义访问策略


三:删掉mysql的测试库


[root@test02 ~]# mysql -D  test


不需要验证即可登录到库


mysql> drop database test;


Query OK, 1 row affected (0.13 sec)


Test库不需要任何验证都可以登录,不安全,且是测试库,可以删掉


四:禁用LOCAL INFILE


禁用”LOAD DATA LOCAL INFILE”命令,这有助于防止非授权用户访问本地文件。在PHP应用程序中发现有新的SQL注入漏洞时,这样做尤其重要。


此外,在某些情况下,LOCAL INFILE命令可被用于访问操作系统上的其它文件(如/etc/passwd),应使用下现的命令:


mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE table1


更简单的方法是:


mysql> SELECT load_file("/etc/passwd")


为禁用LOCAL INFILE命令,应当在MySQL配置文件的[mysqld]部分增加下面的参数:


set-variable=local-infile=0


五:移除匿名账户和不用的账户


有些mysql中,数据库的用户名为空,对应host主机的任何人都可以连接到数据库,使用命令检查:


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


+------+-----------+


| user | host      |


+------+-----------+


|      | localhost |


|      | test02    |


+------+-----------+


2 rows in set (0.00 sec)


删除这些存在安全隐患的用户名


mysql> delete from mysql.user where user='';


Query OK, 2 rows affected (0.00 sec)


如果需要给相应的主机赋予权限,使用grant语句就可以


六:系统权限的管理


在安装和配置mysql的时候,mysql的主要的配置目录/data/mysql 数据存储目录,/usr/local/mysqlmysql的程序安装目录,一般都是将二者的属主和属组 赋予给 mysql用户和mysql组,再设置权限的时候:chmod -R 774 即可,注意:mysql用户要设置密码


七:mysql的命令历史


在用户访问的mysql控制台中,所有的历史命令都被记录在~/.mysql_history,如果攻击者访问这个文件,就可以获取到mysql的结构信息


Cat  ~/.mysql_history


为了移除和禁用这个文件,可以将日志发送到/dev/null


$export mysql_histfile=/dev/null


八:安全补丁


经常关注mysql官网的相关信息,进行补丁的查看和修复


九:mysql启用日志


用来记录mysql实例对某种条件作出响应时写入的文件,如错误日志文件、二进制日志文件、慢查询日志文件、查询日志文件


错误文件:通过 show variables like log_error' 查看日志的放置路径


Mysql中经常用到的是二进制日志和redo log,二者简单的区别在于:


二进制日志文件会记录所有与mysql相关的日志记录,包括innodbmyisambdb等其他存储引擎日志,而innodbredo log只存储有关的本身事务日志。


二进制日志文件,不管日志的记录格式是statement或者ROW或者mixed,其记录的都是一个事务的具体操作。而innodbredo log记录的关于每个页的更改的物理情况


日志的写入时间:二进制日志写入是在事务提交前进行记录的,而事务进行的过程中,不断有重做日志条目被写入到redo log


启用二进制日志:


log-bin=mysql-bin 一般是放在了mysqldatadir


十:mysql的数据备份


Mysql的备份方式有:mysqldump,直接copy文件,以及在线备份工具:xtrabackup


Mysqldump和直接copy文件对 myisam的存储引擎比较方便,


借用工具:xtrabackup 可以在线备份innodb的数据文件


简单的描述下二者的操作原理


Mysqldump 采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,建议加上--opt参数,快速的导入和导出



对于InnoDBXtraBackup基于InnoDBcrash-recovery功能进行备份。



crash-recovery是这样的:InnoDB维护了一个redo log,又称为 transaction log,也叫事务日志,它包含了InnoDB数据的所有改动情况。InnoDB启动的时候先去检查datafiletransaction log,然后应用所有已提交的事务并回滚所有未提交的事务。


XtraBackup在备份的时候并不锁定表,而是一页一页地复制InnoDB的数据,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走(因为transactions log文件大小有限,写满之后,就会从头再开始写,新数据可能会覆盖到旧的数据,所以一旦变化就要立刻复制走)。在全部数据文件复制完成之后,停止复制logfile






      本文转自天真花语  51CTO博客,原文链接:http://blog.51cto.com/caibird/1338905,如需转载请自行联系原作者



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
12月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
865 141
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
1756 1
|
11月前
|
存储 关系型数据库 MySQL
MySQL数据库中进行日期比较的多种方法介绍。
以上方法提供了灵活多样地处理和对比MySQL数据库中存储地不同格式地日子信息方式。根据实际需求选择适当方式能够有效执行所需操作并保证性能优化。
1001 10
|
SQL Oracle 关系型数据库
比较MySQL和Oracle数据库系统,特别是在进行分页查询的方法上的不同
两者的性能差异将取决于数据量大小、索引优化、查询设计以及具体版本的数据库服务器。考虑硬件资源、数据库设计和具体需求对于实现优化的分页查询至关重要。开发者和数据库管理员需要根据自身使用的具体数据库系统版本和环境,选择最合适的分页机制,并进行必要的性能调优来满足应用需求。
553 11
|
11月前
|
NoSQL 关系型数据库 MySQL
在Visual Studio Code中设置MySQL源码调试环境
以上步骤涵盖了在VS Code中设置MySQL源码调试环境的主要过程,是一个相对高级的任务,旨在为希望建立强大开发和调试环境的开发者提供指引。遵循这些步骤,将可以利用VS Code强大的编辑和调试功能来深入理解和改进MySQL数据库的底层实现。
709 0
|
SQL 数据采集 关系型数据库
实现MySQL与SQL Server之间数据迁移的有效方法
总的来说,从MySQL到SQL Server的数据迁移是一个涉及到很多步骤的过程,可能会遇到各种问题和挑战。但只要精心规划、仔细执行,这个任务是完全可以完成的。
775 18
|
Java 关系型数据库 MySQL
在Linux操作系统上设置JDK、Tomcat、MySQL以及J2EE后端接口的部署步骤
让我们总结一下,给你的Linux操作系统装备上最强的军队,需要先后装备好JDK的弓箭,布置好Tomcat的阵地,再把MySQL的物资原料准备好,最后部署好J2EE攻城车,那就准备好进军吧,你的Linux军团,无人可挡!
569 18
|
SQL 关系型数据库 MySQL
【MySQL】SQL分析的几种方法
以上就是SQL分析的几种方法。需要注意的是,这些方法并不是孤立的,而是相互关联的。在实际的SQL分析中,我们通常需要结合使用这些方法,才能找出最佳的优化策略。同时,SQL分析也需要对数据库管理系统,数据,业务需求有深入的理解,这需要时间和经验的积累。
477 12
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。
|
关系型数据库 MySQL
MySQL字符串拼接方法全解析
本文介绍了四种常用的字符串处理函数及其用法。方法一:CONCAT,用于基础拼接,参数含NULL时返回NULL;方法二:CONCAT_WS,带分隔符拼接,自动忽略NULL值;方法三:GROUP_CONCAT,适用于分组拼接,支持去重、排序和自定义分隔符;方法四:算术运算符拼接,仅适用于数值类型,字符串会尝试转为数值处理。通过示例展示了各函数的特点与应用场景。

推荐镜像

更多