网络编程
位置:首页>> 网络编程>> 数据库>> 从数据行入手保护SQL Server数据安全(2)

从数据行入手保护SQL Server数据安全(2)

作者:思维牧童 来源:IT168 发布时间:2009-04-13 10:28:00 

标签:SQL,Server,数据安全

行级别安全代码范例

首先我们作出如下假设:

•使用SQL Server数据库(微软SQL Server 2000、2005或2008)

•所有表中都有一个共同的字段,使用它来决定谁可以看什么数据(本例中就是department字段)

•通过不同的用户id来加强应用程序调用数据库的安全性,而不是通过一个单一的admin用户id。

举例来说,图1所示数据结构包含:Orders表,包含一个客户名称、订单收入和销售部门;一个部门查阅表(Departments),包含父部门字段;一个用户访问表(UserAccess),在用户和他有权限查看的部门之间建立联系。用户访问表的每一行数据代表一个正确的用户/部门组合。如果一个用户有权限访问的部门下设许多子部门,那么这个父部门和每一个子部门在表中各占据一行数据。

 

 

图1 该数据库模型图显示了本例中所用到的表

让订单数据保持安全的关键是,通过SQL Server的表值型函数来保护它,该函数要求使用当前用户的id作为参数。表值型函数与其它函数一样可以接受参数,但是返回结果为一个表,而并非一个变量。在这个函数内,通过其安全属性联合要保护的表与用户访问表,将表的结果限定在与指定用户id相关的范围之内。

示例1定义了一个表值型函数,根据UserAccess表中的限制用户可以查看的内容,返回订单数量和订单的总收入。


以下为引用的内容:

CREATE FUNCTION [dbo].[GetOrderSummary]
(
@User_Id VARCHAR(20)
)
RETURNS TABLE
AS
RETURN
(
SELECT  count(*)   as OrderCount,
   sum(OrderTotal) as Receipts
  FROM  dbo.Orders  o
  Join  dbo.UserAccess ua
  On  o.Department = ua.Department
  WHERE ua.UserID = @User_Id
)

示例1:创建保护订单数据的表值型函数的SQL语句

而图2显示了该函数的执行示例,以及相关表的数据内容,如表1、表2和表3.

 

 

图2 表值型函数执行示例

 

 

表1 UserAccess示例表内容

 

 

表2 Orders示例表内容

 

 

表3 Department表内容

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com