所属分类: 网络安全 整理: FengNet.Com 更新日期:2015/9/21 9:36:40 阅读次数:641

MySQL安全配置


1 安全策略

1.1 管理意义上的数据安全

访问 MySQL 数据库必须首先访问数据库的某个权限、即以某个权限模式用户的身份登录,大部分的安全管理主要通过模式用户的权限来实现。

MySQL 的相关权限信息主要存放在 grant tables 的系统表中,即 mysql.User(全局级别权限) 、 mysql.db (数据库级别权限)、 mysql.Host(数据库级别权限) 、mysql.table_priv(表级别权限) 和、 mysql.column_pr(列级别权限)表中, MySQL 启动时装入内存。应尽量使用 GRANT 、REVOKE 、CREATE USER 及 DROP USER 来进行用户和权限的变更操作。如 :GRANT SELECT.UPDATE,DELETE,INSERT,EXECUTE ON test_shop.* TO ‘ test_guest ‘@’localhost’;

查看某用户权限,如 SHOW GRANTS FOR ‘test_guest’@’ localhost ‘

1.2 防范故障角度的数据安全

数据文件是操作系统级的对象,因此一般来讲具有相当的脆弱性、而且依赖于操作系统的性能特点。由于磁盘介质的因素、一个大的数据文件上个别数据块的损坏可能导致整个数据文件的不可用,这对一个系统来说是灾难性的,而且大的表空间或数据文件的恢复是困难和耗时的。

巨大对象的分区在性能角度之外也有安全的因素,当磁盘错误使一个巨大表中一个单独的数据块不能读写时可能导致整个表不可用,必须恢复包含该表的整个表空间。

考虑到数据仓库问题。可以进行以下操作:

对数据量大且不进行写操作的表,使用 myisampack 工具,生成压缩、只读 MyISAM 表。可以压缩 40% - 50% 的表文件空间。具体操作如下:

A 压缩文件: >myisampack ../data/music_shop/ 表名 .MYI

B 重建索引: >myisamchk -rq --sort-index --analyze../data/test_shop/ 表名 .MYI

C 强制 mysqld 使用新表: > mysqladmin flush-tables

如果要进行写操作,可以解压缩一个压缩的表,恢复原有状态,使用 myisamchk 。 如: myisamchk --unpack ../data/music_shop/ 表名 .MYI

最后,系统上线后,随着数据量的增加,会发现数据目录下的磁盘空间越来越下,造成安全隐患。可以采取两种措施。一种针对 MyISAM 存储引擎的表,在建表时分别指定数据目录和索引目录到不同的磁盘空间,而默认会同时放在数据目录下。另外一种针对 InnoDB 存储引擎的表,因为数据文件和索引文件在一起的,所以无法将它们分离。当磁盘空间不足时,可以增加一个新的数据文件,这个文件放在有充足空间的磁盘上。具体请查阅参数innodb_data_file_path 设置。

1.3 容灾与备份机制

建立主从数据库集群,采用 MySQL 复制

MySQL 复制的优点:

1 如果主服务器出现问题,可以快速切换到从服务器;

2 可以在从服务器上执行查询操作,降低主服务器的访问压力;

3 可以在从服务器上执行备份,以避免备份期间影响主服务器的;

应注意的问题:

由于实现的是异步的复制,所以主从服务器之间存在一定的差距。在从服务器上进行的查询操作要考虑到这些数据的差异,一般只有对实时性要求不高的数据可以通过从服务器查询。

定期备份文件与数据,通过各种方式保存文件与数据。

以下是几点防范的措施:

制定一份数据库备份 / 恢复计划,并对计划进行仔细测试。

启动数据库服务器的二进制变更日志,该功能的系统开销很小 ( 约为 1%) ,二进制日志包含备份后进行的所有更新,我们没有理由不这样做。(log-bin=file,file可以不指定)

定期检查数据表,防范于未燃。

定期对备份文件进行备份,以防备份文件失效。

把 MySQL 的数据目录和备份文件分别放到两个不同的驱动器中,以平衡磁盘 I/O 和增加数据的安全。

2 安全隐患

2.1 正确设置目录权限

设置目录权限的原则是软件和数据分开,具体如下:

1. 将 mysql 安装在单独的用户下

2. 安装时,以 root 用户进行安装,mysql 的软件默认都为 root 权限

3. 安装完毕后,将数据目录权限设置为实际运行 mysql 的用户权限,比如:

Chown –R mysql:mysql /home/mysql/data

2.2 尽量避免以 root 权限运行 mysql

将 4.1 的目录权限设置完毕后,启动、停止 mysql 以及日常的维护工作都可以在

mysql 用户下进行,没有必要 su 到 root 后再用—user=mysql 来启动和关闭 mysql,

这样就没有必要授权维护人员 root 权限,而且最重要的一定是因为任何具有 FILE权限的用户能够用 root 创建文件。

2.3 删除匿名账号

有些版本的 MySQL 安装完之后会安装一个空账号( User = ‘‘ ),此账号对 test 数据库有完全权限,为避免此账号登陆后,建立大表,占用磁盘空间,影响系统安全,建议删除

drop user @localhost;

drop user @ localhost.localdomain’;

2.4 给 root 账号设置口令

建议以一句话的拼音为口令。如 SET PASSWORD=PASSWORD(‘woshiyitiaoyu’)

并且限定只能通过 localhost 访问。

2.5 只授予账号必须的权限

如: Grant select,insert,update,delete on tablename to ‘username’@’hostname’

2.6 除 root 外,任何用户不应有 mysql 库 user 表的存取权限

如果拥有 mysql 库中 user 表的存取权限(select、update、insert、delete), 就

可以轻易的增加、修改、删除其他的用户权限,造成系统的安全隐患。

如:use mysql;delete from db where user<>‘root’ and db=‘mysql’

2.7 不要把 file 、 process 、或 super 权限授予管理员以外的账号

会产生保密信息外泄,查看管理员执行的动作,普通用户执行 kill 命令等严重的安全隐患。

FILE 权限可以被滥用于将服务器主机上 MySQL 能读取的任何文件读入到数据库表中。包括任何人可读的文件和服务器数据目录中的文件。可以使用 SELECT 访问数据库表,然后将其内容传输到客户端上。不要向非管理用户授予 FILE 权限。

有这权限的任何用户能在拥有 mysqld 守护进程权限的文件系统那里写一个文件!为了更加安全,由 SELECT ... INTO OUTFILE 生成的所有文件对每个人是可写的,并且你不能覆盖已经存在的文件。

file 权限也可以被用来读取任何作为运行服务器的 Unix 用户可读取或访问的文件。使用该权限,你可以将任何文件读入数据库表。这可能被滥用,例如,通过使用 LOADDATA 装载“/etc/passwd”进一个数据库表,然后能用 SELECT 显示它。PROCESS 权限能被用来察看当前执行的查询的明文文本,包括设定或改变密码的查询。

SUPER 权限能用来终止其它用户或更改服务器的操作方式。比如 kill 进程不要将 PROCESS 或 SUPER 权限授给非管理用户。mysqladmin processlist 的输出显示出当前执行的查询正文,如果另外的用户发出一个 UPDATE user SETpassword=PASSWORD(not_secure)查询,被允许执行那个命令的任何用户可能看得到

2.8 LOAD DATA LOCAL 带来的安全问题

由 MySQL 服务器启动文件从客户端向服务器主机的传输。理论上,打过补丁的服务器可以告诉客户端程序传输服务器选择的文件,而不是客户用LOAD DATA 语句

指定的文件。这样服务器可以访问客户端上客户有读访问权限的任何文件。

在 Web 环境中,客户从 Web 服务器连接,用户可以使用 LOAD DATA LOCAL 来读取 Web 服务器进程有读访问权限的任何文件(假定用户可以运行 SQL 服务器的任何命令)。在这种环境中,MySQL 服务器的客户实际上是 Web 服务器,而不是连接 Web 服

务器的用户运行的程序。

解决方法:

可以用--local-infile=0 选项启动 mysqld 从服务器端禁用所有 LOAD DATA

LOCAL 命令。

对于 mysql 命令行客户端,可以通过指定--local-infile[=1]选项启用 LOAD

DATA LOCAL,或通过--local-infile=0 选项禁用。类似地,对于 mysqlimport,--local or -L 选项启用本地数据文件装载。在任何情况下,成功进行本地装载需要服务器启用相关选项。

2.9 使用 MERGE 存储引擎潜藏的安全漏洞

Merge 表在某些版本中可能存在以下安全漏洞:

用户 A 赋予表 T 的权限给用户 B

用户 B 创建一个包含 T 的 merge 表,做各种操作

用户 A 收回对 T 的权限

安全隐患:用户 B 通过 merge 表仍然可以访问表 A 中的数据

--------------------------------------------------------------------------------

相关文章
如何在阿里云上构建高可用应用 2017/1/24 16:08:45
老司机教你用 cpulimit 防止 CPU 过载而翻车 2017/1/24 9:46:39
Linux下chkconfig命令详解 2015/10/9 15:24:32
Linux运维工程师的十个基本技能点 2015/9/21 9:40:09
运维的85条军规 2015/9/21 8:54:31
Linux系统查看CPU使用率的几个命令 2015/9/20 10:28:50
系统架构师经验总结 2014/12/18 15:48:36
大数据领域的顶级开源工具大集合 2014/4/18 10:18:42
TCP/UDP常见端口参考 2013/5/23 15:26:35
Linux下查看Nginx Apache MySQL的并发连接数和连接状态 2013/3/15 17:03:50
SUSE Linux 11里Nginx+Resin+JSP+Memcached+MySQL安装配置整合 2013/3/15 16:59:34
Memcached 安装 2013/3/15 16:46:46
LAMP 环境搭建 2013/3/15 16:44:51
WEB常见攻击及防护 2012/10/17 19:50:43
CentOS yum的详细使用方法 2012/3/29 15:45:49
MySQL Cluster开发环境简明部署 2012/3/28 13:35:11
MySQL 远程连接配置的正确实现 2012/3/28 13:26:53
Postfix配置Q&A 2011/10/22 9:42:16
POSTFIX邮局系统搭建全过程 2011/10/22 9:33:19
Postfix+Dovecot+Roundcube+MySQL架设完整Webmail系统 2011/10/22 8:52:25
最好的windows2003安全设置参考 2010/4/2 14:08:01
详解MySQL数据库授权原则 2010/4/1 10:55:18
MySQL数据库只监听某个特定地址的方法 2008/7/31 9:09:40
使用php-syslog-ng远程查看与管理系统日志 2008/5/15 12:58:08
监视运行缓慢的系统 2008/5/11 18:19:56
mysql常见错误提示及解决方法 2008/4/28 18:53:00
linux 系统管理篇--环境变量 2008/4/28 18:50:45
vsftpd架设匿名FTP,本地用户和虚拟用户mysql登录 2008/4/27 8:23:51
vsftp配置大全---完整版 2008/4/27 8:13:22
Linux软件安装之RPM的安装技巧 2007/5/17 10:49:56
linux common command 2007/2/1 20:13:16
基于FreeBSD5.4全能服务器安装 2007/2/1 17:19:40
用Linux系统防火墙功能抵御网络攻击 2006/12/14 17:28:02
信息技术日志分析产品安全检验规范 2006/12/14 10:31:54
freeradius+mysql为华为防火墙做vpn用户验证 2006/9/4 8:50:45
信息技术日志分析产品安全检验规范 2006/7/29 7:58:46
用snort和空IP做一个安全的log纪录服务器 2006/6/17 11:09:10
基于mysql的bind(bind-9.3.1或更高版本) 2006/6/17 10:07:17
Linux 进程管理 2006/5/12 16:21:51
OpenVPN使用User/Pass验证登录 2006/5/8 14:33:08
vsftp配置大全 2006/5/6 18:17:32
建立一个带宽、线程可控的下载型WEB网站 2006/4/30 13:53:11
用专用Linux日志服务器增强系统安全 2006/4/3 13:37:51
在RedHat9上构建小型的入侵检测系统 2005/9/20 14:14:17
信息安全的隐患-GoogleHacking原理和防范 2005/8/26 10:06:10
主流 Blog 程序 2005/7/28 16:47:07
vsftpd架设匿名FTP,本地用户和虚拟用户mysql登录 2005/6/3 12:12:34
安装Win2003 Server下的Snort 2005/3/24 9:18:42
系统安全名词列表(1) 2004/10/8 9:38:02
Apache2+php4.3.6+MySQL4.0.20+SSL详细配置过程 2004/6/28 17:34:02
linux 下的差异和增量备份 2004/5/26 13:50:31
Linux一句话精彩问答-网络相关篇 2004/5/26 13:44:58
MySQL数据库备份 2004/5/26 13:41:03
Snort 中文手册 2004/1/29 11:53:10
安全的log纪录服务器 2004/1/24 19:17:43
Linux支持ASP 安装配置手册 2004/1/24 19:16:30
LINUX新手入门及安装配置faq200(上) 2003/12/31 20:51:43
linux经典问题==基础篇 2003/10/30 11:19:02
【FAQ】RPM软件包使用常见问题 2003/9/17 8:35:09
常见端口表汇总 2003/9/1 10:31:24
快速建立一个入侵检测系统 2003/8/12 8:39:47
解析Linux网络分析的三大利器 2003/7/30 17:21:18
iptables基础,绝对的基础 2003/7/30 17:17:23
Linux服务器架设实例 2003/7/30 17:06:11
构建小型的入侵检测系统(RedHat9) 2003/7/30 16:50:32
Linux新手入门教程 2003/5/16 23:18:21
Redhat Linux 8.0工作站服务加载列表解释 2003/5/5 13:33:38
PHP新手上路 2003/4/27 11:50:38
PHP的十个高级技巧 2003/4/27 11:04:11
PHP中执行系统外部命令 2003/4/27 10:57:29
构建基于 LDAP 的地址簿 2003/4/2 19:56:44
linux99问 2003/3/11 18:37:18
Linux简明系统维护手册 2003/3/11 18:35:40
搞清linux的用户和组-基础篇 2003/2/22 14:33:20
Linux简明系统维护手册3 2003/2/18 19:44:15
一个网上理财站点的设计(十五) 2003/2/1 13:55:11
一个网上理财站点的设计(十七) 2003/2/1 13:54:17
一个网上理财站点的设计(十六) 2003/2/1 13:53:20
一个网上理财站点的设计(十四) 2003/2/1 13:52:17
一个网上理财站点的设计(十三) 2003/2/1 13:51:25
网站综合实例 2003/1/25 20:42:08
一个网上理财站点的设计(十二) 2003/1/19 22:19:18
一个网上理财站点的设计(十一) 2003/1/19 22:18:39
一个网上理财站点的设计(十) 2003/1/19 22:17:46
一个网上理财站点的设计(九) 2003/1/19 22:17:02
一个网上理财站点的设计(八) 2003/1/19 22:16:11
一个网上理财站点的设计(七) 2003/1/19 22:14:54
一个网上理财站点的设计(六) 2003/1/19 22:14:08
一个网上理财站点的设计(五) 2003/1/19 22:13:14
一个网上理财站点的设计(四) 2003/1/19 22:11:38
一个网上理财站点的设计(三) 2003/1/19 22:10:41
一个网上理财站点的设计(二) 2003/1/19 22:09:45
一个网上理财站点的设计(一) 2003/1/19 22:07:43
linux网站综合实例 2003/1/19 22:05:29
一个mm面试得经验 2002/11/11 9:49:36


感性空间
设计&运维
网络技术
休闲娱乐
NetFilter
linux&Unix
网络安全
程序空间
软件考试
RFC&ISO
规划&规范
虚拟&存储
Apple技巧
云计算&大数据



文章搜索



站内搜索