站长学堂
你的位置: 中国个人站长站 -- 站长学堂 -- 数据库 -- MySQL教程 -- 文章正文 MySQL安全性指南 (2)(转)
推荐位

MySQL安全性指南 (2)(转)

中国个人站长站 MySQL教程 点击数: 更新时间:2005-3-13 17:20:10
   CREATE TABLE etc_passwd (pwd_entry TEXT);
    LOAD DATA INFILE "/etc/passwd" into TABLE etc_passwd;
    SELECT * FROM etc_passwd;

在发出这些语句后,用户已经拥有了你的口令文件的内容了。实际上,服务器上任何公开可读文件的内容都可被拥有FILE权限的用户通过网络访问。

FILE权限也能被利用来危害没有设置足够权限制的文件权限的系统上的数据库。这就是你为什么应该设置数据目录只能由服务器读取的原因。如果对应于数据库表的文件可被任何人读取,不只是用户服务器账号的用户可读,任何有FILE权限的用户也可通过网络连接并读取它们。下面演示这个过程:

创建一个有一个LONGBLOB列的表:
USER test;
CREATE TABLE tmp (b LONGBLOB);

使用该表读取每个对应于你想偷取的数据库表文件的内容,然后将表内容写入你自己数据库的一个文件中:

LOAD DATA INFILE "./other_db/x.frm" INTO TABLE tmp
     FIELDS ESCAPED BY "" LINES TERMINATED BY "";
SELECT * FROM tmp INTO OUTFILE "y.frm"
     FIELDS ESCAPED BY "" LINES TERMINATED BY "";
DELETE FROM tmp;
LOAD DATA INFILE "./other_db/x.ISD" INTO TABLE tmp
     FIELDS ESCAPED BY "" LINES TERMINATED BY "";
SELECT * FROM tmp INTO OUTFILE "y.ISD"
     FIELDS ESCAPED BY "" LINES TERMINATED BY "";
DELETE FROM tmp;
LOAD DATA INFILE "./other_db/x.ISM" INTO TABLE tmp
     FIELDS ESCAPED BY "" LINES TERMINATED BY "";
SELECT * FROM tmp INTO OUTFILE "y.ISM"
现在你拥有了一个新表y,它包含other_db.x的内容并且你有全权访问它。
为避免让人以同样的方式攻击,根据“第一部分 内部安全性-保护你的数据目录”中的指令设置你的数据目录上的权限。你也可以在你启动服务器时使用--skip-show-database选项限制用户对于他们没用访问权限的数据库使用SHOW DATABASES和SHOW TABLES。这有助于防止用户找到关于它们不能访问的数据库和表的信息。

ALTER权限能以不希望的方式使用。假定你想让user1可以访问table1但不能访问tables2。一个拥有ALTER权限的用户可以通过使用ALTER TABLE将table2改名为table1来偷梁换柱。

当心GRANT权限。两个由不同权限但都有GRANT权限的用户可以使彼此的权利更强大。

上一页  [1] [2] [3] [4] 

SQL爱好者 网友投稿 文章录入:swh    责任编辑:swh 
个人站长站与你风雨同舟!
本站所提供的资源均来源于互联网,如有侵权行为,请与本站管理员联系,我们会第一时间删除!
·如果您发现《MySQL安全性指南 (2)(转)》文章有错误,也请通知我们修改!
联系邮箱chinageren#126.com,谢谢支持!
站内搜索:
广告服务 | 友情链接 | 联系我们 | 免责声明 | 用户留言 | 网站导航
版权所有:中国个人站长站 2007-2008 未经授权禁止复制或建立镜像 客服QQ号:112731235
copyright © 2007-2008 www.ChinaGeRen.com online services. all rights reserved. 苏ICP备05000059号