MySQL数据库安全配置指南

mysql|安全|数据|数据库|数据库安全

1、前言

MySQL是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用许多语言编写访问MySQL数据库的程序,特别是与PHP更是黄金组合,运用十分广泛。

由于MySQL是多平台的数据库,它的默认配置要考虑各种情况下都能适用,所以在我们自己的使用环境下应该进行进一步的安全加固。作为一个MySQL的系统管理员,我们有责任维护MySQL数据库系统的数据安全性和完整性。

MySQL数据库的安全配置必须从两个方面入手,系统内部安全和外部网络安全,另外我们还将简单介绍编程时要注意的一些问题以及一些小窍门。

2、系统内部安全

首先简单介绍一下MySQL数据库目录结构。MySQL安装好,运行了mysql_db_install脚本以后就会建立数据目录和初始化数据库。如果我们用MySQL源码包安装,而且安装目录是/usr/local/mysql,那么数据目录一般会是/usr/local/mysql/var。数据库系统由一系列数据库组成,每个数据库包含一系列数据库表。MySQL是用数据库名在数据目录建立建立一个数据库目录,各数据库表分别以数据库表名作为文件名,扩展名分别为MYD、MYI、frm的三个文件放到数据库目录中。

MySQL的授权表给数据库的访问提供了灵活的权限控制,但是如果本地用户拥有对库文件的读权限的话,攻击者只需把数据库目录打包拷走,然后拷到自己本机的数据目录下就能访问窃取的数据库。所以MySQL所在的主机的安全性是最首要的问题,如果主机不安全,被攻击者控制,那么MySQL的安全性也无从谈起。其次就是数据目录和数据文件的安全性,也就是权限设置问题。

从MySQL主站一些老的binary发行版来看,3.21.xx版本中数据目录的属性是775,这样非常危险,任何本地用户都可以读数据目录,所以数据库文件很不安全。3.22.xx版本中数据目录的属性是770,这种属性也有些危险,本地的同组用户既能读也能写,所以数据文件也不安全。3.23.xx版本数据目录的属性是700,这样就比较好,只有启动数据库的用户可以读写数据库文件,保证了本地数据文件的安全。

如果启动MySQL数据库的用户是mysql,那么象如下的目录和文件的是安全的,请注意数据目录及下面的属性:

shell>ls -l /usr/local/mysql

total 40

drwxrwxr-x 2 root root 4096 Feb 27 20:07 bin

drwxrwxr-x 3 root root 4096 Feb 27 20:07 include

drwxrwxr-x 2 root root 4096 Feb 27 20:07 info

drwxrwxr-x 3 root root 4096 Feb 27 20:07 lib

drwxrwxr-x 2 root root 4096 Feb 27 20:07 libexec

drwxrwxr-x 3 root root 4096 Feb 27 20:07 man

drwxrwxr-x 6 root root 4096 Feb 27 20:07 mysql-test

drwxrwxr-x 3 root root 4096 Feb 27 20:07 share

drwxrwxr-x 7 root root 4096 Feb 27 20:07 sql-bench

drwx------ 4 mysql mysql 4096 Feb 27 20:07 var

shell>ls -l /usr/local/mysql/var

total 8

drwx------ 2 mysql mysql 4096 Feb 27 20:08 mysql

drwx------ 2 mysql mysql 4096 Feb 27 20:08 test

shell>ls -l /usr/local/mysql/var/mysql

total 104

-rw------- 1 mysql mysql 0 Feb 27 20:08 columns_priv.MYD

-rw------- 1 mysql mysql 1024 Feb 27 20:08 columns_priv.MYI

-rw------- 1 mysql mysql 8778 Feb 27 20:08 columns_priv.frm

-rw------- 1 mysql mysql 302 Feb 27 20:08 db.MYD

-rw------- 1 mysql mysql 3072 Feb 27 20:08 db.MYI

-rw------- 1 mysql mysql 8982 Feb 27 20:08 db.frm

-rw------- 1 mysql mysql 0 Feb 27 20:08 func.MYD

-rw------- 1 mysql mysql 1024 Feb 27 20:08 func.MYI

-rw------- 1 mysql mysql 8641 Feb 27 20:08 func.frm

-rw------- 1 mysql mysql 0 Feb 27 20:08 host.MYD

-rw------- 1 mysql mysql 1024 Feb 27 20:08 host.MYI

-rw------- 1 mysql mysql 8958 Feb 27 20:08 host.frm

-rw------- 1 mysql mysql 0 Feb 27 20:08 tables_priv.MYD

-rw------- 1 mysql mysql 1024 Feb 27 20:08 tables_priv.MYI

-rw------- 1 mysql mysql 8877 Feb 27 20:08 tables_priv.frm

-rw------- 1 mysql mysql 428 Feb 27 20:08 user.MYD

-rw------- 1 mysql mysql 2048 Feb 27 20:08 user.MYI

-rw------- 1 mysql mysql 9148 Feb 27 20:08 user.frm

如果这些文件的属主及属性不是这样,请用以下两个命令修正之:

shell>chown -R mysql.mysql /usr/local/mysql/var

shell>chmod -R go-rwx /usr/local/mysql/var

用root用户启动远程服务一直是安全大忌,因为如果服务程序出现问题,远程攻击者极有可能获得主机的完全控制权。MySQL从3.23.15版本开始时作了小小的改动,默认安装后服务要用mysql用户来启动,不允许root用户启动。如果非要用root用户来启动,必须加上--user=root的参数(./safe_mysqld --user=root &)。因为MySQL中有LOAD DATA INFILE和SELECT ... INTO OUTFILE的SQL语句,如果是root用户启动了MySQL服务器,那么,数据库用户就拥有了root用户的写权限。不过MySQL还是做了一些限制的,比如LOAD DATA INFILE只能读全局可读的文件,SELECT ... INTO OUTFILE不能覆盖已经存在的文件。

本地的日志文件也不能忽视,包括shell的日志和MySQL自己的日志。有些用户在本地登陆或备份数据库的时候为了图方便,有时会在命令行参数里直接带了数据库的密码,如:

shell>/usr/local/mysql/bin/mysqldump -uroot -ptest test>test.sql

shell>/usr/local/mysql/bin/mysql -uroot -ptest

这些命令会被shell记录在历史文件里,比如bash会写入用户目录的.bash_history文件,如果这些文件不慎被读,那么数据库的密码就会泄漏。用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。如果数据库用户用SQL语句修改了数据库密码,也会因.mysql_history文件而泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。

另外这两个文件我们也应该不让它记录我们的操作,以防万一。

shell>rm .bash_history .mysql_history

shell>ln -s /dev/null .bash_history

shell>ln -s /dev/null .mysql_history

上门这两条命令把这两个文件链接到/dev/null,那么我们的操作就不会被记录到这两个文件里了。

[1] [2] [3] 下一页  

时间: 2024-12-02 22:47:25

MySQL数据库安全配置指南的相关文章

mysql安装配置指南图文详解

安装过程如下:        首先可以看到这是mysql5.0的安装界面,选择next一直安装到第2步图显示界面. Step2 next到这里,是选择安装方式.看图 ,选择完毕后继续next安装到第3步图显示界面. Step3 next到这里是安装到硬盘具体位置,看图设置 Step4 一路next,看图设置, next到这里安装完毕.   ------------------------------------------------- -----------------------------

总结Oracle数据库安全配置指南教程

0x01 测试环境 操作系统:window server 2008 x64 oracle:oracle 11.2.0.1.0 0x02 oracle权限介绍 oracle一个实例就是一个数据库,创建一个新的数据库会产生一个新的实例,并且一个实例独立运行一个进程. 一个用户对应一个方案,当用户新建一个数据对象(比如表)之后会在此方案下面.自己访问可以直接访问,其他用户访问需通过"方案名.对象名"的方式. 用户默认拥有自己方案下面的数据对象的权限,其他用户无相应权限.sys,system默

总结MongoDB数据库安全配置指南教程

0x00 MongoDB权限介绍 1.MongoDB安装时不添加任何参数,默认是没有权限验证的,登录的用户可以对数据库任意操作而且可以远程访问数据库,需以–auth参数启动. 2.在刚安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息.当admin.system.users一个用户都没有时,即使mongod启动时添加了–auth参数,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作(不管是否是以–auth 参数启

Linux下安装mantis配置指南【转】

转自:http://blog.csdn.net/xabc3000/article/details/6858229 目录(?)[-] Linux下安装mantis配置指南 配置Linux下的ApacheMysqlPHP 一安装配置Apache 二安装Mysqlrpm包 三安装GD库tar包 让PHP支持GIFPNGJPEG 五重新配置Apache 2安装配置mantis 一安装mantis 二安装配置sendmail 三安装配置phpmailer 四安装配置jpgraph Linux下安装mant

PowerDesigner 9.5配置指南

  PowerDesigner 9.5 配置指南     PowerDesigner 9.5 引入了更多强大功能,便于您根据需要,扩展基本元数据的定义.   使用 PowerDesigner 能够在现有概念的基础上扩展出新的概念定义,并为此概念添加特有的属性.约束.符号,并生成代码.   本文将以一个支持 Robustness 结构图的模块扩展来详细说明这一特性.  简介Robustness 结构图应用于 Collaboration 结构图中.用户可使用三类对象:Boundary. Contro

MYSQL初学者使用指南与介绍

mysql|初学 MYSQL初学者使用指南与介绍 一.连接MYSQL. 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql> 2.例2:连接到远程主机上的MYSQL.假设远程主机的IP为:110 .110.110.

JSP+JAVABEAN+SERVLET开发环境配置指南

js|servlet *************************************本贴从网上搜索得来,是我初学JSP找到的最好的一篇配置指南了.原作者已无法确定,不过在此也略表感谢.当初,我遍历TOMCAT英文文档依然无法找到SERVLET的安装配置的方法(本人E文水平有限),后来看到这贴子一时豁然开朗.值得推介.************************************* j2sdk1.5下载地址:http://java.sun.comtomcat5.5下载地址:h

《Cisco VPN完全配置指南》一第1章 VPN概述1.1 流量问题

第1章 VPN概述 Cisco VPN完全配置指南 这一章介绍了虚拟专用网(VPN)的概念和为什么使用它们.我考察了业务量通过公网发送时产生的问题,以及VPN如何做才可以保护这些流量.我介绍了VPN的连接方法.VPN的类型.当使用VPN时要考虑的事情.VPN的组件.VPN的设计和问题.VPN实施的例子和选择一个VPN实施类型时要考虑的问题.本书其他章节扩展了这里谈到的这些主题. 1.1 流量问题 Cisco VPN完全配置指南 VPN最初开发的主要目的是处理将明文数据通过网络进行传输时的安全问题

Postfix安全加固和隐私配置指南

本文讲的是Postfix安全加固和隐私配置指南,Postfix和Sendmail是Linux上最常用的邮件服务器系统.与Sendmail相比,Postfix的配置要简单很多,更容易上手. 本文将主要介绍Postfix的安全配置指南,旨在对Postfix的安全性能进行强化,以增加针对垃圾邮件滥用以及可能出现的泄露敏感数据问题的防范.下面我们正式开始! 为什么要对Postfix进行加固? 事实上,我们必须承认一件事--进入互联网的任何一项服务都会在不久之后就被自动化脚本所滥用.例如一个出现问题的Po