2016-03-21 60 views
1

我試圖部署本地開發的C#SQL-CLR存儲過程和程序集到DEV框的快速測試,並且獲取各種被拒絕的訪問消息。部署SQL CLR所需的SQL權限級別

反向工程操作無法繼續,因爲您沒有 對數據庫具有「查看定義」權限。

問:我需要在服務器上哪些權限組或級別部署SQL CLR?

問:上面的消息意味着DDLAdmin,但我是否需要更多?

版本:的Microsoft SQL Server 2008 R2(SP3) - 10.50.6000.34(X64)

我有麻煩在工作時所需要的鄉親最低權限的列表。

感謝您的幫助。

+0

發佈錯誤消息,可能來自數據庫或來自Windows服務器 – JLB

+0

什麼版本的SQL Server?如果2012+,這個項目部署模型還是包部署模型?如果包部署模型,你在哪裏部署SSIS包? – billinkc

+0

我決定將問題限制在SQL CLR中並單獨詢問SSIS問題 –

回答

3

上述消息意味着DDLAdmin

不,這並不意味着。它清楚地表明登錄需要VIEW DEFINITION。雖然ddl_admin可能有效,但它可能比所需要的要多得多。然而,這就是說,爲什麼你不作爲一個特權帳戶部署?如果有的話,我很少看到一個沒有以sysadmin運行的部署過程。那你怎麼不是一個開發箱上的系統管理員?;-)

有手頭兩個問題:

  1. 的SSDT過程,做逆向工程,以便它可以拿出一個增量部署腳本,但不是讓這個任何改變點,並且

  2. 一旦生成腳本就會發布/部署腳本。

你的錯誤是關於第1部分,但問題是,至少在它是如何措詞,關於這兩個部分。

因此,要解決第2部分,您需要CREATE權限(無論是按對象,還是在架構上,還是通過像ddl_admin這樣的固定數據庫角色)來創建對象。您還需要能夠參加大會。關於大會的ALTER權限,ALTER ASSEMBLY的MSDN頁面規定:

需要組件的ALTER權限。額外的要求如下:

  • 要改變的組件,其現有的權限集是EXTERNAL_ACCESS,需要EXTERNAL ACCESS ASSEMBLY在服務器上權限。
  • 要更改現有權限集爲「不安全」的程序集,需要在服務器上有不安全組裝權限。
  • 要將組件的權限集更改爲EXTERNAL_ACCESS,需要服務器上的外部訪問組件權限。要將程序集的權限集更改爲UNSAFE,需要服務器上的UNSAFE ASSEMBLY權限。
  • 指定WITH UNCHECKED DATA,要求ALTER ANY SCHEMA權限。

如果大會用的PERMISSION_SET要麼EXTERNAL_ACCESSUNSAFE,然後之前創建大會上創建的,你應該已經簽署了大會(可能是在任何情況下,一個好主意),然後在該組件中創建一個非對稱密鑰[master],然後從該不對稱密鑰創建一個登錄,最後授予該登錄EXTERNAL ACCESS ASSEMBLYUNSAFE ASSEMBLY。除非您絕對必須,否則請勿將設置爲將包含程序集的數據庫設置爲TRUSTWORTHY ON,例如在加載不支持的.NET Framework庫的情況下,因爲您無法重新簽名這些數據庫。

有關在使用Visual Studio/SSDT時處理創建非對稱密鑰和登錄的分步指南,請參閱我在SQL Server Central上發佈的3部分文章,其中介紹了VS和VS的其他細微差別和SSDT:

Stairway to SQLCLR Level 6: Development Tools Intro(本網站要求免費註冊)。

7級專門處理安全/非對稱密鑰/登錄的內容,但最好從6級開始,因爲它是級別7和8的設置(它確實是一個必須被破壞的長文章up ;-)。

0

程序集所有者必須是您用於部署程序集的用戶,或者所有者必須是該用戶所屬的角色。設置裝配一個「安全」的許可

部署需要以下內容:

  • db_DDLAdmin - 這個權限授予創建和修改的組件的權限和對象部署
  • 數據庫級視圖定義類型 - 爲了部署
  • 數據庫級要求連接 - 授予連接到數據庫中的「external_acc的

部署的能力ESS'許可或‘不安全’的權限設置組件需要以下附加權限:

  • Trustworthy數據庫選項設置爲ON
  • 您使用部署必須具有不安全大會或外部訪問服務器權限的登錄。

編號: Required Permissions for SQL Server Data Tools

+1

「TRUSTWORTHY」數據庫選項需要爲「ON」是絕對不正確的。只有在少數情況下才需要它,主要是在加載已經簽名的第三方DLL時,您不能重新簽名(典型情況是不受支持的.NET Framework庫)。除非絕對沒有其他辦法,否則將TRUSTWORTHY設置爲ON是非常糟糕的做法。 –

+0

我同意,我會非常猶豫地打開該選項。當然是最後的手段。但是,這正是MSDN所說的,所以我將它包含在內。 – WPrecht

+0

我只是看着,看到它寫在那裏,但它是相當具體的不正確。因此,這個建議不應該在這裏傳播。權限要求更加複雜,並且在嘗試加載UNSAFE或EXTERNAL_ACCESS程序集時未顯示TRUSTWORTHY ON或簽名,密鑰和登錄信息時,會明確聲明。另外,我不相信組件的所有者需要成爲部署組件的人員,但我只作爲系統管理員進行部署,因此沒有對其進行測試。 –