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:
- Alstublieft, alstublieft , stop alsjeblieft met het gebruik van imitatie, TRUSTWORTHY en Cross-DB Ownership Chaining
- Richtlijnen voor het gebruik van de TRUSTWORTHY-database-instelling in SQL Server
- Database-imitatie uitbreiden met EXECUTE AS
Dit is een zeer informatief document dat de meeste aspecten van dit onderwerp behandelt, en er wordt ook naar verwezen op de gelinkte pagina hierboven. - Trap naar SQLCLR niveau 4:beveiliging (EXTERNE en ONVEILIGE assemblages)
Dit is een artikel dat ik heb geschreven als onderdeel van een serie over SQLCLR met voorbeelden die de verschillen illustreren tussen de TRUSTWORTHY-methode en de Signed Assembly-based Login-methode; Gratis registratie is vereist.
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.