Chapter 3 Protecting the Data(4):创建和使用应用程序角色

原文出处:http://blog.csdn.net/dba_huangzj/article/details/39927713,专题目录:http://blog.csdn.net/dba_huangzj/article/details/37906349

未经作者同意,任何人不得以“原创”形式发布,也不得已用于商业用途,本人不负责任何法律责任。

前一篇: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();
}

下一篇:

时间: 2024-09-30 06:48:39

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/article/details/37906349 未经作者同意,不论什么人不得以"原创"形式公布,也不得已用于商业用途.本人不负责不论什么法律责任. 前一篇:http://blog.csdn.net/dba_huangzj/article/details/39577861 前言: 数据库

Chapter 3 Protecting the Data(1):理解权限

原文出处:http://blog.csdn.net/dba_huangzj/article/details/39548665,专题目录:http://blog.csdn.net/dba_huangzj/article/details/37906349 未经作者同意,任何人不得以"原创"形式发布,也不得已用于商业用途,本人不负责任何法律责任. 前一篇:http://blog.csdn.net/dba_huangzj/article/details/39496517 前言: 关系型数据库管

Chapter 3 Protecting the Data(2):分配列级权限

原文出处:http://blog.csdn.net/dba_huangzj/article/details/39577861,专题目录:http://blog.csdn.net/dba_huangzj/article/details/37906349 未经作者同意,任何人不得以"原创"形式发布,也不得已用于商业用途,本人不负责任何法律责任. 前一篇:http://blog.csdn.net/dba_huangzj/article/details/39548665 前言: SQL Ser

MFC Wizard创建的空应用程序中各个文件内容的解析

创建的MFC应用程序名为:wd,那么: 一.wd.h解析 // wd.h : main header file for the WD application // #if !defined(AFX_WD_H__89BE48D2_F377_4DF1_8C44_4D7372A61CE0__INCLUDED_) #define AFX_WD_H__89BE48D2_F377_4DF1_8C44_4D7372A61CE0__INCLUDED_ //////////////////////////////

创建C#串口通信程序详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports.这个新的框架不但可以访问计算机上的串口,还可以和串口设备进行通信.我们将使用标准的RS 232 C 在PC间通信.它工作在全双工模式下,而且我们不打算使用任何的握手或流控制器,而是使用无modem连接.创建C#串口通信程序的具体实现是如何的呢?让我们开始吧: 创建C#串口通信程序之命名空间 System.IO.Ports命名空间中最重用的是SerialPort 类. 创建C#串

创建安全的 Netty 程序

1.使用 SSL/TLS 创建安全的 Netty 程序 SSL 和 TLS 是众所周知的标准和分层的协议,它们可以确保数据时私有的 Netty提供了SSLHandler对网络数据进行加密 使用Https public class SslChannelInitialzer extends ChannelInitializer<Channel>{ private final SSLContext context; private final boolean client; private fina

BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览 创建和管理应用程序身份

BEGINNING SHAREPOINT? 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览  创建和管理应用程序身份 在之前的部分,你看到应用程序如何像用户一样拥有一个身份.当一个App依据用户执行某操作时,SP记录这个信息.

未找到具有固定名称&ldquo;System.Data.SQLite&rdquo;的 ADO.NET 提供程序的实体框架提供程序

用户代码未处理 System.InvalidOperationException   HResult=-2146233079   Message=未找到具有固定名称"System.Data.SQLite"的 ADO.NET 提供程序的实体框架提供程序.请确保在应用程序配置文件的"entityFramework"节中注册了该提供程序.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882.   Source=E

使用PHP创建基本的爬虫程序【转】

Web Crawler, 也时也称scrapers,即网络爬虫,用于自动搜索internet并从中提取 想要的内容.互联网的发展离不开它们.爬虫是搜索引擎的核心,通过智能算法发现符合 你输入的关键字的网页. Google网络爬虫会进入你的域名,然后扫描你网站的所有网页,从中析取网页标题,描述, 关键字和链接 - 然后把这些的评价返回给Google HQ,把内容存放至海量的数据库中. 今天,我很高兴告诉你怎么做自己的爬虫 -- 它并不对整个互联网进行搜索,只是对指定的 一个网址获取所有链接和信息[