My SQL安全性指南
时间:2007-12-23 来源:不详 作者:迈克DB
将对应于你想偷取得表文件拷贝到你服务器的数据库目录下的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文件系统本身提供的设置文件和目录属主和模式的工具。下面是我们要做的:
进入该目录
虳ATADIR
设置所有在数据目录下的文件属主为由用于运行服务器的账号拥有(你必须以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 dedecms.com
drwx------2mysqladmmysqlgrp512Jan2520:40mysql
drwx------7mysqladmmysqlgrp512Aug311998sql-bench
drwx------2mysqladmmysqlgrp1536May606:11test
drwx------2mysqladmmysqlgrp1024May818:43tmp
....
二、外部安全性-保证网络访问的安全
MySQL的安全系统是很灵活的,它答应你以多种不同方式设置用户权限。一般地,你可使用标准的SQL语句GRANT和REVOKE语句做,他们为你修改控制客户访问的授权表,然而,你可能由一个不支持这些语句的老版本的MySQL(在3.22.11之前这些语句不起作用),或者你发觉用户权限看起来不是以你想要的方式工作。对于这种情况,了解MySQL授权表的结构和服务器如何利用它们决定访问权限是有帮助的,这样的了解答应你通过直接修改授权表增加、删除或修改用户权限,它也答应你在检查这些表时诊断权限问题。
关于如何治理用户账号,见《MySQL的用户治理》。而对GRANT和REVOKE语句具体描述,见《MySQL参考手册》。
文章评论
共有位Admini5网友发表了评论 查看完整内容