UTWÓRZ PLIK napotkał błąd systemu operacyjnego 5 (Odmowa dostępu.)

13

Próbuję wykonać następujący skrypt w SQL Server Management Studio:

USE [master]
GO

CREATE DATABASE [test1] ON PRIMARY (
  NAME = N'test1', 
  FILENAME =
    N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf',
  SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB)
LOG ON (
  NAME = N'test1_log',
  FILENAME =
    N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1_log.ldf',
  SIZE = 164672KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

Ale pojawia się błąd:

Msg 5123, poziom 16, stan 1, wiersz 2
UTWÓRZ PLIK napotkał błąd systemu operacyjnego 5 (odmowa dostępu.)
Podczas próby otwarcia lub utworzenia fizycznego pliku
„C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DANE \ test1.mdf ”.

Wiadomość 1802, poziom 16, stan 4, wiersz 2
Tworzenie bazy danych nie powiodło się. Nie można utworzyć niektórych wymienionych nazw plików. Sprawdź powiązane błędy.

Mam już wszystkie uprawnienia do roli dla mojego użytkownika, jakieś pomysły na to, co jest nie tak?

thiagocfb
źródło
1
„Twój użytkownik” lub użytkownik, na którym działa Twoja usługa? Proces serwera spróbuje utworzyć ten plik, a nie użytkownika.
1
Czy możesz sprawdzić, czy plik już istnieje? (Być może z poprzednich prób) Jeśli istnieje i jest otwarty przez SqlServer, dostaniesz błąd odmowy dostępu
1
Usługi-> Serwer Sql-> Podwójne kliknięcie-> Strona drugiej zakładki (połączenie?)
1
@ thiagocfb Start-> Uruchom-> services.msc Przewiń listę usług, aż znajdziesz SQL Server.
Kliknij
1
Czy próbowałeś po prostu uruchomić zwykły CREATE DATABASE [test1]; GO?
swasheck,

Odpowiedzi:

19

Otrzymujesz błąd uprawnień. Konto, na którym działa SQL Server, nie ma wymaganych uprawnień do folderu, który będzie zawierał pliki bazy danych.

Musisz dać konto, na którym działa SQL Server (nie twoje konto), pełną kontrolę nad C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA.

mrdenny
źródło
Tak, problemem był użytkownik, który uruchomił usługę! :) Dzięki !
thiagocfb
Ogólnie usługa systemu Windows Server SQL działa pod Network Servicekontem. Więc odpowiednie prawa będą musiały zostać zmodyfikowane w odpowiednich katalogach dla tego konta, jeśli tak jest również na komputerze.
RBT
3
Przynajmniej przy uruchamianiu GUI SSMS jako użytkownik niebędący administratorem, do początkowej operacji dołączania , identyfikator użytkownika z uruchomionym SSMS musi mieć także uprawnienia w tym folderze. Uruchamianie SSMS jako administrator W TRAKCIE POCZĄTKOWEGO ZAŁĄCZENIA rozwiązuje ten problem, a następnie możesz bezproblemowo uruchomić później jako administrator.
tbone
6

W oparciu o nasz wątek komentujący wygląda na to, że podczas instalacji mogłeś się trochę przewrócić. Instalator pozwala wybrać domyślny katalog danych i ( zakładam , że ) ustawia odpowiednie uprawnienia do tego katalogu dla określonego konta usługi.

W swoim CREATE DATABASEoświadczeniu określasz lokalizację, ale czy ta lokalizacja była tą, która została określona w pierwotnej konfiguracji? Czy konto usługi uległo zmianie?

Sposobem na przetestowanie tego jest uruchomienie zwykłego

CREATE DATABASE [test1]; 
GO

Jeśli pojawi się ten sam błąd, być może zmieniło się konto usługi lub coś się zmieniło w zakresie uprawnień NTFS.

Ścieżka rozstrzygania (również oparta na ciągu komentarza) ma na celu potwierdzenie, że usługa z programem SQL Server ma uprawnienia R / W na określonej ścieżce. Aby to zrobić:

Start-> Uruchom-> services.msc-> przewiń listę usług, aż znajdziesz SQL Server-> kliknij prawym przyciskiem myszy-> właściwości-> karta Logowanie

Teraz idź i upewnij się, że konto ma odpowiednie uprawnienia do tego katalogu, aby zrobić to, co musi zrobić.

swasheck
źródło
2

Wydaje się, że podana ścieżka zawiera niepoprawną liczbę spacji, więc nie pasuje do drzewa folderów.
Serwer Sql nie utworzy nieistniejącej ścieżki.

Edytuj :
Twój oryginalny post mówi:

...\Microsoft SQL         Server\...
...\Microsoft SQL     Server\...

i myślę, że to nie są istniejące ścieżki, a ponieważ są one okaleczone przez dwukropki, istotne jest, ile jest przestrzeni.

Luis Siquot
źródło
nieprawidłowa liczba spacji? gdzie ? jeśli
@thiagocfb, więc kiedy otworzysz ścieżkę, czy widzisz te pliki?
swasheck,
w twojej „wklejce” masz 9 znaków w jednym przypadku i 5 znaków w drugim, pomiędzy Microsoft SQLi Server, i to było dla mnie dziwne, ponieważ normalnie powinna to być tylko jedna spacja. Nie jest teraz widoczny, ponieważ Twój post był edytowany przez @marc_s
@swasheck Widzę kilka plików .mdf, nie test1.mdf, to ten, który próbuję utworzyć za pomocą tego zapytania
@Luis Siquot, oh, rozumiem, musiał być mój błąd podczas ustawiania zapytania, które ma być wyświetlane jako kod, dzięki za zgłoszenie się!
0

Powyższy skrypt opublikowany w sekcji pytania jest poprawny. Możliwe, że ścieżka pliku wymieniona w FILENAME może być niepoprawna.

Skorzystaj ze skryptu podanego poniżej. Po prostu działa, a następnie upewnij się, że ścieżka do pliku używana w skrypcie.

Use Master
go

CREATE DATABASE test1 ON  PRIMARY 
( NAME = N'test1', 
  FILENAME = N'D:\test1.mdf', 
  SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1014KB)
 LOG ON 
( NAME = N'test1_log', 
  FILENAME = N'D:\test1_log.ldf', 
  SIZE = 164671KB , MAXSIZE = 1048GB , FILEGROWTH = 10%)
GO
JP Chauhan
źródło