SQL Server 2005: 存储过程签名

 

 

SQLSERVER 2005提供的对存储过程签名(signature)功能是我最喜欢的。

 

如果我们要编写一个存储过程,执行该存储过程里的代码需要权限P,并且我们想要用户Alice可以执行这个存储过程,但是我们不想将权限P直接赋予给用户Alice 我们可以用证书(certificate)对这个存储过程进行签名来完成这一需求:

 

a)      如果P是一个数据库级别的权限,那我们可以在相应的数据库中创建一个证书,使用证书创建一个用户(user),然后将权限p授权给这个用户

b)      如果P是一个服务器级别的权限,那我们能要在master数据库中创建一个证书,使用证书创建一个登录(login),然后将权限P授权给这个登录

 

  签名之后,存储过程就会在执行期间获得权限P,而我们仅仅授予了Alice执行这个存储过程的权限。

 

     如果我们既需要服务器级别的权限,又需要数据库级别的权限,那么我们既要创建用户,又要创建登录。下面列出步骤:

 

1)      在数据库中创建证书

2)      创建一个用户(user)并映射到这个证书

3)      将数据库级别的权限授予这个用户

4)      备份这个证书

5)      master数据库中还原这个证书

6)      创建一个登录(login),并将登录映射到证书

7)      将服务器级别的权限授予给这个登录

 

  我们也可以先在master数据库中创建证书,然后再将其还原到用户alice工作的数据库。也就是证书的创建顺序并不重要,重要的是master数据库中的证书一定要和用户数据库中的相同。

 

下面是演示:

 

 

-- 目的
--
 展示如何用证书签名一个存储过程, 
--
并授予证书相应的权限

 

create database demo;

use demo;

 

-- 创建一个存储过程,该过程会创建一个主体(包含登录和用户)
--
 这需要服务器级别的ALTER ANY LOGIN 权限
--
 和数据库级别的 ALTER ANY USER 权限
create procedure sp_CreatePrincipal
      
@name varchar(256),
      
@password varchar(128)
as
   
declare @sqlcmd varchar(2000);

 

   
begin tran;

 

   
-- create login
   set @sqlcmd = 'create login ' + quotename(@name+ ' with password = ' + quotename(@password'''');
   
exec (@sqlcmd);
   
if @@error <> 0

   
begin

      
rollback tran;
      
print 'Cannot create login'
      
return;
   
end

 

   
-- create user
   set @sqlcmd = 'create user ' + quotename(@name);
   
exec (@sqlcmd);
   
if @@error <> 0
   
begin
      
rollback tran;
      
print 'Cannot create user'
      
return;
   
end

 

   
commit tran;
go

 

-- 调用这个存储过程
--
 创建主体
sp_CreatePrincipal 'alice''Apufe@))%';

 

--我们需要让alice可以调用这个存储过程,创建新的主体, 
--
 但并不直接授予她权限(创建主体的权限,译者注)
grant execute on sp_CreatePrincipal to alice;

 

-- 目前 alice还不能创建主体
execute as login = 'alice';
sp_CreatePrincipal 
'bob''Apufe@))%';
revert;

 

-- 使用证书对存储过程进行签名
--
 首先我们要创建一个数据库主密钥(database master key)
create master key encryption by password = 'Apufe@))%';
create certificate certSignCreatePrincipal with subject = 'for signing procedure sp_CreatePrincipal';

 

-- 签名存储过程sp_CreatePrincipal
add signature to sp_CreatePrincipal by certificate certSignCreatePrincipal;

-- 现在签名完成了,可以将证书的私钥移除了
alter certificate certSignCreatePrincipal remove private key;

-- 对证书进行备份,随后在master数据库中将要使用该备份
backup certificate certSignCreatePrincipal to file = 'certSignCreatePrincipal.cer';

 

-- 创建一个用户并将用户映射到证书
create user u_certSignCreatePrincipal from certificate certSignCreatePrincipal;
--通过授权映射映射的方式将ALTER ANY USER权限赋给证书  (因为用户和证书是映射的,所以权限也就赋给了证书,SQLSERVER本身没有直接将权限赋给证书的方法。译者注)
grant alter any user to u_certSignCreatePrincipal;

 

-- 在master数据库中创建该证书
use master;
create certificate certSignCreatePrincipal from file = 'certSignCreatePrincipal.cer';

-- 创建登录并映射到证书
create login l_certSignCreatePrincipal from certificate certSignCreatePrincipal;
-- 通过授权映射登录的方式将ALTER ANY LOGIN权限赋给证书
grant alter any login to l_certSignCreatePrincipal;

 

-- 完成!
use demo;

 

-- 验证一下,master数据库中的证书和demo数据库中的证书是一样的。
select c.name from sys.certificates c, master.sys.certificates mc where c.thumbprint = mc.thumbprint;

 

-- 现在alice可以创建主体了
execute as login = 'alice';
sp_CreatePrincipal 
'bob''Apufe@))%';
revert;

 

-- cleanup
drop user u_certSignCreatePrincipal;
drop login l_certSignCreatePrincipal;
drop procedure sp_CreatePrincipal;
drop certificate certSignCreatePrincipal;
drop user alice;
drop login alice;
drop user bob;
drop login bob;

 

use master;

drop certificate certSignCreatePrincipal;
drop database demo;
-- EOD

 

原文: SQL Server 2005: procedure signing demo

转载于:https://www.cnblogs.com/stswordman/archive/2008/07/29/1255322.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机能上wifi电脑不行_锦囊在此(电脑手机如何配置使用WIFI)

1.路由器接入电源(以下是以TP-LINK为例&#xff0c;其他路由器大同小异&#xff0c;重要是在于关闭DHCP服务器选项)2.打开电脑WIFI连接路由器(找对路由器名称&#xff0c;见路由器底标)(建议不要接入网线&#xff0c;配置好再接入网线)3.打开浏览器输入路由器后台网址(见路由器…

8位可控加减法电路设计_100以内数的认知也加减法详解

一、100 以内数的认识1、10个十是100,读作一百。100 是由10个十或100个一组成,它是一个三位数。2、数数时,可以一个一个的数,也可以二个二个的数,五个五个的数,十个十个的数。3、从右边起,第一位是个位,第二位是十位,第三位是百位。4、读数和写数,都从高位起。当计数器上个位或…

如何在电脑上截屏_如何在电脑上截图?教你6种常用的截图方法,总有你不知道的...

无论是在学习上还是在工作中&#xff0c;我们都经常会用到电脑&#xff0c;特别是在工作中&#xff0c;每天都是与电脑相伴&#xff0c;遇到重要的文字信息或者好看的图片&#xff0c;都会想尽办法截取下来&#xff0c;所以今天就教大家几种电脑截图的方法。1、截图工具这个截图…

ASP.NET自定义控件组件开发 第三章 为控件添加事件 前篇

第三章 为控件添加事件 好了&#xff0c;我们之前以前开发一个控件。而且也添加了属性&#xff0c;开发也很规范&#xff0c;但是那个控件还差最后一点&#xff1a;添加事件。 系列文章链接:ASP.NET自定义控件组件开发 第一章 待续ASP.NET自定义控件组件开发 第一章 …

pioneer dvr-xd50 固件_闲的蛋疼的验证:索尼 SONY WH1000XM3固件版本差异

坊间一直流传&#xff0c;索尼WH-1000XM3的新固件版本降噪性能要比老的更差&#xff0c;即最早期的2.x.x版本的降噪性能要比目前的4.x.x更好。这也让不少WH-1000XM3的用户一直停留在2.x版本不升级&#xff0c;甚至动用比较麻烦的方法去对耳机做固件降级。出于闲的蛋疼的原因&am…

python接口测试_Python接口自动化测试(一)

本节开始&#xff0c;开始介绍python的接口自动化测试&#xff0c;首先需要搭建python开发环境&#xff0c;到https://www.python.org/下载python版本直接安装就以了&#xff0c;建议下载python2.7.11版本&#xff0c;当然&#xff0c;也是可以下载python最新版本。 接口测试是…

刷recovery工具apk_红米note4X刷lineage,不喜欢miui10广告臃肿的可以试一试

经常在miui和各个类原生安卓系统间换来换去&#xff0c;不过miui10现在是越来越垃圾了&#xff0c;广告、耗电、臃肿&#xff0c;我现在已经逐步抛弃miui了&#xff01;小白可以看我的帖子做个参考&#xff0c;刷机其实是特别简单的是&#xff0c;只要一步步来&#xff0c;总会…

干涉测量技术的应用_技术分享 | 石化行业测量仪表应用在线答疑

众所周知&#xff0c;在化工和石化这类流程行业当中&#xff0c;稳定性和持续性是至关重要的生产“命脉”&#xff0c;对于生产过程中使用的测量仪表有着极其严格的要求。不仅所有测量仪表都必须满足严苛的国际标准&#xff0c;如PED和ATEX&#xff0c;压力、温度及液位等电子和…

WCF学习(五)数据契约之已知类型

准备技术&#xff1a; 1.C#基础知识 2.了解WCF基础知识 在正常的c#开发中我们是允许用子类去替换基类的&#xff0c;这也是所谓的替换原则。但是我们在WCF中确不能用数据契约的子类来替换父类的&#xff0c;因为这中间存在一个序列化的问题。举个例子&#xff1a; 我们有数据契…

win10必须禁用的服务_7寸屏的迷你电脑,就算是8GB运行内存,也必须关闭的系统选项...

现在的电脑&#xff0c;基本上都安装的是Win10系统了&#xff0c;7寸屏的迷你笔记本电脑GPD Pocket 2琥珀黑版也不例外&#xff0c;GPD Pocket 2采用的是赛扬双核3965y处理器&#xff0c;8G运行内存&#xff0c;处理办公应用可以说是游刃有余&#xff0c;但是Win10系统有一些选…

iTunes只能装C盘吗_电脑技巧分享:安装win10系统时系统盘C盘分区多大空间适合?...

我们在使用电脑时为了对电脑文件的方便管理&#xff0c;往往会对电脑进行分区&#xff0c;比如C&#xff0c;D&#xff0c;E&#xff0c;F盘等&#xff0c;其中C盘默认为系统盘&#xff0c;用于存储操作系统的重要文件&#xff0c;而C盘的分区大小也是许多朋友在安装操作系统时…

上海梵科信息科技有限公司

1. a5, b(a)(a)(a), printf("%d",b); 答案&#xff1a;19 2. 表students&#xff0c;有id, classid, name, score。 班级为4的所有学生&#xff1f; 答案&#xff1a;select * from students where classid4 每个班级的学生总数&#xff1f; 答案&#xff1a;select …

python36安装numpy_安装numpy

为了运行机器学习书上的实例&#xff0c;安装numpy.照着网上教程安装的&#xff0c;网上教程 1&#xff09;下载numpy包 自己的是python3.5, 64位操作系统&#xff0c;所以选择numpy-1.11.2mkl-cp35-cp35m-win-amd64.whl 2&#xff09;安装numpy 将下载的包拷贝到python安装目录…

WCF Testing Tool(转)

原文:http://jayce.clearviewtickets.info/wcftestingtool.html best video: wcf testing tool IIS7 Admin Pack Offers Built In Performance Analysis Reports Are you web developer building high traffic web site? Are you performance engineer that lives and breath…

python制作简单动画_如何使用python制作简单的动画?

Python真的是无穷的好用&#xff0c;涉及内容非常广泛&#xff0c;比如接下来给大家介绍的制作动画&#xff0c;就可以利用python实现&#xff0c;相信小伙伴们听到这些内容肯定是非常感兴趣的&#xff0c;至于怎么去实现&#xff1f;大家想不想了解呢&#xff1f;下面小编就给…

clickhouse语句_篇四|ClickHouse的可视化界面与集群状态监控

介绍 tabix支持通过浏览器直接连接 ClickHouse&#xff0c;不需要安装其他软件&#xff0c;就可以访问ClickHouse&#xff0c;具有以下特点&#xff1a;⾼亮语法的编辑器。⾃动命令补全。查询命令执⾏的图形分析⼯具。配⾊⽅案选项。除此之外&#xff0c;还可以使用DBeaver连接…

apache为什么更适合处理动态请求_[适合初中级Java程序员修炼手册从0搭建整个Web项目](一)...

前言文本已收录至我的GitHub仓库&#xff0c;欢迎Star&#xff1a;https://github.com/bin392328206种一棵树最好的时间是十年前&#xff0c;其次是现在six-finger-web一个Web后端框架的轮子从处理Http请求【基于Netty的请求级Web服务器】 到mvc【接口封装转发)】&#xff0c;再…

python如何自动缩进_Python缩进

缩进出现问题&#xff0c;运行不出来。 正确代码如下&#xff1a;1 defbinary_search(list, item):2 low 03 high len(list)-1 4 5 while low <high:6 mid (low high)7 guess list[mid]8 if guess item:9 returnmid10 if guess >item:11 high mid-1 12 else:13 low m…

差分约束系统详解

一直不知道差分约束是什么类型题目&#xff0c;最近在写最短路问题就顺带看了下&#xff0c;原来就是给出一些形如x-y<b不等式的约束&#xff0c;问你是否满足有解的问题 好神奇的是这类问题竟然可以转换成图论里的最短路径问题&#xff0c;下面开始详细介绍下 比如给出三…

1.1.1.1校园网_Apache Flink 1.11.0 重要功能全面解析

来源 | Apache Flink 官方博客翻译 | 高赟(云骞)Apache Flink 社区很荣幸的宣布 Flink 1.11.0 版本正式发布&#xff01;超过 200 名贡献者参与了 Flink 1.11.0 的开发&#xff0c;提交了超过 1300 个修复或优化。这些修改极大的提高了 Flink 的可用性&#xff0c;并且增强了各…