2016-06-10 43 views
2

CLR integration默認禁用。我對instructions的理解意味着它對整個服務器都是啓用或禁用的。是否有可能在每個數據庫的基礎上啓用它?如果是這樣,怎麼樣?如何爲Microsoft SQL Server中的特定數據庫啓用CLR集成?

+0

不,這是一個實例級選項。 沒有選項爲特定數據庫啓用它。 –

+1

[在數據庫級別或服務器/實例級別啓用「CLR集成」的可能重複嗎?](http://stackoverflow.com/questions/30871314/is-clr-integration-enabled-at-a-database-級或最服務器實例級)。 –

回答

2

啓用「CLR集成」是僅服務器/實例級選項;它不能單獨處理每個數據庫。但是,雖然我不確定爲什麼要按每個數據庫處理此問題,但您可以在數據庫中始終使用DENY CREATE ASSEMBLY,因爲您不希望使用自定義SQLCLR代碼。

UPDATE

我只是測試DENY CREATE ASSEMBLY TO [Public];,這不會爲是sysadmin固定服務器角色成員的註冊工作。所以有效的另一種方式拒絕某個動作的權限是通過DDL Trigger來捕獲該動作,併發出將取消動作的ROLLBACK

下面是一個DDL觸發器,可以在任何數據庫中,就是在和陷阱,同時創建CREATE ASSEMBLYALTER ASSEMBLY報表工作,但仍允許DROP ASSEMBLY(使用DDL_ASSEMBLY_EVENTS作爲事件組將禁止所有三個動作):

USE [db_name]; 
GO 
CREATE TRIGGER [PreventCreateAssembly] 
ON DATABASE 
AFTER ALTER_ASSEMBLY, CREATE_ASSEMBLY -- DDL_ASSEMBLY_EVENTS 
AS 

RAISERROR(N'Cannot CREATE or ALTER Assemblies!', 16, 1); 
ROLLBACK; 
GO 

有了這個DDL觸發器的地方,當我試圖創建大會,現在我收到以下錯誤,即使我的登錄是sysadmin

消息50000,級別16,狀態1,Procedure PreventCreateAssembly,Line 59
無法創建或修改程序集!
消息3609,級別16,狀態2,行54
事務在觸發器中結束。該批次已被中止。

+0

當然,這不會阻止sysadmin角色中的登錄禁用觸發器,但如果這是您遇到的問題,那麼您的問題就不再是技術問題了。 –

+0

@BaconBits True和True。儘管如此,沒有任何辦法可以防止「sysadmin」做任何事情:打開/關閉「CLR集成」或重新授予「CREATE ASSEMBLY」有效。我認爲這裏的好處是,至少像自動推出腳本(作爲'sysadmin'運行)將被阻止,如果只允許將公共組件創建到公共目錄,那麼它將被允許。 –

相關問題