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,那么我们的操作就不会被记录到这两个文件里了。 
外部网络安全 
mysql数据库安装好以后,unix平台的user表是这样的: 
mysql> use mysql; 
database changed 
mysql> select host,user,password,select_priv,grant_priv from user; 
+-----------+------+----------+-------------+------------+ 
| host | user | password | select_priv | grant_priv | 
+-----------+------+----------+-------------+------------+ 
| localhost | root | | y | y | 
| redhat | root | | y | y | 
| localhost | | | n | n | 
| redhat | | | n | n | 
+-----------+------+----------+-------------+------------+ 
4 rows in set (0.00 sec)

windows平台的user表是这样的:

mysql> use mysql; 
database changed

MySQL对于数据库应该如何如何配置安全问题了的更多相关文章

  1. hibernate4中oracle,sqlserver,mysql数据库的sql方言配置(SQL Dialects)

    hibernate4中oracle,mysql,sqlserver数据库的sql方言配置(SQL Dialects) 数据库类型 Hibernate sql方言 DB2 org.hibernate.d ...

  2. [转] Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    from:  http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得 ...

  3. Linux学习之CentOS--CentOS6.4下Mysql数据库的安装与配置【转】

      如果要在Linux上做j2ee开发,首先得搭建好j2ee的开发环境,包括了jdk.tomcat.eclipse的安装(这个在之前的一篇随笔中已经有详细讲解了Linux学习之CentOS(七)--C ...

  4. Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置

    原文:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j ...

  5. Linux学习之CentOS6下Mysql数据库的安装与配置

    转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建好j ...

  6. Linux CentOS6.4下Mysql数据库的安装与配置

    一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  7. CentOS6.4/6.7下Mysql数据库的安装与配置(转载)

    通过RPM方式 给centos  安装mysql  最好有光盘,呵呵,网络也可以下载rpm安装包,不过文件较大. 1 挂载光盘 mount /dev/cdrom /mnt/cdrom/mount: b ...

  8. CentOS6.5下Mysql数据库的安装与配置

    一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  9. Java Web开发——MySQL数据库的安装与配置

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RD ...

随机推荐

  1. 阿里云数据库实例的一个db被开发人员删除了 如何恢复

    1没有 逻辑备份的话. 如下操作即可 可以将那个临时实例的需要导的db用逻辑备份出来恢复到主实例就行了 好多朋友都在问,RDS中把数据恢复到7天内任意时间点的功能在哪里啊? 其实挺简单的,只需要五步操 ...

  2. c语言之内存的申请malloc() 和释放free()

    c语言之内存的申请malloc() 和释放free() 1.如何使用 malloc 函数 malloc是一个函数,专门用来从堆上分配内存.使用malloc函数需要几个要求: 内存分配给谁?分配多大内存 ...

  3. Maven 迁移local repository

    1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问,一般默认的地址:http://search.maven.org/ ...

  4. iOS网络协议 HTTP/TCP/IP浅析

    一.TCP/IP协议       话说两台电脑要通讯就必须遵守共同的规则,就好比两个人要沟通就必须使用共同的语言一样.一个只懂英语的人,和一个只懂中文的人由于没有共同的语言(规则)就没办法沟通.两台电 ...

  5. ios-消息弹框之UIAlertView, UIActionSheet以及UIAlertController小结

    首先storyboard中创建对应按钮并拖线,来演示不同的效果 首先点击了actionSheet按钮效果如图 实现弹框需要遵守设置代理,遵守协议. 效果就是从底部向上弹起来的框框. 通过对按钮的点击输 ...

  6. NSDictionary

    // ------------------------------字典------------------------------------------------- NSDictionary *d ...

  7. linux:磁碟与档案系统管理

    档案系统特性:为什么磁碟分割完需要格式化(format)才能使用吗? 答:因为每种作业系统所设定的档案属性和权限并不相同,为了存放这些档案所需的资料(所以需要格式化成作业系统能够利用的档案系统格式fi ...

  8. 避免硬编码你的PostgreSQL数据库密码

    一个密码文件包含了我们需要连接的五个字段,所以我们可以使用文件权限来使密码更安全. host:port:dbname:user:password such as myhost:5432:postgre ...

  9. 20145207 《Java程序设计》第4周学习总结

    前言 又到了大家最喜欢的前言时间,哈哈哈.我这个人啊,就是比较爱闲聊.正式在学校呆的第一天时间就在这里敲代码,自己都觉得自己伟大.不过好无聊呀....这周的内容说实话讲我还是挺感兴趣的,因为书上的例子 ...

  10. C#控件:TabControl

    tabcontrol在切换页面的时候经常用到 这里讲下如何让tabcontrol更好看 ref:http://blog.csdn.net/conmajia/article/details/759671 ...