sql >> Databáze >  >> RDS >> Sqlserver

Bezpečnostní rizika nastavení důvěryhodného =zapnuto na serveru SQL 2012

TRUSTWORTHY vlastnost databáze (při nastavení na ON ) v podstatě prohlašuje SQL Serveru, že kódu obsaženému v této databázi a spouštěnému v zosobněném kontextu by mělo být umožněno dosáhnout mimo tuto databázi při zachování tohoto zosobněného kontextu zabezpečení. Umožňuje také vše Sestavy SQLCLR v této databázi mají být nastaveny na EXTERNAL_ACCESS a UNSAFE , ať už se tento kód dostane mimo server (vnější význam:síťový přístup, přístup k systému souborů, přístup k registru, přístup k prostředí atd.).

Je to spíše obecný způsob, jak to umožnit, protože pokrývá veškerý kód v databázi. Použití certifikátů a/nebo asymetrických klíčů k podepisování modulů – procesů a/nebo sestavení – umožňuje podrobnější kontrolu nad tím, jaký kód má jaká oprávnění.

Nastavení databáze na TRUSTWORTHY také umožňuje, aby jakýkoli proces začínající v této databázi dosáhl až na úroveň serveru a/nebo napříč jinými databázemi. Normálně je proces omezen / umístěn do karantény v databázi, kde začal. Pokud je databáze ve vlastnictví "sa" přihlášení, pak jakýkoli proces zahájený v této databázi a běžící jako "dbo" bude mít fakticky "sa" privilegia (fuj!).

Spíše než se zde snažit popsat množství podrobností, které jsou nutné k úplnému sdělení specifik o předstírání jiné identity, rozšíření zmíněného předstírání identity, modulů podepisování atd., doporučuji prostudovat si následující zdroje na toto téma:

Měli byste se vyhnout nastavení databáze na TRUSTWORTHY co nejvíc to půjde. Pokud opravdu musíte mít vícevláknová / asynchronní volání A pokud máte zdrojový kód a kompilujete sestavení, pak mě nenapadá důvod, proč použít SET TRUSTWORTHY ON volba. Místo toho byste měli sestavení podepsat heslem a pomocí následujících příkazů nastavte preferovanou metodu povolení EXTERNAL_ACCESS a UNSAFE sestavení:

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

Jakmile je to na místě, můžete přejít do databáze, kde bylo vaše sestavení načteno a spuštěno:

ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;

Nebo jste mohli zahrnout WITH PERMISSION_SET = UNSAFE na konci CREATE ASSEMBLY příkaz.



  1. Počítá se zpětné lomítko \ jako znak v MySQL?

  2. V MySQL 8.x v systému Windows 10 nelze nastavit názvy nižších_případů_tabulek

  3. Import zazipovaného CSV souboru do PostgreSQL

  4. Komplikovaný SQL Query – hledání položek odpovídajících více různým cizím klíčům