sql >> Databasteknik >  >> RDS >> Sqlserver

Säkerhetsrisker med att sätta pålitlig =på i sql server 2012

TRUSTWORTHY egenskapen för en databas (när den är inställd på ON ) förklarar i huvudsak för SQL Server att koden som finns i den databasen, och som körs i ett efterliknat sammanhang, bör tillåtas nå utanför den databasen samtidigt som det efterliknade säkerhetskontexten bibehålls. Det tillåter också alla SQLCLR-sammansättningar i den databasen ska ställas in på EXTERNAL_ACCESS och UNSAFE , oavsett om den koden når utanför servern eller inte (utanför betydelse:nätverksåtkomst, filsystemåtkomst, registeråtkomst, miljöåtkomst, etc).

Det är ett ganska generiskt sätt att tillåta detta eftersom det täcker all kod i databasen. Att använda certifikat och/eller asymmetriska nycklar för att signera moduler – processer och/eller sammansättningar – möjliggör mer detaljerad kontroll över vilken kod som har vilka behörigheter.

Ställa in en databas till TRUSTWORTHY tillåter också alla processer som börjar i denna databas att nå upp till servernivå och/eller över till andra databaser. Normalt är en process begränsad / i karantän till databasen där den startade. Om databasen ägs av "sa"-inloggningen, kommer alla processer som initieras i den databasen och körs som "dbo" att ha "sa"-privilegier (usch!).

Istället för att försöka beskriva här, i den mängd detaljer som krävs för att fullständigt kommunicera detaljerna om personifiering, förlänga nämnda personifiering, signera moduler, etc, rekommenderar jag att du läser följande resurser om detta ämne:

Du bör undvika att ställa in din databas på TRUSTWORTHY så mycket som möjligt. Om du verkligen måste ha multithreading/async-anrop OCH om du har källkoden och kompilerar sammansättningen, kan jag inte komma på någon anledning att använda SET TRUSTWORTHY ON alternativ. Istället bör du signera sammansättningen med ett lösenord och använd följande kommandon för att ställa in den föredragna metoden för att tillåta EXTERNAL_ACCESS och UNSAFE sammanställningar:

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 är på plats kan du gå till databasen där din assembly har laddats och körts:

ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;

Eller så kunde du ha inkluderat WITH PERMISSION_SET = UNSAFE i slutet av CREATE ASSEMBLY kommando.



  1. MYSQL JOIN om fältet inte är null

  2. SQL Server-stödda versioner Matrix

  3. Vad är SQL Server-motsvarigheten till INET_ATON

  4. Välj senaste infognings-id