2017-06-20 76 views
1

我有一個我創建的具有DontSaveSensitive保護級別的SSIS項目,並且在今天之前多次愉快地部署到本地服務器。我現在,然而,得到的部署以下錯誤:無法部署SSIS項目 - 在執行「encrypt_binarydata」時出錯

A .NET Framework error occurred during execution of user-defined routine or aggregate "encrypt_binarydata": System.IO.FileLoadException: Could not load file or assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. Not enough storage is available to process this command. (Exception from HRESULT: 0x80070008) System.IO.FileLoadException: at Microsoft.SqlServer.IntegrationServices.Server.Security.CryptoGraphy.CreateSymmetricKey(String algorithm) at Microsoft.SqlServer.IntegrationServices.Server.Security.CryptoGraphy.EncryptBinaryData(SqlString algorithmName, SqlBytes key, SqlBytes IV, SqlBytes binaryData) . (Microsoft SQL Server, Error: 6522)


我有一個谷歌,但遇到沒有什麼特別引用encrypt_binarydata。有許多關於deploy_project_internaluntrusted assemblies的引用,但在這個特定問題上沒有任何內容。

的重要組成部分似乎

Not enough storage is available to process this command

但也有許多RAM千兆字節很煩惱和大量的磁盤空間使用,因此資源不該我不能讓這頭或尾不是問題。

任何人都可以闡明這個錯誤是指什麼,理想情況下我可以解決它?

回答

1

原來,這是一個權限問題,在SSISDB的內部工作中,在SQL和dll文件之間變得非常混亂。原始問題中的錯誤信息實際上是一些紅鯡魚,真正的問題與this excellent resolution中解決的問題相同。


留給後人的的情況下,爲了這個問題的答案永遠消失(以及懶惰的人不希望點擊另一個鏈接),這裏是全

信用的參考答案,以Remus Rusanu


具有EXTERNAL_ACCESS的程序集通過一些複雜的路徑屬於EXECUTE AS路徑。當'dbo'無法映射到有效登錄時,會出現問題。 dbo的登錄名是登錄號爲owner_sid的SID sys.databases。除非在CREATE DATABASE中使用了AUTHORIZATION子句,否則owner_sid是發出CREATE DATABASE語句的主體的登錄sid。大多數情況下,這是登錄用戶的Windows SID併發出CREATE DATABASE。有了這些知識在手可以很容易地設想可能出現的問題:

  • 複製數據庫:CREATE DATABASE通過本地的(即MachineA\userDomainA\user)的用戶機器A發出則數據庫被複制到機器B(通過備份/恢復或通過文件複製)。 owner_sid通過文件複製以及備份/恢復來保存,這在機器B上owner_sid是無效的。需要EXECUTE的所有內容均失敗,包括從數據庫加載程序集。
  • 墓碑賬戶。 CREATE DATABASE由離開公司的用戶發佈。 AD帳戶被刪除,突然EXECUTE AS神祕失敗,包括加載程序集。
  • 斷開筆記本電腦。當筆記本電腦連接到工作網絡時,CREATE DATABASE問題成爲問題。在家中,您可以使用Windows緩存的憑據登錄,但EXECUTE AS希望連接到不可用的AD並失敗。加載程序集也失敗。當你再次接觸到AD時,問題會在工作中神祕地解決。
  • 斑點AD連接。 EXECUTE AS不會使用系統緩存憑據,並且每次都連接到AD。 EXECUTE AS USER = 'dbo';的問題分貝的情況下:如果AD連接有問題(超時錯誤)表現爲類似超時和EXECUTE AS錯誤,包括加載組件這些問題

所有這些問題都可以通過簡單的運行進行診斷。它失敗並出現錯誤,則導致程序集加載問題的原因是dbo的EXECUTE AS環境。

解決方案很簡單,只需強制owner_sid有效的登錄。 sa通常是最好的候選人:

ALTER AUTHORIZATION ON DATABASE::[<dbanme>] TO sa; 

有趣的是,數據庫似乎是完全健康的;表可用,您可以運行選擇,更新,刪除,創建和刪除表等,只有某些組件需要EXECUTE AS

  • 代碼簽名要求的代碼有一個EXECUTE AS子句
  • 裝配驗證
  • 明確EXECUTE AS在T-SQL代碼
  • 服務代理消息傳遞(包括查詢通知)

後者是最經常看到的罪魁禍首,一個依賴SqlDependency的應用程序突然間似乎停止工作,或出現隨機問題。本文解釋了SqlDependency最終如何依賴於EXECUTE AS:The Mysterious Notification