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

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

行级别安全代码范例

首先我们作出如下假设:

•使用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表内容

标签:SQL,Server,数据安全
0
投稿

猜你喜欢

  • 谈谈FACEBOOK的一处产品细节

    2008-03-11 11:05:00
  • [翻译]标记语言和样式手册 Chapter 7 锚点

    2008-01-28 14:01:00
  • 10个不为人知的Google失败作品

    2008-05-24 16:56:00
  • Request.ServerVariables("HTTP_REFERER")的用法

    2008-06-19 13:33:00
  • 影响ORACLE汉字显示的字符集问题

    2008-06-13 16:49:00
  • 鼠标驱动图片变化

    2009-07-26 10:03:00
  • 12个对网页设计师非常有用的图片优化工具[译]

    2009-09-22 14:29:00
  • 错误的随机数_JavaScript

    2009-08-28 12:43:00
  • 如何远程连接SQL Server数据库

    2009-06-08 12:41:00
  • 如何获知文件被改动的情况?

    2009-11-24 20:42:00
  • Oracle9i在Win2k环境下的完全卸载

    2010-07-28 13:03:00
  • 动态导航设计

    2008-09-21 13:40:00
  • 使用MHTML 解决 data URI scheme 的浏览器兼容问题

    2009-05-11 12:30:00
  • Sql server中的char、varchar、text和nchar、nvarchar、ntext的区别

    2011-08-14 09:43:44
  • 公用样式模板的设计制作

    2009-09-13 21:27:00
  • 在HTML中,常见的URL有多种表示方式:

    2009-07-28 12:18:00
  • asp 在线备份与恢复sqlserver数据库的代码

    2011-03-06 11:14:00
  • 关于MySQL中隐藏空间的问题

    2009-07-30 08:15:00
  • SQL Server各种日期计算方法

    2008-09-11 21:47:00
  • DW中如何使用Library

    2007-02-03 11:39:00
  • asp之家 网络编程 m.aspxhome.com