Unable to open the physical file XXX.mdf

Dostałem od znajomego bazę danych, którą chciałem podłączyć do SQL Server za pomocą opcji Attach:

Niestety, wszystkie próby na Windows 7 kończyły się komunikatem:

TITLE: Microsoft SQL Server Management Studio

------------------------------

Attach database failed for Server 'GUTEK-NOTEBOOK'.  (Microsoft.SqlServer.Smo)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.0.2531.0+((Katmai_PCU_Main).090329-1015+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Attach+database+Server&LinkId=20476

------------------------------

ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

------------------------------

Unable to open the physical file "D:\_Projects\VCardStore\VCard.mdf". Operating system error 5: "5(failed to retrieve text for this error. Reason: 15105)". (Microsoft SQL Server, Error: 5120)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.00.2531&EvtSrc=MSSQLServer&EvtID=5120&LinkId=20476

Linki niestety nie dają za dużo informacji a sam opis błędu jest… beznadziejny, osobę, która taki opis wymyśliła powinni wrzucić na kurs komunikacji między ludzkiej, bo błąd może i maszyna zrozumie ale człowiek? To tak jak pomocy technicznej udzielić odpowiedzi na pytanie „Co nie działą?” – „Aplikacja!” :)

Rozwiązanie okazało się beznadziejnie proste (jak już się człek zorientował co może być nie tak… co już nie było takie proste), ale i też głupie, należało otworzyć MS SQL Server Management Studio z prawami administratora :) i Attach już działał poprawnie :)

Opublikowane 13 czerwca 09 03:11 przez Gutek
Filed under: ,

Komentarze:

# GT said on czerwca 13, 2009 17:13:

"Uruchom z prawami administratora" to ostatnio ulubiona odpowiedź programistów. Niby czasem pomaga... Ale skoro ewidentnie widać, że problemem jest brak uprawnień, to może lepiej poszukać czego i gdzie brakuje zamiast zmieniać usera?

Coś nie działa w programie - zmień usera. Jakie to developerskie... ;P

# Gutek said on czerwca 13, 2009 17:45:

@GT

tutaj nie ma innego rozwiazania. Albo tak jak w Win2k8 masz Admina na komputerze gdzie wiekszosc akcji jest odrazu elevated to praw administratora systemu, albo masz Win Vista/7 gdzie UAC (User Access Control) blokuje pewne operacje. W tym wypadku UAC blokuje dodanie bazy danych. Mozna spedzic i tygodnie szukajac obejscia i wpasc na to by wylaczyc UAC, ale jak sie UAC wylaczy to potem roznie bywa z innymi rzeczmi, choc SP1 od Visty staral sie to naprawic.

Wiec co do "ulubionej odpowiedzi programistow", to nie jest tak jak Ci sie wydaje w tym przypadku. Bo nie masz innej opcji (oprocz wylaczenia UAC).

Zreszta duzo rzeczy konfiguracyjnych w systemie nalezy wykonywac na prawach administratora. Na przyklad instalacja Performance Counters na komputerach od Visty w zwyz. Albo zrobisz to za pomoca Setup albo potrzebujesz praw admina - i nie ma magicznej opcji "zezwol na tworzenie performance counters" jest albo Setup ktory poprosi o uprawnienia admina, albo ty uruchomisz skrypt z uprawnieniami admina.

Ale jezeli miales na mysli "jakie uprawnienia potrzebuje UserA do bazy danych by moc na niej poprawnie dzialac?" a odpowiedz jest "nie wiem, daj mu dbowner" to sie zgadzam.

zas co do instalacji i konfiguracji aplikacji na srodowiskach Win Vista/7/Win2k8 to sie nie zgadzam, czesto nie ma innej opcji.

Gutek

# GT said on czerwca 13, 2009 18:07:

Co do instalacji - fakt. Tak jest najrozsądniej. Co do grzebania w opcjach systemu - prawie że prawda. Nie po to jest prawie 50 systemowych uprawnień, żeby operować tylko gotowymi zestawami i pracować albo jako admin albo jako user.

Prawym i "run as admin" jest najprościej. Ale nie dałbym głowy czy najlepiej. A szczerze mówiąc, od programistów (tu twórców SQL) oczekiwałbym, że powiedzą jakich praw wymaga dana operacja. A nie podchodził "jak nie masz admina to spadaj".

Osobiście mnie drażni podejście "wymaga praw admina". BZDURA! Wymaga praw w rejestrze tu i tam, w systemie plików w folderze X i Y, a w prawach systemowych SE_cośtam i SE_blablabla. Co to w ogóle tak naprawdę technicznie znaczy, że coś wymaga praw admnistratora? Nie ma czegoś takiego. Są prawa nadane tu i ówdzie grupie administrators. I te prawa są w danej sytuacji wystarczające, a te dla grupy users - nie. Nie ma żadnej magii ani wymogu bycia adminem. Po prostu ma nadane więcej uprawnień i każdemu innemu userowi można nadać brakujące prawa i MUSI działać.

Całe szczęście, że istnieje Vista i UAC i w ogóle ktoś zmusza programistów do myślenia ;))

# mgrzeg said on czerwca 13, 2009 22:50:

Przypomina mi sie w tym miejscu tekst, jaki jakis czas temu popelnilem na wss: http://www.wss.pl/Articles/8759.aspx

Opisane w nim podejscie rozwiaze wiekszosc podobnych problemow, jednak sa wyjatki, kiedy 'swiety Boze nie pomoze', bo program wprost wymaga, zeby byl uruchomiony przez uzytkownika z odpowiedniej grupy :(. Ja sie spotkalem z takim podejsciem kilkukrotnie i nie bylo innego wyjscia jak tylko dodanie do grupy adminow.

Sa takze przypadki, kiedy nadawanie kolejnych dodatkowych uprawnien mija sie z celem, bo np. program wymaga praw pelnej kontroli dla wielu katalogow systemowych (w tym calego katalogu windows, windows/system32, program files i common files, c:/) oraz rownie wielu galezi rejestru zarowno z HKLM jak oraz HKCR i w sumie lepiej go uruchomic z uprawnieniami admina, niz nadawac kolejne uprawnienia i przywileje. Jest tez tak, ze nadawane uprawnienia dzialaja globalnie, dla kazdego procesu uruchomionego przez usera. I czasem lepiej uruchomic jeden proces, co do ktorego mamy zaufanie i pewnosc, ze user korzystajac z niego nie zrobi systemowi 'kuku', wlasnie w kontekscie innego uzytkownika - odpowiednio uprzywilejowanego. Wtedy zawsze mozna siegnac po CPAU, lub inne podobne narzedzia.

# brejk said on czerwca 14, 2009 01:18:

@Gutek: Szczerze mówiąc - pierwsze słyszę, by trzeba było odpalać SSMS jako admin Windows, by dołączać bazę. A czy próbowałeś to zrobić jako np. login sa w SQL Server? Wg mnie to, czy się taka operacja udaje zależy od dwóch rzeczy: od uprawnień usera na SQL Serverze oraz od dostępu do katalogu z plikiem .mdf dla konta Windows, w kontekście którego działa SQL Server. Chyba, że to koślawy UAC coś tu knoci ;-)

# Gutek said on czerwca 14, 2009 01:38:

@mgrzeg

zgadzam sie absolutnie :) zreszta tez nie zawsze nawet masz "jak wysledzic" jakie uprawnienia potrzebujesz, w szczegolnosci jak jakas akcja idzie po rejestrze dodajac i modyfikujac wpisy ;)

@brejk

sql auth mam wylaczony, tylko za pomoca win auth sie loguje.

zrobilem teraz test:

1) stowrzylem katalog na dysku d

2) wgralem pliki mdf

3) katalogowi nadalem uprawnienia full control dla konta na ktorym SQL Server stoi

4) odpalilem SSMS i probowalem zrobic attach

nie poszlo :(

Test powtorzylem z katalogiem MSSQL\DATA i tez bez powodzenia.

Konto na ktorym sie loguje do SQL Server jest sysadminem i ma to "elevated" w SQL Server zrobione za pomoca tego toola co od SQL Server 2005 SPX istnieje dla Visty (nie pamietam nazwy).

Testy przeprowadzalem na instalacji SQL Server 2008 Dev Edition.

Wiec :) Jak Ci sie uda inaczej to zrobic :) to daj znac, z checia poznam odpowiedz :)

Gutek

# GT said on czerwca 14, 2009 08:17:

Zgadzam się w 100%, że uruchomienie z prawami admina czasem jest najrozsądniejszą opcją. Zdaję sobie sprawę, że aplikacja może sprawdzać czy ktoś jest w grupie administratorów czy nie i wtedy nie ma zmiłuj. Ale poza tym... powrócę do myśli z pierwszego komentarza: jak aplikacja nie działa z powodu braku uprawnień usera, to powinniśmy zacząć myśleć o zmianach w aplikacji i w tym, czego dotyka. A nie zmieniać usera!

"Zmień usera na admina" to rada równie twórcza jak "zainstaluj na Windows 95, bo tam w ogóle nie ma uprawnień, więc musi działać".

Tak, czasem ma sens. Nie odważyłbym się napisać nigdy, że nie. Ale i tak warto wiedzieć DLACZEGO.

# brejk said on czerwca 14, 2009 09:30:

@Gutek: Pewnie dlatego wyłączam UAC, tylko nawet tego nie wiedziałem (działam na Win 7 z wyłączonym UAC i podłączam bazy do SQL Servera bez problemu) ;-)

# brejk said on czerwca 14, 2009 09:42:

@Gutek: Po sprawdzeniu dochodzę jednak do wniosku, że masz rację i jest coś na rzeczy. Ciekawe, że nigdy tego syptomu nie zauważyłem :-)

# Gutek said on czerwca 14, 2009 15:05:

@GT

rozumiem Twoje podejście, ale tak jakby nie tyczy się ono administracji SQL Servera... zreszta MS chyba (tutaj nie jestem pewny, pewnie brejk bedzie wiedzial) do konfiguracji SQL Serwera wymaga praw administracyjnych a to pewnie dlatego ze SQL Server tyka tyle rzeczy, ze jakby to rozpisac na liscie to z 4-5 kartek a4 by sie wypisalo jak nie wiecej.

Co do przykladu powyzej, to nie ma dokaldnego wyjsanienia. Jak chcesz mozesz przesledzic co dokladnie sie dzieje podczas dodawania bazy danych - czy cos w rejestrze jest modyfikowane, itp itd. sadze ze spedzisz nad tym pare ladnych dni i potem sie jeszcze okarze ze mimo ustawienia opdowiednich uprawnien wszedzie wciaz nie bedizesz mogl zrobic attach - ale nie dam sobie glowy obciac. Mam do napisania aplikacje ktora korzysta z bazy danych, jezeli mialbym spedzac 2 tygodnie na ustawianiu uprawnien by tylko "podpiac" baze danych, to bym napisal swoja wlasna w oparciu o plik tekstowy.

@brejk

a widzisz :) ja tez o tym nie wiedzialem az do przed wczoraj :)

# ucel said on lipca 1, 2009 14:07:

Jesli jestes zalogowany jako administrator serwera (SQL Authentication + user z uprawnieniami, np. sa), to nie ma problemu

Logujemy sie wiec z Windows Authentication

* jesli masz wylaczony UAC, to oczywiscie nie ma problemu

* jesli masz wlaczony UAC, to do SQL Serwera przekazywany jest Twpj biezacy Security Token i na jego podstawie przyporzadkowywane sa Ci prawa na serwerze (na podstawie mapowania grup uzytkownikow systemu do grup uzytkownikow serwera). Tyle ze przez UAC przekazywany jest token z uprawnieniami uzytkownika z grupy Users, czyli takiego najnormalniejszego. Jako taki nie masz uprawnien do podlaczenia bazy (no chyba, ze wlaczysz to na serwerze odpowiednim grantem). Opcja 'Run As Admin' powoduje natomiast przekazanie pelnego tokenu, zawierajacego wszystkie Twoje uprawnienia w systemie.

# can_do said on lipca 2, 2009 01:07:

Ja jak widzę na W7 'Operating system error 5' to u mnie do tej pory jest to kwestia za małych uprawnień.

Komentarze anonimowe wyłączone