从数据行入手保护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表内容


猜你喜欢
- 这篇文章主要介绍了Python读取表格类型文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 下面先给大家介绍python实现版本号对比功能,具体内容如下所示:相同位置版本号大小比较:def abc(str1, str2): &nbs
- 实例如下所示:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition
- Python3中configparser模块简介configparser 是 Pyhton 标准库中用来解析配置文件的模块,并且内置方法和字
- 在django操作数据库的时候如何找出内容不为空的数据呢?from django.db.models import Qclass Index
- 简介这篇文章的初衷是很多文章都告诉你最左匹配原则,却没有告诉你,实际场景下它到底是如何工作的,本文就是为了阐述清这个问题。准备为了方面后续的
- 在CentOS7下,默认安装的就是python2.7,我现在来教大家如何安装python3:1、首先安装python3.6可能使用的依赖#
- 使用场景当需要进行vuex进行数据状态管理的时候,会使用到mapGetters,mapState,还有自身的计算属性的时候,这个时候就会用到
- 当where子句对某一列使用函数时,除非利用这个简单的技术强制索引,否则Oracle优化器不能在查询中使用索引。通常情况下,如果在WHERE
- 图的实现所谓图就是节点及其连接关系的集合。所以可以通过一个一维数组表示节点,外加一个二维数组表示节点之间的关系。//图的矩阵实现typede
- 在之前给大家分享过这篇文章:CentOS 7.0下使用yum安装mysql的方法详解,小编觉得不够详细,今天给大家通过本文给大家做个补充,感
- Vue.js 的各种指令(Directives)更加方便我们去数据驱动 DOM,例如 v-bind、v-on、v-model、v-if、v-
- 一、安装 → pyinstaller1.1 方式1:cmd1. 调出运行窗口:win + r, 并输入 cmd2. 切换到 pip.exe
- python写的简单的学生管理系统,练习python语法。可以运行在windows和linux下,python 2.7。#!/usr/loc
- Django是个好工具,使用的很广泛。 在应用比较小的时候,会觉得它很快,但是随着应用复杂和壮大,就显得没那么高效了。当你了解所用的Web框
- python读取npy文件时,太大不能完全显示,其解决方法当用python读取npy文件时,会遇到npy文件太大,用print函数打印时不能
- 游戏玩法游戏玩法: 该游戏由 2 到 6 个人玩,使用除大小王之外的 52 张牌,游戏者的目标是使手中的牌的点数之和不超过 21 点且尽量大
- 创作思路:主要还是想尝试做点稍微不同于整天为迎合客户而做的东西.然后闲时就开始构思,比如坐车,走路什么的.看到有一些复古手机的相关图,就想到
- 本文实例讲述了python2 对excel表格操作。分享给大家供大家参考,具体如下:#!/usr/bin/env python2# -*-
- 部署 Jenkins请提前在 Linux 上安装 Docker,在 Linux 中,我们使用 Docker 启动 Jenkins,这样可以避