2016-06-10 15 views
2

CLR integration ist standardmäßig deaktiviert. Mein Verständnis der instructions zu aktivieren, bedeutet, dass es für den gesamten Server aktiviert oder deaktiviert ist. Ist es möglich, sie pro Datenbank zu aktivieren? Wenn das so ist, wie?Wie aktiviert CLR-Integration für nur eine bestimmte Datenbank in Microsoft SQL Server?

+0

Nein, dies ist eine Option auf Instanzebene. Es gibt keine Option, um es für bestimmte Datenbanken zu aktivieren. –

+1

Mögliches Duplikat von [Ist die "CLR-Integration" auf Datenbank- oder Server-/Instanzebene aktiviert?] (Http://stackoverflow.com/questions/30871314/is-clr-integration-enabled-at-a-database-) Level-oder-Server-Instanz-Ebene). –

Antwort

2

Aktivieren der Option "CLR-Integration" ist nur eine Option auf Server/Instanzebene; Es kann nicht separat pro Datenbank behandelt werden.

Obwohl ich nicht sicher bin, warum es wichtig wäre, dies auf Datenbankbasis zu handhaben, könnten Sie immer DENY CREATE ASSEMBLY in Datenbanken verwenden, in denen Sie keinen benutzerdefinierten SQLCLR-Code verwenden möchten.

UPDATE

ich nur DENY CREATE ASSEMBLY TO [Public]; getestet und das funktioniert nicht für Anmeldungen, die ein Mitglied der sysadmin festen Serverrolle sind. So eine andere Möglichkeit zu effektiv verweigern die Erlaubnis zu einer Aktion ist die Aktion über eine DDL Trigger abfangen und eine ROLLBACK ausgeben, die die Aktion abbrechen wird.

Das Folgende ist ein DDL-Trigger, in welcher Datenbank funktioniert es in und Fallen beiden CREATE ASSEMBLY und ALTER ASSEMBLY Aussagen erstellt wird, aber immer noch erlaubt DROP ASSEMBLY (DDL_ASSEMBLY_EVENTS als Ereignisgruppe alle drei Maßnahmen würde nicht zulassen verwenden):

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 

Mit diesen DDL-Trigger an Ort und Stelle, wenn ich die Versammlung zu schaffen versucht, ich folgende Fehlermeldung jetzt erhalten, auch wenn mein Login ist ein sysadmin:

Msg 50000, Ebene 16, Status 1, Prozedur PreventCreateAssembly, Line 59
Kann Assemblies nicht erstellen oder ändern!
Msg 3609, Ebene 16, Status 2, Zeile 54
Die Transaktion wurde im Trigger beendet. Der Stapel wurde abgebrochen.

+0

Natürlich verhindert dies nicht, dass eine Anmeldung in der sysadmin-Rolle den Auslöser deaktiviert, aber wenn das das Problem ist, das Sie haben, dann ist Ihr Problem nicht mehr wirklich ein technisches Problem. –

+0

@BaconBits True und True. Allerdings gibt es keine Möglichkeit, einen "Systemadministrator" daran zu hindern, irgendetwas zu tun: Die CLR-Integration ein-/ausschalten oder die "CREATE ASSEMBLY" neu zuweisen, das hat funktioniert. Ich denke, der Vorteil hier ist, dass zumindest etwas wie ein automatisiertes Rollout-Skript (das als 'sysadmin' läuft) verhindert werden würde, wo es erlaubt wäre, wenn man nur ASSEMBLY zu öffentlich machen würde. –