如何在Data-Tier应用程序中将用户与角色相关联

时间:2011-07-31 09:10:13

标签: c# .net sql-server

只需阅读此链接:

http://msdn.microsoft.com/en-us/library/aa833199.aspx

它指出:您无法将用户添加到数据层应用程序(DAC)项目中的角色,因为DAC项目不支持EXEC StoredProcedure构造,除了在对象的主体内,例如存储过程或函数。有关详细信息,请参阅Microsoft网站上的以下页面:数据层应用程序中支持的功能。

那么,作为部署的一部分,如何才能授予任何权限?

1 个答案:

答案 0 :(得分:2)

经过多次挖掘和黑客攻击后,我终于找到了解决方案。

先说几点:

  • 该解决方案适用于全新的DAC或您正在更新的已部署的DAC
  • 我的设置是VS10ult在部署到Server 2008 R2中托管的SQL Server 2008 R2的Win7x64上运行
  • 我的所有部署都是从VS10完成的 - SSMS或DAC PowerShell Scripts都无法部署DAC(两者都是在服务器上本地尝试)
  • 同样,SSMS无法从SQL Server实例中卸载DAC,但是DAC PS Scripts能够(我在脚注中包含我本地运行的PS脚本)底部)
  • 部署/安装DAC的用户将其登录映射到db的dbo用户的登录名

要将给定域用户添加为具有特定权限的服务器登录和db用户:

第1步:创建登录

  • 打开Data-Tier Application VS10项目
  • 右键单击文件夹架构对象 / 服务器级别对象 / 安全性 / 登录
  • 点击添加,然后点击新项
  • 选择模板数据库项目 / 安全
  • 选择登录(Windows验证)
  • 点击< TAB >或单击名称文本框
  • 输入裸登录名(例如:DOMAIN\USER只需输入USER)并点击< Enter >
  • 为您的代码输入此代码,然后保存并关闭文件( USER.login.sql

    create login [DOMAIN\USER] from windows
    

第2步:创建用户

  • 右键单击文件夹架构对象 / 数据库级关卡对象 / 安全 / 用户
  • 点击添加,然后点击新项
  • 选择模板数据库项目 / 安全
  • 选择用户
  • 点击< TAB >或单击名称文本框
  • 输入裸露的用户名(例如:DOMAIN\USER只需输入USER)并点击< Enter >
  • 为您的代码输入此代码,然后保存并关闭文件( USER.user.sql

    create user [USER]
       for login [DOMAIN\USER]
       with default_schema = dbo;
    

步骤3:授予用户权限和/或登录

  • 右键单击文件夹脚本 / 部署后
  • 打开文件 Script.PostDeployment.sql 进行编辑
  • 为您的代码输入此内容,然后保存并关闭文件

    alter login [DOMAIN\USER] enable
    go
    
    use [DAC-DB-NAME];
    
    exec sp_addrolemember db_owner, [USER]
    go
    
  • 请注意,可以使用一组 grant 语句替换 sp_addrolemember

最终,我认为这样做的真正困难在于如何运行部署后脚本。运行时,当前使用数据库最初设置为主数据,但为了发出exec sp_addrolemember和/或grant,{ {1}}必须先设置当前数据库。 [纯猜测结束]

快乐编码!
罗伯特麦考尔 “ 所有 人类的持久和平与幸福!”


脚注:PowerShell脚本(使用DAC PS Scripts)卸载&丢弃DAC数据库

use [DAC-DB-NAME];