3

我正在使用 SSDT 数据库项目创建数据库并部署为 dacpac。.NET 程序集是项目的一部分,在部署期间安装失败并显示以下错误消息:

为程序集“xyz”创建程序集失败,因为程序集“xyz”未获得 PERMISSION_SET = UNSAFE 的授权。当以下任一情况为真时,程序集被授权:数据库所有者 (DBO) 具有 UNSAFE ASSEMBLY 权限并且数据库具有 TRUSTWORTHY 数据库属性;或者程序集使用证书或非对称密钥签名,该密钥具有相应的登录名并具有 UNSAFE ASSEMBLY 权限。

dbo 是“sa”。我已经进入项目属性并检查了杂项选项卡下的“可信赖”。但是,我仍然收到错误,并且当我运行时

select name, is_trustworthy_on from sys.databases

我看到is_trustworthy_on是0。这个设置似乎没有效果。搜索后,我发现以下内容:

某些数据库选项(例如 TRUSTWORTHY、DB_CHAINING 和 HONOR_BROKER_PRIORITY)不能作为部署过程的一部分进行调整。

来自http://msdn.microsoft.com/en-us/library/ee210569.aspx

调整这个词意味着改变了我。这是一个新的数据库。但是,如果即使对于新数据库也是如此,为什么对话框中存在该设置?我是否需要将此脚本作为预部署的一部分?

4

2 回答 2

3

由于您已经选中了“其他”选项卡中的“可信赖”复选框,因此您只需确保选中“部署数据库属性”选项(或设置为 true)。此选项将位于不同的位置,具体取决于您的发布方式。一些地方包括:

  • 转到“构建”菜单并选择“发布 {项目名称}...”
    • 出现“发布数据库”向导。
    • 单击“高级...”按钮
    • 顶部复选框用于“部署数据库属性”


  • 使用SqlPackage.exe
    • 通过配置文件传入:<ScriptDatabaseOptions>True</ScriptDatabaseOptions>
    • 通过命令行传入:/p:ScriptDatabaseOptions = True


  • MSDeploy与 dbSqlPackage 提供程序一起使用:
    • 选项是:ScriptDatabaseOptions=True
于 2014-12-01T22:34:38.200 回答
0

您是否收到消息说您必须是系统管理员?执行部署的用户需要在 sysadmin 组中。有一些设置包含在:

IF IS_SRVROLEMEMBER(N'sysadmin') = 1
    BEGIN
        IF EXISTS (SELECT 1
                   FROM   [master].[dbo].[sysdatabases]
                   WHERE  [name] = N'$(DatabaseName)')
            BEGIN
                EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)]
                SET TRUSTWORTHY ON 
                WITH ROLLBACK IMMEDIATE';
            END
    END
ELSE
    BEGIN
        PRINT N'The database settings cannot be modified. You must be a SysAdmin to apply these settings.';
    END
于 2014-12-01T22:00:59.153 回答