Chapter 3 Protecting the Data(4):创建和使用应用程序角色
未经作者同意,任何人不得以“原创”形式发布,也不得已用于商业用途,本人不负责任何法律责任。
前一篇:http://blog.csdn.net/dba_huangzj/article/details/39639365
前言:
数据库角色用于管理数据库内部的访问和权限。数据库角色成员是能通过客户端软件如SSMS连接SQL Server的数据库用户,但是你可能希望授予某个特殊用户一些特权,但是仅限制于某个应用程序而不是SSMS时,第一个解决方案是使用专用SQL 帐号作为应用程序的登录。但是这个方案的缺点是需要使用SQL Server身份验证,并且不能标识出哪个用户正在连接SQL Server。但是可以使用同一个应用程序登录名,并且使用Windows身份验证,因此能更好地标识应用程序的用户,从而在必要的时候提升权限。
实现:
1. 打开SSMS,在特定数据库的【安全性】→【角色】下,右键【应用程序角色】,选择【新建应用程序角色】:
2. 输入角色名、密码和可选的默认架构,如果为空即为dbo:
3. 在【安全对象】页,可以和数据库角色一样管理应用程序角色的权限:
4.也可以使用T-SQL实现这个操作:
CREATE APPLICATION ROLE MarketingReports WITH PASSWORD = N'A complex password please';
5. 当在程序中使用应用程序角色时,使用sp_setapprole系统存储过程修改会话的上下文:
EXEC sp_setapprole @rolename = 'MarketingReports', @password = N'A complex password please';
执行了这个存储过程之后,当前会话将运行在应用程序角色的上下文下,并且可以通过授权替代原有数据库用户的权限。
原理:
应用程序角色尽可以在代码中使用,并且仅能使用sp_setapprole存储过程,由于密码传输是明文,所以需要使用如SSL来加密传输链接。在切换上下文之后,应用程序角色的上下文会持续到断开服务器连接,如果需要恢复但不断开连接,可以使用sp_unsetapprole:
DECLARE @cookie varbinary(8000);
EXEC sp_setapprole @rolename = 'MarketingReports',
@password = N'A complex password please',
@fCreateCookie = true, @cookie = @cookie OUTPUT;
-- do something, then revert :
EXEC sp_unsetapprole @cookie;
更多:
下面的C#片段,可以在连接后马上使用应用程序角色:
using (SqlConnection cn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cmd.CommandType = CommandType.Text;
cmd.CommandText =
"EXEC sp_setapprole @rolename = 'MarketingReports',
@password = N'A complex password please'";
cn.Open();
int res = cmd.ExecuteNonQuery();
}
下一篇:
Chapter 3 Protecting the Data(4):创建和使用应用程序角色的更多相关文章
- Chapter 3 Protecting the Data(3):创建和使用数据库角色
原版的:http://blog.csdn.net/dba_huangzj/article/details/39639365.专题文件夹:http://blog.csdn.net/dba_huangzj ...
- Chapter 3 Protecting the Data(1):理解权限
原文出处:http://blog.csdn.net/dba_huangzj/article/details/39548665,专题目录:http://blog.csdn.net/dba_huangzj ...
- Chapter 3 Protecting the Data(2):分配列级权限
原文出处:http://blog.csdn.net/dba_huangzj/article/details/39577861,专题目录:http://blog.csdn.net/dba_huangzj ...
- C# step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型
C# 2012 step by step 学习笔记8 CHAPTER 9 使用枚举和结构创建值类型 本章内容 声明一个枚举类型 创建并使用一个枚举类型 声明一个结构类型 创建并使用一个结构类型 解释结 ...
- 17.1.1.6 Creating a Data Snapshot Using Raw Data Files 创建一个数据快照使用 Raw Data Files
17.1.1.6 Creating a Data Snapshot Using Raw Data Files 创建一个数据快照使用 Raw Data Files 如果数据库是大的, 复制raw 数据文 ...
- 使用WCF Data Service 创建OData服务
使用WCF Data Service 创建OData服务 在 上一章 中,介绍了如何通过 OData 协议来访问 OData 服务提供的资源.下面来介绍如何创建一个 OData 服务.在这篇文章中,主 ...
- 【tmos】spring data jpa 创建方法名进行简单查询
参考链接 spring data jpa 创建方法名进行简单查询:http://www.cnblogs.com/toSeeMyDream/p/6170790.html
- [转]C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe
写在前面 原文地址:C#创建服务及使用程序自动安装服务,.NET创建一个即是可执行程序又是Windows服务的exe 这篇文章躺在我的收藏夹中有很长一段时间了,今天闲着没事,就自己动手实践了一下.感觉 ...
- 创建C#串口通信程序详解
在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports.这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信.我们将使用标准 ...
随机推荐
- Windows2003无法连接远程桌面问题 解决方法!
按照以下步骤来一一排除问题吧! 步骤1.遇到这样的情况,通常情况下我们都是先检查远程有没有开启,就是右击我的电脑查看属性里的远程前面的框框有没有勾上,勾上后即可远程,metsc 127.0.0.1 ...
- DDD实战进阶第一波(七):开发一般业务的大健康行业直销系统(实现产品上下文接口与测试)
前一篇文章我们介绍了如何将创建产品的领域逻辑与产品的持久化仓储通过上架产品的用例组织起来,完成了一个功能.在实际的项目中,多种前端的形态比如PC Web. 微信小程序.原生APP等要调用后端的功能,通 ...
- java 获得当前时间前指定几个小时的时间?
//@2016-12-13 获取当前时间,指定前面多少小时的时间 //返回格式YYYYMMDDHHMMSS public static String getBeforeHourTime(int iho ...
- Python中的str与unicode处理方法
Python中的str与unicode处理方法 2015/03/25 · 基础知识 · 3 评论· Python 分享到:42 原文出处: liuaiqi627 的博客 python2.x中处理 ...
- 条件语句,while循环语句:完整的温度转换程序
while True: a = int(input('摄氏温度换为华氏温度请按 1\n华氏温度转为摄氏温度请按 2\n退出请按 3\n')) if a==1: c = float(input('请输入 ...
- 如何扩展/删除swap分区
背景: 由于安装Oracle 的时候,swap太小只划分了4G,后期发现交换分区太小,不满足使用,于是进行了swap分区的扩容过程: swap分区的扩展很简单,但是需要root用户权限 ...
- RxJava(十)switchIfEmpty操作符实现Android检查本地缓存逻辑判断
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/52585912 本文出自:[余志强的博客] switchIfEmpty ...
- docker 部署cassandra
摘要 本文主要介绍在redhat7 平台,利用docker 部署cassandra 集群,除了介绍基本的部署步骤,另外主要 讨论类似于cassandra 这种分布式集群系统部署 docker如何进行网 ...
- springMVC源码分析--BeanNameUrlHandlerMapping(七)
在上一篇博客springMVC源码分析--AbstractDetectingUrlHandlerMapping(五)中我们介绍了AbstractUrlHandlerMapping,其定义了一个抽象函数 ...
- Linux动态频率调节系统CPUFreq之一:概述
随着技术的发展,我们对CPU的处理能力提出了越来越高的需求,芯片厂家也对制造工艺不断地提升.现在的主流PC处理器的主频已经在3GHz左右,就算是智能手机的处理器也已经可以工作在1.5GHz以上,可是我 ...