Het lijkt mij dat je niet zit te wachten op een SQL-code in het antwoord op je vraag. Het belangrijkste aspect van uw vraag is het veiligheidsaspect. Wat moet u doen om uw vereiste te implementeren zonder sysadmin privileges en zonder een nieuw beveiligingslek? Dit is je echte vraag denk ik.
Ik zie minstens 3 manieren om je probleem op te lossen. Maar eerst en vooral een korte uitleg waarom sysadmin-privileges bestaan in alle oplossingen op basis van Extended Stored Procedures . Uitgebreide opgeslagen procedures zoals xp_cmdshell
zijn erg oud. Ze bestonden in ieder geval vóór SQL Server 4.2, de eerste Microsoft SQL Server die onder de eerste Windows NT (NT 3.1) draaide. In de oude versie van SQL Server was ik geen beveiligingsbeperking om dergelijke procedures uit te voeren, maar later maakte men dergelijke beperkingen. Het is belangrijk om te begrijpen dat alle algemene doeleinden procedures waarmee elk proces kan worden gestart onder SQL Server-account zoals xp_cmdshell
en sp_OACreate
moeten heb sysadmin beperking van privileges. Alleen een taakgericht procedures met een duidelijk gebruiksgebied en op rollen gebaseerde machtigingen kunnen het probleem oplossen zonder een beveiligingslek. Dit zijn dus de 3 oplossingsmanieren die ik eerder heb beloofd:
- U maakt een nieuw SQL-account aan op uw SQL-server met sysadmin voorrechten. Vervolgens maakt u een opgeslagen procedure die enkele van Uitgebreide opgeslagen procedures . gebruikt zoals
xp_cmdshell
ofsp_OACreate
en technisch uw vereisten implementeren (exporteer wat informatie naar een CSV-bestand). Met betrekking tot UITVOEREN ALS Clausule (zie http://msdn.microsoft.com/en-us/ bibliotheek/ms188354.aspx ) configureert u de gemaakte opgeslagen procedure zodat deze wordt uitgevoerd onder het account met sysadmin voorrechten. U delegeert de uitvoering van deze procedure aan gebruikers met een SQL-rol, om flexibeler te zijn van de kant van de delegatie van toestemming. - U kunt CLR-opgeslagen procedures gebruiken in plaats van
xp_cmdshell
ensp_OACreate
. U moet ook op rollen gebaseerde machtigingen gebruiken voor de gemaakte procedure. - De eindgebruiker roept niet rechtstreeks een opgeslagen SQL-procedure aan wat u maakt. Er bestaat een stukje software (zoals een WCF-service of een website) die uw opgeslagen SQL-procedure aanroept. U kunt de export naar een CSV-bestand in deze software implementeren en niet in een opgeslagen SQL-procedure.
Op alle manieren van implementatie moet u precies definiëren waar u het wachtwoord zult bewaren van het account waarmee u toegang krijgt tot het bestandssysteem. Er zijn verschillende opties die je hebt, allemaal met bijbehorende voor- en nadelen. Het is mogelijk om imitatie te gebruiken om toegang te verlenen tot het bestandssysteem met het account van de eindgebruiker. De beste manier hangt af van de situatie die u in uw omgeving heeft.