2010-07-09 53 views
3

我需要使用CLR來製作一個使用.net 3.5中的東西的存儲過程。如果我不把PERMISSION_SET =不安全我無法做到這一點就只能等死,給我這個錯誤在SQL 2005中放置WITH PERMISSION_SET = UNSAFE會不好嗎?

部署錯誤SQL01268:淨的SqlClient 數據提供:消息6503,級別16, 國家12 ,Line 1 Assembly 'system.core,version = 3.5.0.0, culture = neutral, publickeytoken = b77a5c561934e089'。在SQL目錄中找不到 。執行批次爲 時發生了 錯誤。

所以我發現這篇文章

http://weblogs.asp.net/paulomorgado/archive/2009/06/13/playing-with-sql-server-clr-integration-part-iv-deploying-to-sql-server-2005.aspx

最後一行說,這

「現在數據庫管理員不會絕對讓我用這一點,但很好玩來構建它「。我不確定他是否將權限設置爲不安全。

因此,如果你這樣做可以發生一些巨大的漏洞?

回答

5

有制約什麼組件可以做

SAFE三種不同PERMISSION_SET選項 - 限制組件,以託管代碼

EXTERNAL_ACCESS - 允許訪問文件,網絡資源等。

UNSAFE - 無限制訪問 - 包括執行非託管代碼

MSDN docs給出以下gui舞蹈

指定UNSAFE使程序集中的代碼完全自由地執行SQ​​L Server進程空間中的操作,這可能會影響SQL Server的健壯性。 UNSAFE程序集也可能會破壞SQL Server或公共語言運行庫的安全系統。 UNSAFE權限只應授予高度信任的程序集。

如果您的程序集只使用.NET 3.5的功能,我不明白爲什麼它需要UNSAFE訪問。

您可能正在使用System.Core庫中不允許使用的類型或成員之一。微軟有這些列表。 Disallowed Types and Members in System.Core.dll

這裏還有一些更多信息。 Host Protection Attributes and CLR Integration Programming

+0

因此system.core會很漂亮必須信任嗎? – chobo2 2010-07-09 00:55:21

+0

我不太確定 - 看看編輯中的兩個鏈接。 – 2010-07-09 01:12:28

+0

我剛剛嘗試在用於SQL Server 2005的CLR用戶定義函數中使用擴展方法時出現同樣的問題。在我的本地機器上工作正常,我正在運行sql 2008開發版。我認爲這是因爲我的擴展類被標記爲靜態,通過上面的鏈接閱讀後可能是不安全的,可能是因爲線程我不知道。所以我刪除了擴展方法並創建了一個單獨的工具類,一切都很好。 – 2011-11-27 19:50:35

-3

對不起,很明顯,但「不安全」的哪一部分很難理解?

您可以:

  • 摧毀你的SQL Server和操作系統安裝
  • 引入內存泄漏
  • 添加不穩定

我假設您問題相關的"How to make this CLR work with 2005?"要使用方法這可能會有後兩種副作用...

+0

不安全可能意味着很多事情。這可能意味着你試圖安裝的是來自未經驗證的第三方,可能會做壞事。 – chobo2 2010-07-09 17:53:56

+0

這意味着「不安全」......但它不是我的SQL Server安裝。任何需要不安全的東西都應該在客戶當中。 – gbn 2010-07-09 18:22:42