2014-12-01 33 views
3

我正在創建一個SSDT數據庫項目的數據庫並部署爲dacpac。 .NET程序集是該項目的組成部分,部署在安裝過程中失敗,出現以下錯誤信息:打開TRUSTACORTHY與dacpac

CREATE組裝「XYZ」 ASSEMBLY失敗,因爲裝配 「XYZ」未獲準PERMISSION_SET =不安全的。 程序集在以下任一情況下得到授權: 數據庫所有者(DBO)具有UNSAFE ASSEMBLY權限,並且數據庫 具有TRUSTWORTHY數據庫屬性;或者該組件使用證書或非對稱密鑰簽署 ,該證書或非對稱密鑰具有相應的具有UNSAFE ASSEMBLY權限的登錄 。

dbo是'sa'。我已進入項目屬性並在雜項選項卡下選中「可信」。不過,我仍然得到錯誤,當我運行

select name, is_trustworthy_on from sys.databases 

我看到is_trustworthy_on爲0。看來這個設置沒有任何效果。搜索後,我發現:

一些數據庫選項,如守信,DB_CHAINING和 HONOR_BROKER_PRIORITY,不能調整作爲部署 過程的一部分。

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

調整意味着改變給我。這是一個新的數據庫。但是,即使對於新的數據庫,如果它是真的,爲什麼設置存在於對話框中?我是否需要將此腳本編寫爲部署前的一部分?

+0

我知道它並沒有真正回答你的問題,但你可以嘗試簽署程序集而不是讓數據庫值得信賴。 – Mansfield 2014-12-01 20:56:00

+0

這是可能的,但並不理想。我正在簽約自動化原狀態。 – Swoogan 2014-12-01 21:11:01

回答

3

由於您已選中「雜項」選項卡中的「可信任」複選框,因此您只需確保已選中「部署數據庫屬性」選項(或設置爲true)即可​​。這個選項將會出現在不同的地方,具體取決於你如何發佈。有些地方包括:

  • 要「構建」菜單並選擇「發佈{項目名稱} ...」
    • 「發佈數據庫」嚮導出現。
    • 單擊 「高級」 按鈕
    • 前的複選框是 「部署數據庫屬性」


  • 使用SqlPackage.exe
    • 通過個人檔案文件傳入:<ScriptDatabaseOptions>True</ScriptDatabaseOptions>
    • 經由命令行傳遞:/p:ScriptDatabaseOptions = True


  • 使用MSDeploy與dbSqlPackage提供商:
    • 選項是:ScriptDatabaseOptions=True
+1

離開男人的方式是懸念! ;) – Swoogan 2014-12-01 22:37:42

+0

@Swoogan對不起,只好先檢查幾個地方;) – 2014-12-01 22:44:26

+1

非常感謝。貨物崇拜編程。我複製了其中有/ p:ScriptDatabaseOptions = False的另一個部署腳本。我顯然不知道它做了什麼。 – Swoogan 2014-12-01 22:50:05

0

你有消息說你必須是系統管理員?執行部署的用戶需要位於sysadmin組中。但是也有一些包裹在一些設置:

IF IS_SRVROLEMEMBER(N'sysadmin')= 1 BEGIN IF EXISTS(SELECT 1 FROM [主] [DBO] [sysdatabases中] WHERE [名稱] =。 N'$(DatabaseName)') BEGIN EXECUTE sp_executesql N'ALTER DATABASE [$(DatabaseName)] SET TRUSTWORTHY ON WITH ROLLBACK IMMEDIATE'; END END ELSE BEGIN PRINT N'The數據庫設置無法修改。您必須是SysAdmin才能應用這些設置。'; END

+0

用於部署的登錄名是sysadmin角色的一部分。但是,當我生成腳本並搜索可靠信息時,我沒有得到任何結果。你是如何得到它的? – Swoogan 2014-12-01 22:23:29