it-swarm.it

DLL di terze parti nel CLR di SQL Server

Devo usare una terza parte DLL in un codice c # di trigger nel CLR di SQL Server

Ma quando provo ad aggiungere un riferimento, mostra solo alcune DLL di SQL Server.

Come posso aggiungere il mio dll di terze parti a SQL Server?

14
AVEbrahimi

È possibile solo aggiungere riferimenti a quegli assembly che sono stati registrati con SQL Server. Se non sono registrati, non verranno visualizzati nella finestra di dialogo Aggiungi riferimenti.

Esistono diversi passaggi necessari per registrare una DLL, in primo luogo è necessario riconfigurare il database:

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;

Fatto ciò, Sql Server è abilitato per CLR. Successivamente, dovrai registrare l'Assemblea:

CREATE Assembly [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE

Se quest'ultimo script viene eseguito correttamente, l'Assemblea è ora registrata e verrà visualizzata nella finestra di dialogo Aggiungi riferimenti.

Ciò che dovrete considerare, tuttavia, è la sicurezza dell'applicazione della configurazione CLR del vostro Sql Server:

  1. Preferisci registrare un Assembly come SAFE, solo in circostanze eccezionali dovresti usare EXTERNAL_ACCESS O UNSAFE.
  2. Non aspettarti di essere in grado di fare tutto il possibile sul CLR full-trust (ovvero, non sul CLR ospitato da Sql Server): SQLCLR è un runtime sandbox.
  3. Non tentare di caricare gli assembly in modo dinamico, poiché Assembly.Load() è intenzionalmente limitato.
  4. Potrebbe essere necessario assicurarsi che la libreria di terze parti sia firmata con una chiave pubblica se si prevede di utilizzare UNSAFE.
  5. L'esecuzione del codice viene eseguita nel contesto dell'identità del servizio che esegue Sql Server (credo!)
  6. L'accesso al database effettuato da un Assembly ospitato (ad esempio tramite context connection = true;) Viene eseguito nel contesto dell'utente connesso, quindi è necessario assicurarsi di essere a conoscenza dell'accesso che tale libreria ha ai propri dati.
15
Matthew Abbott

Presumo che tu stia chiedendo delle alternative all'installazione degli assembly CLR SQL da Visual Studio.

Non è richiesto il codice in Visual Studio.

Distribuzione di oggetti di database CLR su MSDN descrive in dettaglio le opzioni, comprese le istruzioni SQL e gli script di distribuzione.

5
Oded

Uso una grande terza parte DLL che prende una pagina Web e la converte in PDF.

PDF viene salvato su una condivisione file e il database viene aggiornato in base alla posizione e al tipo.

Questo è un processo in 3 passaggi:

  1. Creare un'app console che utilizza DLL di terze parti per creare PDF e accettare l'URL e FilePath come parametri e restituire PDF dimensioni e numero di pagine.

  2. Creare una procedura memorizzata CLR che quindi chiama l'app console sul server

  3. Ho inserito tutto in un'unica procedura memorizzata che chiama l'app CLR per creare il PDF e quindi scrivo i metadati su di esso nel database.

Mi rendo conto che non è perfetto e non dovresti assolutamente fare qualcosa di così folle in un grilletto!

Lo menziono solo qui per gli altri con domande sull'uso di DLL di terze parti nel loro CLR.

La mia speranza è che eseguendo la rotazione di una console cmd.exe per eseguire la DLL di terze parti, invece di eseguire tutto in-proc, se si blocca, non influirà negativamente su SQL Server. Questo è quello che spero.

Per favore, commenta se questo è un approccio davvero negativo e perché.

1
MikeTeeVee