| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 网络赚钱 | 网站地图 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
|
作 者: 晏子
alter file grant reload 在tables_priv表中的table_priv列被定义成: set('select','insert','update','delete','create','drop','grant','references','index','alter') set('select','insert','update','references') user表包含某些在其他授权表不存在的权限的列:file_priv、process_priv、reload_priv和shutdown_priv。这些权限运用于你让服务器执行的与任何特定数据库或表不相关的操作。如允许一个用户根据当前数据库是什么来关闭数据库是毫无意义的。 2.2 服务器如何控制客户访问 本小节详细介绍mysql服务器用于将授权表条目匹配到来的连接请求或查询的原则,这包括在授权表范围列中合法的值的类型、结合授权表中的权限信息的方式和表中条目被检查的次序。 2.2.1 范围列内容 host 你也可以用通配符指定host值。可以使用sql的模式字符“%”和“_”并具有当你在一个查询中使用like算符同样的含义(不允许regex算符)。 sql模式字符都能用于主机名和ip地址。如%wisc.edu匹配任何wisc.edu域内的主机,而%.edu匹配任何教育学院的主机。类似地,192.168.%匹配任何在192.168 b类子网的主机,而192.168.3.%匹配任何在192.168.3 c类子网的主机。 %值匹配所有主机,并可用于允许一个用户从任何地方连接。一个空白的host值等同于%。(例外:在db表中,一个空白host值含义是“进一步检查host表”,该过程在“查询访问验证”中介绍。) 从mysql 3.23起,你也可以指定带一个表明那些为用于网络地址的网络掩码的ip地址,如192.168.128.0/17指定一个17位网络地址并匹配其ip地址是192.168128前17位的任何主机。 user 当一个到来的连接通过user表被验证而匹配的记录包含一个空白的user值,客户被认为是一个匿名用户。 password 口令以一个加密过的值存储,不是一个字面上的文本。如果你在password列中存储一个照字面上的口令,用户将不能连接!grant语句和mysqladmin password命令为你自动加密口令,但是如果你用诸如insert、replace、update或set password等命令,一定要用password("new_password")而不是简单的"new_password"来指定口令。 db 表3 授权表范围列的大小写敏感性
服务器检查user表匹配你开始连接的记录以查看你有什么全局权限。如果你有并且它们对查询足够了,服务器则执行它。 user or tables_priv or columns_priv 你可能疑惑为什么前面的描述只引用4个授权表,而实际上有5个。实际上服务器是这样检查访问权限: user or (db and host) or tables_priv or columns_priv 第一个较简单的表达式是因为host表不受grant和revoke语句影响。如果你总是用grant和revoke管理用户权限,你绝不需要考虑host表。但是其工作原理你用该知道: 当服务器检查数据库级权限时,它对于客户查找db表。如果host列是空的,它意味着“检查host表以找出哪一个主机能访问数据库”。 前面的描述毫无疑问使访问检查听起来一个相当复杂的过程,特别是你以为服务器对你发出的每个查询进行权限检查,然而此过程是很快的,因为服务器其实不从授权表对每个查询查找信息,相反,它在启动时将表的内容读入内存,然后验证查询用的是内存中的副本。这大大提高了访问检查操作的性能。但有一个非常明显的副作用。如果你直接修改授权表的内容,服务器将不知道权限的改变。 例如,如果你用一条insert语句向user表加入一个新记录来增加一个新用户,命名在记录中的用户将不能连接服务器。这对管理员新手(有时对有经验的老手)是很困惑的事情,当时解决方法很简单:在你改变了它们之后告诉服务器重载授权表内容,你可以发一条flush privileges或执行mysqladmin flush-privileges(或如果你有一个不支持flush-privileges的老版本,用mysqladmin reload。)。 2.2.3 范围列匹配顺序 当服务器读取user表内容时,它根据在host和user列中的值排序记录,host值起决定作用(相同的host值排在一起,然后再根据user值排序)。然而,排序不是典序(按词排序),它只是部分是。要牢记的是字面上的词优先于模式。这意味着如果你正从client.your.net连接服务器而host有client.your.net和%.your.net两个值,则第一个先选。类似地,%.your.net优先于%.net,然后是%。ip地址的匹配也是这样的。 总之一句话,越具体越优先。可以参见本文附录的实例。 2.3 避免授权表风险 不要授予对mysql数据库的权限。一个拥有包含授权表数据库权限的用户可能会修改表以获取对其他任何数据库的权限。授予允许一个用户修改mysql数据库表的权限也实际上给了用户以一个全局grant权限。如果用户能直接修改表,这也等价于能够发出任何你能想象的任何grant语句。 file权限尤其危险,不要轻易授权它。以下是一个拥有file权限的人能干除的事情: create table etc_passwd (pwd_entry text); 在发出这些语句后,用户已经拥有了你的口令文件的内容了。实际上,服务器上任何公开可读文件的内容都可被拥有file权限的用户通过网络访问。 file权限也能被利用来危害没有设置足够权限制的文件权限的系统上的数据库。这就是你为什么应该设置数据目录只能由服务器读取的原因。如果对应于数据库表的文件可被任何人读取,不只是用户服务器账号的用户可读,任何有file权限的用户也可通过网络连接并读取它们。下面演示这个过程: 创建一个有一个longblob列的表: 使用该表读取每个对应于你想偷取的数据库表文件的内容,然后将表内容写入你自己数据库的一个文件中: load data infile "./other_db/x.frm" into table tmp alter权限能以不希望的方式使用。假定你想让user1可以访问table1但不能访问tables2。一个拥有alter权限的用户可以通过使用alter table将table2改名为table1来偷梁换柱。 当心grant权限。两个由不同权限但都有grant权限的用户可以使彼此的权利更强大。 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:mysql安全性指南 (1)(转) 下一篇:mysql安全性指南(3)(转) 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||