sql >> Database >  >> RDS >> Sqlserver

Waarom werkt xp_cmdshell niet in SQL Server 2012?

Dit is standaard uitgeschakeld vanaf SQL Server 2005, toen ze de Oppervlakteconfiguratietool , in een poging om SQL Server standaard veiliger te maken. Die tool is inmiddels buiten gebruik gesteld, maar je kunt het gedrag nog steeds controleren met sp_configure . Een voorbeeld wordt getoond op MSDN :

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

(Ik heb hier ook geblogd over vele jaren geleden .)

De reden is dat dit een potentieel beveiligingslek is. Als u SQL Server toestaat om xp_cmdshell uit te voeren , dan kunnen ze in theorie elke besturingssysteem commando daar, het omzeilen van alle beveiliging die u dacht te hebben. Dit is vooral problematisch wanneer het SQL Server-serviceaccount en/of het proxyaccount is verhoogd tot sysadmin of andere niveaus, omdat dat gemakkelijker is dan expliciet alleen de exacte dingen te definiëren die ze zouden moeten kunnen doen.

In plaats van het in en uit te schakelen om opdrachtregelinteractie te ondersteunen, is een populaire manier om de functionaliteit van het besturingssysteem bloot te leggen en toch enige controle over de beveiliging te hebben, het implementeren van de functionaliteit op besturingssysteemniveau die u nodig hebt met behulp van SQL-CLR. Hier is een goed startpunt voor toegang tot de bestandssysteem met CLR (Als je echter rondkijkt, zul je veel modernere en uitgebreidere benaderingen vinden).



  1. rare karakters zoals ‪ ‬ ‏

  2. fout in uw SQL-syntaxis .. in de buurt van 'sleutel'

  3. Voeg meerdere rijen in met select

  4. Prestaties van recursieve opgeslagen procedures in MYSQL om hiërarchische gegevens te verkrijgen