巧妙运用SQL Server保护数据

  在绝大部分的程序安装里,SQL Server都是作为一个标准的应用程序栈(包括用户界面、中间层和数据库)中的最底层。很少用户会知道自己正在使用的是什么类型的数据库,更不用说要对数据库进行存取或者直接使用了。因此,数据库安全配置往往非常是最低程度的。有时候在数据库和中间层之间只有很容易就被“破解”的用户名和密码。

  缺乏安全性保障看起来似乎不是什么大问题。如果你设置了防火墙,而你的用户和程序开发员也都很可靠,你可能就会自信满满地认为没有人会恶毒地删除你的数据。但是,只要你有一个满腹牢骚的员工,他只需悄悄一点一点地修改你的商业数据,就足以使你的系统崩溃。除了这种恶意的删改之外,你还需要担心一些不小心的意外出现的删改。所幸的是,你只需要采取一些简单的安全措施就能够防止这些数据破坏,不管是意外的还是恶意的破坏。

  一个应用程序数据库应该至少制定三种访问权限等级:

  用户权限,只能够执行应用程序中指定的一部份已知查询。
  程序开发员权限,由于需要对系统提供支持,可以对非敏感数据进行只读访问。
  管理员权限,可以访问所有数据库对象和数据。
  制定这些权限等级的第一步就是建立自己的安全负责人(例如,需要利用数据库资源的实体)。SQL Server有许多数据库访问权限机制,根据你的应用程序数据环境可选择适当的机制:

  综合型用户:窗口登录,只准许个人访问。
  综合型群组:窗口登录,可允许当前群组成员访问。
  SQL用户,个人:每一个访问你数据库的用户都要进行登录,并获取适当的访问权限。
  SQL用户,单个:SQL Server只允许但个人登录访问。
  当你建立好自己的安全负责人,你必须对其给于赋予访问权限等级。最简单的权限等级就是建立管理员等级。只要把负责人加入到db_owner的身份就可以,使用以下命令:

USE <database_name>
EXEC sp_addrolemember 'db_owner', '<principal_name>'

  只要你的数据库里没有敏感数据,程序开发员的权限等级也很容易建立:只需要把负责人加入到db_datareader的身份。而敏感数据,如银行帐号等,则必须按照具体情况进行评估和设定。你可以利用下面这个技术来保障数据的安全:

  l表格级别的安全措施,使用DENY语句来防止SELECT访问某一个特定的表格。
  l列等级安全措施,与表格级别的安全措施相似,使用DENY语句来限制SELECT访问某一列。
  加密:可以在应用程序中对数据进行加密,或者利用SQL Server 2005中的内置式加密功能对数据进行加密。
  实施已建立的用户访问权限等级的方法稍有不同:使用存储程序。在存储程序里,用户需要EXECUTE特权来执行应用程序运行的每一个程序。但是,如果你的应用程序已经建有内嵌的SQL,除了授予全部的访问权限之外,你只有一个选择,你必须根据程序运行的查询授予SELECT、INSERT、UPDATE和DELETE表格和列的特权。

posted on 2009-06-04 14:07  IamDavid  阅读(179)  评论(0编辑  收藏  举报

导航