
pcmonkey
联系站长:

紧接上次的话题,网站SQL数据库被挂马的那事,根据几个月来的观察,已经基本防范住了。现在就把解决方案贴出来供大家共享。
首先,我们知道,SQL SERVER数据库有一个名为sa的用户,这个是整个SQL SERVER的总管理员,拥有最高权限。一个网站,当它要使用SQL数据库的时候,也必须在连接文件中指定sa用户的用户名和密码。但实际上,为了安全,我们一般为每一个数据库建立一个用户,在连接文件中使用这个用户的用户名和密码。我的网站上次被挂马,问题就出在为这个用户指定权限的时候没有掌握好分寸。为了便于描述,我从头开始讲起。
一、假设我们的数据库名为test,我们先为它建立一个名为testuser的用户。首先,打开企业管理器,在左边依次展开(Local)下的“安全性”->“登录”,在右边的空白处点鼠标右键,选择“新建登录”。

接着,在弹出的对话框中填入用户名testuser,登录密码(例如123456),以及选择默认数据库(test)。

然后在上方的标签页中选“数据库访问”,在“指定此登录可访问的数据库”下面的列表中,找到test,在它前面打上勾,然后下方的“test的数据库角色”中只勾选“Public”。然后点击确定,再输入一遍刚才设置的密码,这个用户就创建好了。
此时,这个用户只有public角色的权限,默认下是不能访问数据库的。我以前就是因为看到如此情况不能访问数据库,所以在刚才的步骤中勾选了下面的“db_owner”角色,这样才造成了数据库被挂马的后果,切记切记!

二、为public角色指定可以访问的权限。在企业管理器左边展开“数据库”->“test”->“角色”,在右边找到public,右键点击,再选“属性”。

在如下所示的对话框中,列出了这个数据库中所有的表名。需要注意的是,所有dt和sys开头的表都是系统内置表(除非你的数据库中也有这个字母开头的表),这些我们不需要更改。我们需要更改的是数据库中真正的数据表,在每一个表名的右边,都有SELECT、INSERT、UPDATE、DELETE这几个权限,我们需要在每个表名右边的这四个方框里都打上勾(如同下图中dt_properties这个表右边的一样),这样public角色才有权限来访问这个表的内容。剩下的就没什么好说的了,把每个表后面都打上勾吧,表的数量多也没办法,一个个慢慢来吧~~~

全部改完之后,确定,然后再修改一下网站的连接文件,将里面的访问数据库用户名和密码换成刚才建立的用户名和密码,OK,都搞定了!
数据库的安全性设置好了,当然防范SQL注入的代码还是不能少。上次的文章中有人在问我以前使用的防范SQL注入的代码,在这里一同贴上好了。代码如下:
将上面这段代码保存为一个ASP文件,如fangzhuru.asp,然后在连接文件的最开始加上一句包含命令:
这样,双剑合壁,安全性就高多了!
最后,祝大家的网站都能安全过夜,呵呵……