Answered by:
detach-elt mdf fájl átnevezése xp_cmdshell-lel

Question
-
Sziasztok, a problémám a következő:
scriptből detach-elek egy adatbázist, majd a detach-elt fájlokat szeretném átnevezni xp_cmdshell-lel. Átnevezés helyett sajnos "hozzáférés megtagadva" üzenetet kapok. Akkor is ha bezárom a Management Studiot, és nyitok egy újat, és onnan próbálom külön futtatni az átnevezést. Viszont ha a fájt "kívülről" elmozgatom a helyéről, majd visszarakom a helyére, akkor már lefut az átnevezés szó nélkül.
A kód:
exec sp_detach_db 'database'
go
exec
xp_cmdshell 'rename d:\mssql\data\database.mdf database.old.mdf'exec
xp_cmdshell 'rename d:\mssql\data\database_log.ldf database_log.old.ldf'go
Reprodukálható ez nálatok? Van valakinek megoldása (vagy legalább tippje)?
Kösz!
Szabolcs
Saturday, November 15, 2008 5:48 PM
Answers
-
Szia!
Ez eléggé buktának tűnik... Az a helyzet, hogy az SQL Serverben a DBCC DETACHDB valamiért úgy lett implementálva, hogy amikor lefut, akkor a detacsolt fájlok jogosultságát átállítja, méghozzá úgy, hogy levesz róluk minden létező jogot, és egyedül a detacsot futtató felhasználónak lesz rá joga.
A "tűnik" szót azért írtam oda, mert csak tűnik, de nem az. Ha ez a saját kis játszótered, akkor csak egy kicsi hekk kell hozzá:
Code SnippetEXECUTE AS LOGIN='tivadar'
exec sp_detach_db 'database'
exec xp_cmdshell 'rename d:\mssql\data\database.mdf database.old.mdf'
exec xp_cmdshell 'rename d:\mssql\data\database_log.ldf database_log.old.ldf'
REVERT
GO
Itt a tivadar login egy SQL account a sysadmin role-ban. Mivel neki nincsen windows accountja, a DBCC hoppon marad, és nem túrja szét a jogosultságokat. (Ezután akár már a saját, lokáladmin accountoddal is tudod módosítani a fájlnevet.) (a felesleges go-t kivettem)
Több infó erről a feature-ről a Books Online-ban: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/849b9f34-baac-48f2-b953-7bc96f58526f.htm
Magánvélemény: Komolyabb helyen nem használok xp_cmdshellt. Inkább scriptelek kívülről, ha lehet, és SQLCMD-vel tolom le az SQL torkán azt, amit le kell. A security mindig jó, és mióta van Powershell, senki sem mondhatja, hogy nehéz scriptet írniSunday, November 16, 2008 2:46 PM
All replies
-
a kollega Vistan kuzd vele, en megneztem XPn.
Code Snippetcreate
database PROBAgo
use
PROBAselect
* from sysfilesgo
use
masterexec
sp_detach_db 'PROBA'go
-- ide be kell irni a megfelelo utvonalat :)
exec
xp_cmdshell 'copy D:\SqlData\MSSQL.1\MSSQL\DATA\PROBA.mdf D:\SqlData\MSSQL.1\MSSQL\DATA\PR.mdf'eredmeny:
Code Snippetoutput
A hozzáférés megtagadva
.0 fájl másolása történt meg
.NULL
(
3 row(s) affected)de a process explorer szerint semmi sem fogja a fajlt
:-oa total cmd siman lemasolja
, sot le is tudja torolni.Ha TCvel elrakom innen a fajlt aztan vissza
, akkor mar az SQL is tudja kezelni.az SQL service Local systemmel fut.
a gepen nincs megosztas, nem halozati tag, tehat security fulet nem hoz a properties ablak, a fajl tulajdonosa a builtin/administrators, eppugy mint a hasznalatban levo fajloknak is.
ha elmozgatom meg vissza rakom, akkor en leszek az owner (en amugy localadmin vagyok termeszetesen
)
es persze utana mar az SQL is viszi ahova csak kell
mi lehet a bibi??
Saturday, November 15, 2008 7:14 PM -
Jogosultság, sql service account-nak a file-on milyen joga van?.
Lásd: (http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2571364&SiteID=1)
Sunday, November 16, 2008 8:08 AM -
Szia!
Ez eléggé buktának tűnik... Az a helyzet, hogy az SQL Serverben a DBCC DETACHDB valamiért úgy lett implementálva, hogy amikor lefut, akkor a detacsolt fájlok jogosultságát átállítja, méghozzá úgy, hogy levesz róluk minden létező jogot, és egyedül a detacsot futtató felhasználónak lesz rá joga.
A "tűnik" szót azért írtam oda, mert csak tűnik, de nem az. Ha ez a saját kis játszótered, akkor csak egy kicsi hekk kell hozzá:
Code SnippetEXECUTE AS LOGIN='tivadar'
exec sp_detach_db 'database'
exec xp_cmdshell 'rename d:\mssql\data\database.mdf database.old.mdf'
exec xp_cmdshell 'rename d:\mssql\data\database_log.ldf database_log.old.ldf'
REVERT
GO
Itt a tivadar login egy SQL account a sysadmin role-ban. Mivel neki nincsen windows accountja, a DBCC hoppon marad, és nem túrja szét a jogosultságokat. (Ezután akár már a saját, lokáladmin accountoddal is tudod módosítani a fájlnevet.) (a felesleges go-t kivettem)
Több infó erről a feature-ről a Books Online-ban: ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/849b9f34-baac-48f2-b953-7bc96f58526f.htm
Magánvélemény: Komolyabb helyen nem használok xp_cmdshellt. Inkább scriptelek kívülről, ha lehet, és SQLCMD-vel tolom le az SQL torkán azt, amit le kell. A security mindig jó, és mióta van Powershell, senki sem mondhatja, hogy nehéz scriptet írniSunday, November 16, 2008 2:46 PM -
Szia, kösz szépen a megoldást!
Igazából a kód generált lesz, és leginkább olyan szervereken fog futni, ahol SQL szinten nagyobb szabadságot élvezünk, mint oprendszer szinten, úgyhogy maradunk SQL oldalon.
Monday, November 17, 2008 6:59 PM