4.2.1 帐号权限
名称:
数据库帐号管理
实施目的:
避免数据库系统用户出现漏洞被攻击
问题影响:
越权操作数据信息泄露
系统当前状态:
实施步骤:
1、修改root用户口令,删除空口令;
2、删除默认数据库和数据库用户;
MySQL初始化后会自动生成空用户和test库,进行安装的测试,这会对数据库的安全构成威胁,有必要全部删除,最后的状态只保留单个root;
3、改变默认mysql管理员帐号;
4、关于密码的管理;
使用MD5()、SHA1()或单向哈希函数针对数据库用户口令加密
回退方案:
4.2.2 漏洞补丁
名称:
补丁修复
实施目的:
升级MySQL修复漏洞
问题影响:
容易引起恶意攻击。
系统当前状态:
通过mysql查看版本
实施步骤:
到http://bugs.mysql.com/下载新版本的mysql公开的漏洞和bug,省级补丁。
回退方案:
升级补丁的风险极高,如当前版本没有漏洞不建议升级
4.2.3使用chroot运行mysql
名称:
使用chroot运行mysql
实施目的:
chroot是linux中的系统高级保护手段,它的建立会将其与主系统几乎完全隔离,避免系统遭到什么问题,危及到正在运行的主系统。
问题影响:
造成用户非法越权访问
系统当前状态:
#chrootuid /chroot/mysql mysql /usr/local/mysql/libexec/mysqld &
实施步骤:
以chrooting方式安装和配置MySQL,详见MySQL安装配置手册
回退方案:
无
4.2.4 MySQL数据访问权限控制
名称:
限定用户的数据访问权限
实施目的:
MySQL权限系统的主要功能是验证登陆用户,并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE等权限,管理员可以对user,db,host,tables_priv,columns_priv等表进行配置,来控制用户的访问权限。
Mysql。user表:权限是超级用户权限
mysql.db和mysql.host表:权限是针对数据库级别的权限;
mysql.tables_priv表:表级别权限作用于一个给定表的所有列;
mysql.columns_priv表:列级别作用于在一个给定表的单个列;
针对不同的用户类型采用不同的授权方式将会提升数据库的安全级别。
问题影响:
造成用户非法越权访问
系统当前状态:
通过” show grants for dba@localhost”确定用户的权限
实施步骤:
根据业务需求和安全需求,通过mysql命令授予给用户数据库、方案、表、列甚至存储过程的操作权限。
回退方案:
恢复备份数据库
备注:
1. grant 作用在整个 MySQL 服务器上:
mysql>grant select on *.* to dba@localhost; -- dba 可以查询
MySQL 中所有数据库中的表。
mysql>grant allon *.* to dba@localhost; -- dba 可以管理
MySQL 中的所有数据库
2. grant 作用在单个数据库上:
mysql>grant select on testdb.* to dba@localhost; -- dba 可以查 询 testdb 中的表。
3. grant 作用在单个数据表上:
mysql>grant select, insert, update, delete on testdb.orders to dba@localhost;
4. grant 作用在表中的列上:
mysql>grant select(id, se, rank) on testdb.apache_log to dba@localhost;
5. grant 作用在存储过程、函数上:
mysql>grant execute on procedure testdb.pr_add to 'dba'@'localhost'
mysql>grant execute on function testdb.fn_add to 'dba'@'localhost’
收回权限:
mysql>revoke all on *.* from dba@localhost;
4.2.5 禁止MySQL对本地文件存取
名称:
禁止MySQL存取本地文件
实施目的:
在mysql中,提供对本地文件的读取,使用的是loaddatalocalinfile命令,默认在5.0版本中,该选项是默认打开的。这样容易造成信息泄露。
问题影响:
造成用户非法访问,非法获取敏感信息
系统当前状态:
查看my.cnf中local-infile参数,如果是1代码允许读取本地文件
实施步骤:
在my.cnf中添加local-infile=0,或者加参数local-infile=0启动mysql。
回退方案:
恢复my.cnf或者在启动选项中去掉--local-infile=0
备注:
验证方法:
#mysql> load data local infile test.txt' into table users fields terminated by ',';
#ERROR 1148 (42000): The used command is not allowed with this MySQL version QLversion
4.2.6 限制远程连接数据库
名称:
限制用户远程连接数据库实例
实施目的:
限定访问用户的IP地址,保证数据安全
问题影响:
造成用户非法访问
系统当前状态:
查询数据库中的user表,确定用户是否访问数据是否受限制
实施步骤:
在linux系统MySQL的访问权限默认只针对本机开放,为了增加管理机器或中间件服务器的连接需要在MySQL增加对应的用户,限定该用户只能通过固定IP访问服务器。
回退方案:
恢复备份的MySQL用户表
备注:
Note 1:
如果 MySQL 是在本地使用可以关闭 TCP/IP 监听,系统需要启用
skip-networking,不监听 sql 的任何 TCP/IP 的连接,切断远程访问的权利。操作如下:
# vi /etc/my.cf
将#skip-networking 注释去掉
Note 2:
增加用户,限定只能通过 192.168.180.23 连接数据库
mysql> Grant all privileges on *.* to 'root'@'192.168.180.23'
identified by ‘password’with grant option;
mysql> flush privileges;
4.2.7 使用独立用户运行Msyql
名称:
以特定用户运行服务
实施目的:
以特定用户运行服务,不要使用系统管理员帐号启动MySQL。
问题影响:
越权使用造成非法攻击
系统当前状态:
通过系统命令或工具查看mysql后台进程适用独立的用户运行
实施步骤:
在linux系统中使用其它用户启动mysqld,在/etc/my.cnf配置文件或服务器数据目录的my.cnf配置文件中的[mysqld]组的用户名。
[mysqld]
user=mysql
或者在启动数据库时候加上user参数:--user=mysql
回退方案:
恢复my.cnf文件,重启MySQL
4.2.8删除历史命令记录
名称:
删除历史命令记录
实施目的:
在linux/unix系统中数据库相关的shell操作命令都会分别记录在.bash_history,如果这些文件不慎被读取,会导致数据库密码和数据库结构等信息泄露。
问题影响:
信息泄露非法攻击
系统当前状态:
通过系统命令查看命令执行历史纪录
实施步骤:
用户登陆数据库服务器后的操作将记录在.mysql_history文件中,如果使用update表信息来修改数据库用户密码的话,也会被读取密码,因此需要删除这两个文件。
回退方案:
rm.bash_history.mysql_history//删除历史记录
ln-s/dev/null.bash_history//将shell记录文件置空
ln-s/dev/null.mysql_history//将mysql记录文件置空