日期:2011-05-02 15:22:00 来源:本站整理
MySQL安全性指南 (1)(转)[MSSQL防范]
本文“MySQL安全性指南 (1)(转)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
MySQL安全性指南
作 者: 晏子
作为一个MySQL的系统管理员,你有责任保护你的MySQL数据库系统的数据安全性和完好性.本文主要主要介绍若何成立一个安全的MySQL系统,从系统内部和外部网络两个角度,为你供应一个指南.
本文主要考虑下列安全性有关的问题:
为什么安全性很重要,你应当防备那些攻击?
服务器面对的风险(内部安全性),若何处理?
衔接服务器的客户端风险(外部安全性),若何处理?
MySQL管理员有责任保证数据库内容的安全性,使得这些数据记录只能被那些精确受权的用户拜候,这触及到数据库系统的内部安全性和外部安全性.
内部安全性关心的是文件系统级的问题,即,避免MySQL数据目录(DATADIR)被在服务器主机有账号的人(合理或盗取的)举行攻击.假如数据目录内容的权限过度授与,使得每个人均能简单地替换对应于那些数据库表的文件,那么确保掌握客户通过网络拜候的受权表设置精确,对此毫无意义.
外部安全性关心的是从外部通过网络衔接服务器的客户的问题,即,保护MySQL服务器免受来自通过网络对服务器的衔接的攻击.你必须设置MySQL受权表(grant table),使得他们不答应拜候服务器管理的数据库内容,除非供应有效的用户名和口令.
下面就具体介绍若何设置文件系统和受权表mysql,实现MySQL的两级安全性.
1、内部安全性-保证数据目录拜候的安全
MySQL服务器通过在MySQL数据库中的受权表供应了一个机动的权限系统.你可以设置这些表的内容,答应或回绝客户对数据库的拜候,这供应了你避免未受权的网络拜候对你数据库攻击的安全手段,但是假如主机上其他用户能直接拜候数据目录内容,成立对通过网络拜候数据库的杰出安全性对你毫无帮忙,除非你知道你是登录MySQL服务器运行主机的唯一用户,不然你需求关心在这台机械上的其他用户得到对数据目录的拜候的大概性.
以下是你应当保护的内容:
数据库文件.很明显,你要保护服务器管理的数据库的私用性.数据库拥有者普通并且应当考虑数据库内容的安全性,即便他们不想,也应当考虑时数据库内容公蛮横,而不是通过糟糕的数据目录的安全性来表露这些内容.
日记文件.普通和更新日记必须保证安全,因为他们包含查询文本.对日记文件有拜候权限的任何人可以监督数据库举行过的操作.
更要重点考虑的日记文件安全性是诸如GRANT和SET PASSword等的查询也被记录了,普通和更新日记包含有敏感查询的文本,包含口令(MySQL利用口令加密,但它在已经完成设置后才应用于今后的衔接成立.设置一个口令的历程计划象GRANT或SET PASSWORD等查询,并且这些查询以普通文本情势记录在日记文件中).假如一个攻击者犹如日文件的读权限,只需在日记文件上运行grep探求诸如GRANT和PASSWORD等词来发现敏感信息.
明显,你不想让服务器主机上的其他用户有数据库目录文件的写权限,因为他们可以重写你的状况文件或数据库表文件,但是读权限也很危险.假如一个数据库表文件能被读取,盗取文件并得到MySQL本身,以普通文本显示表的内容也很麻烦,为什么?因为你要做下列事情:
在服务器主机上安装你自己"特制"的MySQL服务器,但是有一个差别于官方服务器版本的端口、套接字和数据目录.
运行mysql_install_db初始化你的数据目录,这赋予你作为MySQL root用户拜候你的服务器的权限,所以你有对服务器拜候机制的完好掌握,它也成立一个test数据库.
将对应于你想偷获得表文件拷贝到你服务器的数据库目录下的test目录.
启动你的服务器.你可以随便拜候数据库表,SHOW TABLES FROM test显示你有一个偷来的表的拷贝,SELECT *显示它们任何一个的全部内容.
假如你确切很毒辣,将权限公开给你服务器的任何匿名用户,这样任何人能从任何地方衔接服务器拜候你的test数据库.你目前将偷来的数据库表公布于众了.
在考虑一下,从相反的角度,你想让别人对你这样吗?当然不!你可以通过在数据库录下履行ls -l号令肯定你的数据库能否包含不安全的文件和目录.查找有"组"和"其他用户"权限设置的文件和目录.下面是一个不安全数据目录的一部份列出:
% ls -l
total 10148
drwxrwxr-x 11 mysqladm wheel 1024 May 8 12:20 .
drwxr-xr-x 22 root wheel 512 May 8 13:31 ..
drwx------ 2 mysqladm mysqlgrp 512 Apr 16 15:57 menagerie
drwxrwxr-x 2 mysqladm wheel 512 Jan 25 20:40 mysql
drwxrwxr-x 7 mysqladm wheel 512 Aug 31 1998 sql-bench
drwxrwxr-x 2 mysqladm wheel 1536 May 6 06:11 test
drwx------ 2 mysqladm mysqlgrp 1024 May 8 18:43 tmp
....
正如你看到的,有些数据库有精确的权限,而其他不是.本例的情形是经过一段时间后的后果.较少限制的权限由在权限设置方面比更新版本更不严峻的较早版本服务器设置的(注意更具限制的目录menageria和tmp都有较近日期).MySQL当前版本确保这些文件只能由运行服务器的用户读取.
让我们来改正这些权限,使得只用服务器用户可拜候它们.你的主要保护工具来自于由Unix文件系统本身供应的设置文件和目录属主和情势的工具.下面是我们要做的:
进入该目录
% cd DATADIR
设置全部在数据目录下的文件属主为由用于运行服务器的账号拥有(你必须以root履行这步).在本文利用mysqladm和mysqlgrp作为该账号的用户名和组名.你可以利用下列号令之一改变属主:
# chown mysqladm.mysqlgrp .
# find . -follow -type d -print | xargs chown mysqladm.mysqlgrp
设置你的数据目录和数据库目录的情势使得他们只能由mysqladm读取,这禁止其他用户拜候你数据库目录的内容.你可以用下列号令之一以root或mysqladm身份运行.
% chmod -R go-rwx .
% find . -follow -type d -print | xargs chmod go-rwx
数据目录内容的属主和情势为mysqladm设置.目前你应当保证你老是以mysqladm用户运行服务器,因为目前这是唯一由拜候数据库目录权限的用户(除root).
在完成这些设置后,你终究应当得到下面的数据目录权限:
% ls -l
total 10148
drwxrwx--- 11 mysqladm mysqlgrp 1024 May 8 12:20 .
drwxr-xr-x 22 root wheel 512 May 8 13:31 ..
drwx------ 2 mysqladm mysqlgrp 512 Apr 16 15:57 menagerie
drwx------ 2 mysqladm mysqlgrp 512 Jan 25 20:40 mysql
drwx------ 7 mysqladm mysqlgrp 512 Aug 31 1998 sql-bench
drwx------ 2 mysqladm mysqlgrp 1536 May 6 06:11 test
drwx------ 2 mysqladm mysqlgrp 1024 May 8 18:43 tmp
....
2、外部安全性-保证网络拜候的安全
MySQL的安全系统是很机动的,它答应你以多种差别方法设置用户权限.普通地,你可以利用尺度的SQL语句GRANT和REVOKE语句做,他们为你改正掌握客户拜候的受权表,但是,你大概由一个不支持这些语句的老版本的MySQL(在3.22.11之前这些语句不起作用),大概你发觉用户权限看起来不是以你想要的方法工作.关于这种情形,理解MySQL受权表的构造和服务器若何操纵它们决意拜候权限是有帮忙的,这样的理解答应你通过直接改正受权表增添、删除或改正用户权限,它也答应你在查抄这些表时诊断权限问题.
关于若何管理用户账号,见《MySQL的用户管理》.而对GRANT和REVOKE语句具体描写,见《MySQL参考手册》.
2.1 MySQL受权表的构造和内容
通过网络衔接服务器的客户对MySQL数据库的拜候由受权表内容来掌握.这些表位于mysql数据库中,并在第一次安装MySQL的历程中初始化(运行mysql_install_db脚本).受权表共有5个表:user、db、host、tables_priv和columns_priv.
表1 user、db和host受权表构造
拜候范围列
user db host
Host Host Host
User Db Db
Password User
数据库/表权限列
Alter_priv Alter_priv Alter_priv
Create_priv Create_priv Create_priv
Delete_priv Delete_priv Delete_priv
Drop_priv Drop_priv Drop_priv
Index_priv Index_priv Index_priv
Insert_priv Insert_priv Insert_priv
References_priv References_priv References_priv
Select_priv Select_priv Select_priv
Update_priv Update_priv Update_priv
File_priv Grant_priv Grant_priv
Grant_priv
Process_priv
Reload_priv
Shutdown_priv
表2 tables_priv和columns_priv属权表构造
拜候范围列
tables_priv columns_priv
Host Host
Db Db
User User
Table_name Table_name
Column_name
权限列
Table_priv Column_priv
受权表的内容有以下用处:
user表
user表列出可以衔接服务器的用户及其口令,并且它指定他们有哪类全局(超级用户)权限.在user表启用的任何权限均是全局权限,并实用于全部数据库.比方,假如你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑.
db表
db表列出数据库,而用户有权限拜候它们.在这里指定的权限实用于一个数据库中的全部表.
host表
host表与db表结合利用在一个较好层次上掌握特定主机对数据库的拜候权限,这大概比单独利用db好些.这个表不受GRANT和REVOKE语句的影响,所以,你大概发觉你根本不是用它.
tables_priv表
tables_priv表指定表级权限,在这里指定的一个权限实用于一个表的全部列.
columns_priv表
columns_priv表指定列级权限.这里指定的权限实用于一个表的特定列.
在"不用GRANT设置用户"一节里,我们再谈论GRANT语句若何对改正这些表起作用,和你怎样能通过直接改正受权表到达一样的效果.
tables_priv和columns_priv表在MySQL 3.22.11版引进(与GRANT语句同时).假如你有较早版本的MySQL,你的mysql数据库将只有user、db和host表.假如你从老版本进级到3.22.11或更新,而没有tables_priv和columns_priv表,运行mysql_fix_privileges_tables脚本成立它们.
MySQL没有rows_priv表,因为它不供应记录级权限,比方,你不能限制用户于表中包含特定列值的行.假如你确切需求这种本领,你必须用利用编程来供应.假如你想履行倡议的记录级锁定,你可用GET_LOCK()函数做到.
受权表包含两种列:决意一个权限什么时刻应用的范围列和决意授与哪类权限的权限列.
2.1.1 受权表范围列
受权表范围列指定表中的权限什么时刻应用.每个受权表条目包含User和Host列来指定权限什么时刻应用于一个给定用户从给定主机的衔接.其他表包含附加的范围列,如db表包含一个Db列指出权限应用于哪个数据库.近似地,tables_priv和columns_priv表包含范围字段,缩小范围到一个数据库中的特定表或一个表的特定列.
2.1.2 受权表权限列
受权表还包含权限列,他们指出在范围列中指定的用户拥有何种权限.由MySQL支持的权限以下表所示.该表利用GRANT语句的权限名称.关于绝大大都在user、db和host表中的权限列的名称与GRANT语句中有明显的接洽.如Select_priv对应于SELECT权限
以上是“MySQL安全性指南 (1)(转)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论