仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 798|回复: 8
打印 上一主题 下一主题

[学习教程] 公布MySQL平安性指南 (1)(转)

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:08:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
怀疑这些功能在MySQL5.0中的成熟性。充其量它们在MySQL中被支持的时间也就一年左右,而在MySQL学习教程其他关系型数据库中则已经存在了近10年的时间。MySQL平安性指南
晏子


作为一个MySQL的体系办理员,你有义务保护你的MySQL数据库体系的数据平安性和完全性。本文次要次要先容怎样创建一个平安的MySQL体系,从体系外部和内部收集两个角度,为你供应一个指南。

本文次要思索以下平安性有关的成绩:

为何平安性很主要,你应当提防那些打击?
服务器面对的风险(外部平安性),怎样处置?
毗连服务器的客户端风险(内部平安性),怎样处置?
MySQL办理员有义务包管数据库内容的平安性,使得这些数据纪录只能被那些准确受权的用户会见,这触及到数据库体系的外部平安性和内部平安性。
外部平安性体贴的是文件体系级的成绩,即,避免MySQL数据目次(DATADIR)被在服务器主机有账号的人(正当或夺取的)举行打击。假如数据目次内容的权限太过授与,使得每一个人均能复杂地替换对应于那些数据库表的文件,那末确保把持客户经由过程收集会见的受权表设置准确,对此毫偶然义。

内部平安性体贴的是从内部经由过程收集毗连服务器的客户的成绩,即,回护MySQL服务器免受来自经由过程收集对服务器的毗连的打击。你必需设置MySQL受权表(granttable),使得他们不同意会见服务器办理的数据库内容,除非供应无效的用户名和口令。

上面就具体先容怎样设置文件体系和受权表mysql,完成MySQL的两级平安性。


1、外部平安性-包管数据目次会见的平安
MySQL服务器经由过程在MySQL数据库中的受权表供应了一个天真的权限体系。你能够设置这些表的内容,同意或回绝客户对数据库的会见,这供应了你避免未受权的收集会见对你数据库打击的平安手腕,但是假如主机上其他用户能间接会见数据目次内容,创建对经由过程收集会见数据库的优秀平安性对你毫无匡助,除非你晓得你是登录MySQL服务器运转主机的独一用户,不然你必要体贴在这台呆板上的其他用户取得对数据目次的会见的大概性。

以下是你应当回护的内容:

数据库文件。很分明,你要保护服务器办理的数据库的私用性。数据库具有者一般而且应当思索数据库内容的平安性,即便他们不想,也应当思索时数据库内容公然化,而不是经由过程糟的数据目次的平安性来表露这些内容。
日记文件。一样平常和更新日记必需包管平安,由于他们包括查询文本。对日记文件有会见权限的任何人能够监督数据库举行过的操纵。
更要重点思索的日记文件平安性是诸如GRANT和SETPASSWord等的查询也被纪录了,一样平常和更新日记包括有敏感查询的文本,包含口令(MySQL利用口令加密,但它在已完成设置后才使用于今后的毗连创建。设置一个口令的历程计划象GRANT或SETPASSWORD等查询,而且这些查询以一般文本情势纪录在日记文件中)。假如一个打击者如同日文件的读权限,只需在日记文件上运转grep寻觅诸如GRANT和PASSWORD等词来发明敏感信息。
明显,你不想让服务器主机上的其他用户无数据库目次文件的写权限,由于他们能够重写你的形态文件或数据库表文件,可是读权限也很伤害。假如一个数据库表文件能被读取,盗取文件并失掉MySQL自己,以一般文本显现表的内容也很贫苦,为何?由于你要做以下事变:

在服务器主机上安装你本人“特制”的MySQL服务器,可是有一个分歧于官方服务器版本的端口、套接字和数据目次。
运转mysql_install_db初始化你的数据目次,这付与你作为MySQLroot用户会见你的服务器的权限,以是你有对服务器会见机制的完整把持,它也创建一个test数据库。
将对应于你想盗取得表文件拷贝到你服务器的数据库目次下的test目次。
启动你的服务器。你能够随便会见数据库表,SHOWTABLESFROMtest显现你有一个偷来的表的拷贝,SELECT*显现它们任何一个的全体内容。
假如你的确很狠毒,将权限公然给你服务器的任何匿名用户,如许任何人能从任何中央毗连服务器会见你的test数据库。你如今将偷来的数据库表发布于众了。
在思索一下,从相反的角度,你想让他人对你如许吗?固然不!你能够经由过程在数据库录下实行ls-l命令断定你的数据库是不是包括不平安的文件和目次。查找有“组”和“其他用户”权限设置的文件和目次。上面是一个不平安数据目次的一部排列出:

 
%ls-l
total10148
drwxrwxr-x11mysqladmwheel1024May812:20.
drwxr-xr-x22rootwheel512May813:31..
drwx------2mysqladmmysqlgrp512APR1615:57menagerie
drwxrwxr-x2mysqladmwheel512Jan2520:40mysql
drwxrwxr-x7mysqladmwheel512Aug311998sql-bench
drwxrwxr-x2mysqladmwheel1536May606:11test
drwx------2mysqladmmysqlgrp1024May818:43tmp
....


正如你看到的,有些数据库有准确的权限,而其他不是。本例的情况是经由一段工夫后的了局。较少限定的权限由在权限设置方面比更新版本更不严厉的较早版本服务器设置的(注重更具限定的目次menageria和tmp都有较克日期)。MySQL以后版本确保这些文件只能由运转服务器的用户读取。

让我们来修改这些权限,使得只用服务器用户可会见它们。你的次要回护工具来自于由UNIX文件体系自己供应的设置文件和目次属主和形式的工具。上面是我们要做的:

进进该目次
%cdDATADIR

设置一切在数据目次下的文件属主为由用于运转服务器的账号具有(你必需以root实行这步)。在本文利用mysqladm和mysqlgrp作为该账号的用户名和组名。你可使用以下命令之一改动属主:
#chownmysqladm.mysqlgrp.

#find.-follow-typed-print|xargschownmysqladm.mysqlgrp

设置你的数据目次和数据库目次的形式使得他们只能由mysqladm读取,这制止其他用户会见你数据库目次的内容。你能够用以下命令之一以root或mysqladm身份运转。
%chmod-Rgo-rwx.

%find.-follow-typed-print|xargschmodgo-rwx

数据目次内容的属主和形式为mysqladm设置。如今你应当包管你老是以mysqladm用户运转服务器,由于如今这是独一由会见数据库目次权限的用户(除root)。
在完成这些设置后,你终极应当失掉上面的数据目次权限:

%ls-l
total10148
drwxrwx---11mysqladmmysqlgrp1024May812:20.
drwxr-xr-x22rootwheel512May813:31..
drwx------2mysqladmmysqlgrp512Apr1615:57menagerie
drwx------2mysqladmmysqlgrp512Jan2520:40mysql
drwx------7mysqladmmysqlgrp512Aug311998sql-bench
drwx------2mysqladmmysqlgrp1536May606:11test
drwx------2mysqladmmysqlgrp1024May818:43tmp
....



2、内部平安性-包管收集会见的平安
MySQL的平安体系是很天真的,它同意你以多种分歧体例设置用户权限。一样平常地,你可以使用尺度的SQL语句GRANT和REVOKE语句做,他们为你修正把持客户会见的受权表,但是,你大概由一个不撑持这些语句的老版本的MySQL(在3.22.11之前这些语句不起感化),大概你觉察用户权限看起来不是以你想要的体例事情。关于这类情形,懂得MySQL受权表的布局和服务器怎样使用它们决意会见权限是有匡助的,如许的懂得同意你经由过程间接修正受权表增添、删除或修正用户权限,它也同意你在反省这些表时诊断权限成绩。

关于怎样办理用户账号,见《MySQL的用户办理》。而对GRANT和REVOKE语句具体形貌,见《MySQL参考手册》。

2.1MySQL受权表的布局和内容
经由过程收集毗连服务器的客户对MySQL数据库的会见由受权表内容来把持。这些表位于mysql数据库中,并在第一次安装MySQL的过程当中初始化(运转mysql_install_db剧本)。受权表共有5个表:user、db、host、tables_priv和columns_priv。

表1user、db和host受权表布局
会见局限列

userdbhost
HostHostHost
UserDbDb
PasswordUser
数据库/表权限列
Alter_privAlter_privAlter_priv
Create_privCreate_privCreate_priv
Delete_privDelete_privDelete_priv
Drop_privDrop_privDrop_priv
Index_privIndex_privIndex_priv
Insert_privInsert_privInsert_priv
References_privReferences_privReferences_priv
Select_privSelect_privSelect_priv
Update_privUpdate_privUpdate_priv
File_privGrant_privGrant_priv
Grant_priv
Process_priv
Reload_priv
Shutdown_priv
 
表2tables_priv和columns_priv属权表布局

会见局限列
tables_privcolumns_priv
HostHost
DbDb
UserUser
Table_nameTable_name
Column_name
权限列
Table_privColumn_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表在MySQL3.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的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。
若天明 该用户已被删除
沙发
发表于 2015-1-18 18:09:08 | 只看该作者
一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)
简单生活 该用户已被删除
板凳
发表于 2015-1-27 14:57:02 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
深爱那片海 该用户已被删除
地板
发表于 2015-2-5 12:05:28 | 只看该作者
大家注意一点。如下面的例子:
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-11 20:09:42 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
金色的骷髅 该用户已被删除
6#
发表于 2015-3-2 18:27:30 | 只看该作者
不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关
再现理想 该用户已被删除
7#
发表于 2015-3-11 05:42:16 | 只看该作者
两个月啃那本sqlserver2005技术内部-存储引擎,花了几个月啃四本书
莫相离 该用户已被删除
8#
发表于 2015-3-17 21:34:12 | 只看该作者
再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。
小魔女 该用户已被删除
9#
发表于 2015-3-25 03:32:50 | 只看该作者
groupby子句可以将查询结果分组,并返回行的汇总信息Oracle按照groupby子句中指定的表达式的值分组查询结果。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 02:32

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表