sql >> Database >  >> RDS >> Sqlserver

Beveiligingsrisico's van het instellen van betrouwbaar =ingeschakeld in sql server 2012

De TRUSTWORTHY eigenschap van een database (indien ingesteld op ON ) verklaart in wezen aan SQL Server dat code in die database, en die wordt uitgevoerd in een geïmiteerde context, toestemming moet krijgen om buiten die database te komen, terwijl die geïmiteerde beveiligingscontext behouden blijft. Het staat ook alle toe SQLCLR-assemblages in die database moeten worden ingesteld op EXTERNAL_ACCESS en UNSAFE , ongeacht of die code zich buiten de server bevindt (betekent buiten:netwerktoegang, toegang tot bestandssysteem, registertoegang, toegang tot de omgeving, enz.).

Het is een vrij algemeen middel om dit mogelijk te maken, aangezien het alle code in de database omvat. Het gebruik van certificaten en/of asymmetrische sleutels om modules (procs en/of assembly's) te ondertekenen, zorgt voor meer gedetailleerde controle over welke code welke rechten heeft.

Een database instellen op TRUSTWORTHY staat ook toe dat elk proces dat in deze database start, tot op het serverniveau en/of andere databases reikt. Normaal gesproken wordt een proces beperkt / in quarantaine geplaatst in de database waar het is gestart. Als de database eigendom is van de "sa"-login, heeft elk proces dat in die database wordt gestart en als "dbo" wordt uitgevoerd, in feite "sa"-rechten (yikes!).

In plaats van hier te proberen de hoeveelheid details te beschrijven die nodig zijn om de details over imitatie volledig te communiceren, genoemde imitatie uit te breiden, modules te ondertekenen, enz., raad ik aan de volgende bronnen over dit onderwerp door te nemen:

Vermijd het instellen van uw database op TRUSTWORTHY zo veel mogelijk. Als je echt multithreading / async-aanroepen moet hebben EN als je de broncode hebt en de assembly aan het compileren bent, dan kan ik geen reden bedenken om de SET TRUSTWORTHY ON te gebruiken keuze. In plaats daarvan moet u de assembly ondertekenen met een wachtwoord en gebruik de volgende opdrachten om de voorkeursmethode in te stellen voor het toestaan ​​van EXTERNAL_ACCESS en UNSAFE samenstellingen:

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];

Als dat eenmaal op zijn plaats is, kun je naar de database gaan waar je assembly is geladen en uitgevoerd:

ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;

Of u had WITH PERMISSION_SET = UNSAFE . kunnen opnemen aan het einde van de CREATE ASSEMBLY commando.



  1. "WAARSCHUWING:Mismatch gevonden tussen sl_table en pg_class." in Slony-I

  2. Slaapstand, C3P0, Mysql -- Gebroken pijp

  3. SELECT retourneert meerdere rijen als string

  4. Hoe een unieke index op meerdere kolommen te definiëren in sequelize