sql >> Database teknologi >  >> RDS >> Sqlserver

Sikkerhedsrisici ved at indstille troværdig =til i sql server 2012

Den TRUSTWORTHY egenskab for en database (når den er sat til ON ) erklærer i det væsentlige til SQL Server, at kode, der er indeholdt i den pågældende database, og som udføres i en efterlignet kontekst, skal have tilladelse til at nå uden for denne database, mens den efterlignede sikkerhedskontekst bibeholdes. Det giver også mulighed for alle SQLCLR samler i den database, der skal indstilles til EXTERNAL_ACCESS og UNSAFE , uanset om koden når uden for serveren eller ej (udenfor betydning:netværksadgang, filsystemadgang, registreringsdatabaseadgang, miljøadgang osv.).

Det er et ret generisk middel til at tillade dette, da det dækker al kode i databasen. Brug af certifikater og/eller asymmetriske nøgler til at signere moduler – procs og/eller samlinger – giver mulighed for mere detaljeret kontrol over, hvilken kode der har hvilke tilladelser.

Indstilling af en database til TRUSTWORTHY gør det også muligt for enhver proces, der starter i denne database, at nå op til serverniveau og/eller over til andre databaser. Normalt er en proces begrænset / i karantæne til den database, hvor den startede. Hvis databasen ejes af "sa"-logonet, vil enhver proces, der startes i den database og kører som "dbo", faktisk have "sa"-privilegier (yikes!).

I stedet for at prøve at beskrive her, i mængden af ​​detaljer, der kræves for fuldt ud at kommunikere detaljerne om personefterligning, udvide nævnte personefterligning, underskrive moduler osv., anbefaler jeg, at du læser følgende ressourcer om dette emne:

Du bør undgå at indstille din database til TRUSTWORTHY så meget som muligt. Hvis du virkelig skal have multithreading / async opkald OG hvis du har kildekoden og kompilerer samlingen, så kan jeg ikke komme i tanke om en grund til at bruge SET TRUSTWORTHY ON mulighed. I stedet bør du underskrive forsamlingen med en adgangskode og brug følgende kommandoer til at opsætte den foretrukne metode til at tillade EXTERNAL_ACCESS og UNSAFE samlinger:

USE [master];
  CREATE ASYMMETRIC KEY [ClrPermissionsKey]
    AUTHORIZATION [dbo]
    FROM EXECUTABLE FILE = 'C:\path\to\my\assembly.dll';

CREATE LOGIN [ClrPermissionsLogin]
  FROM ASYMMETRIC KEY [ClrPermissionsKey];

GRANT UNSAFE ASSEMBLY TO [ClrPermissionsLogin];

Når det er på plads, kan du gå til databasen, hvor din samling er blevet indlæst og køre:

ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;

Eller du kunne have inkluderet WITH PERMISSION_SET = UNSAFE i slutningen af ​​CREATE ASSEMBLY kommando.



  1. Microsoft Access Tips og tricks Del 2 – Formularer

  2. Flet rækker i samme id til matrix

  3. MySQL Store Image BLOB Dårlig praksis ydeevne

  4. Send en række tags til en plpgsql-funktion og brug den i WHERE-tilstand