WEB开发网
开发学院数据库MSSQL Server 从数据行入手保护SQL Server数据安全 阅读

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

 2009-04-01 10:25:34 来源:WEB开发网   
核心提示: 行级别安全代码范例首先我们作出如下假设:◆使用SQL Server数据库(微软SQL Server 2000、2005或2008)◆所有表中都有一个共同的字段,使用它来决定谁可以看什么数据(本例中就是department字段)◆通过不同的用户id来加强应用程序调用数据库的安全性,从数据行入

行级别安全代码范例

首先我们作出如下假设:

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

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

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

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

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

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

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

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

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

CREATE FUNCTION [dbo].[GetOrderSummary] 
( 
@User_Id VARCHAR(20)
)
RETURNS TABLE 
AS
RETURN 
(
SELECTcount(*) as OrderCount, 
sum(OrderTotal) as Receipts
FROMdbo.Orderso
Joindbo.UserAccess ua
Ono.Department = ua.Department
WHERE ua.UserID = @User_Id
)

Tags:数据 入手 保护

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接