CREATE FILE ist auf Betriebssystemfehler 5 gestoßen (Zugriff verweigert.)

13

Ich versuche, das folgende Skript in SQL Server Management Studio auszuführen:

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%)

Aber ich bekomme den Fehler:

Meldung 5123, Ebene 16, Status 1, Zeile 2 Beim Versuch, die physische Datei "C: \ Programme \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \" zu öffnen oder zu erstellen, ist der
Betriebssystemfehler 5 (Zugriff verweigert) aufgetreten. DATA \ test1.mdf '.

Meldung 1802, Ebene 16, Status 4, Zeile 2
ERSTELLEN DER DATENBANK fehlgeschlagen. Einige aufgelistete Dateinamen konnten nicht erstellt werden. Überprüfen Sie die zugehörigen Fehler.

Haben Sie bereits alle Rollenberechtigungen für meinen Benutzer, haben Sie eine Idee, was falsch ist?

Thiagocfb
quelle
1
"Ihr Benutzer" oder der Benutzer, unter dem Ihr Dienst ausgeführt wird? Der Serverprozess versucht, diese Datei zu erstellen, nicht Ihr Benutzer.
1
Könnten Sie überprüfen, ob die Datei bereits vorhanden ist? (Möglicherweise aus früheren Versuchen) Wenn vorhanden und von SqlServer geöffnet, erhalten Sie einen Zugriffsverweigerungsfehler
1
Dienste-> SQL Server-> Doppelklick-> Zweite Registerkarte (Verbindung?)
1
@thiagocfb Start-> Ausführen-> services.msc Blättern Sie durch die Liste der Dienste, bis Sie SQL Server finden. Rechtsklick-> Eigenschaften-> Registerkarte
Anmelden
1
Haben Sie auch versucht, nur eine Ebene zu rennen CREATE DATABASE [test1]; GO?
Swasheck

Antworten:

18

Sie erhalten einen Berechtigungsfehler. Das Konto, auf dem der SQL Server ausgeführt wird, verfügt nicht über die erforderlichen Rechte für den Ordner, der die Datenbankdateien enthält.

Sie müssen dem Konto, auf dem SQL Server ausgeführt wird (nicht Ihrem Konto) die vollständige Kontrolle über C: \ Programme \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA geben.

mrdenny
quelle
Ja, das Problem war der Benutzer, der den Dienst ausführte! :) Vielen Dank !
Thiagocfb
Im Allgemeinen wird der SQL Server-Windows-Dienst unter Network ServiceKonto ausgeführt. Daher müssen die entsprechenden Rechte für dieses Konto in den entsprechenden Verzeichnissen geändert werden, wenn dies auch auf Ihrem PC der Fall ist.
RBT
3
Zumindest wenn die SSMS-Benutzeroberfläche als Nicht-Administrator ausgeführt wird, muss die Benutzer-ID, auf der SSMS ausgeführt wird , für den ersten Verbindungsvorgang AUCH über Berechtigungen in diesem Ordner verfügen. Das Ausführen von SSMS als Administrator WÄHREND DES ERSTEN ANHANGS behebt dieses Problem, und Sie können später ohne Probleme als Nicht-Administrator ausgeführt werden.
Tbone
6

Basierend auf unserem Kommentarthread klingt es so, als ob Sie sich während der Installation etwas seitwärts bewegt haben. Mit dem Installationsprogramm können Sie Ihr Standarddatenverzeichnis auswählen und (ich gehe davon aus ) die entsprechenden Berechtigungen für dieses Verzeichnis für das von Ihnen angegebene Dienstkonto festlegen.

In Ihrer CREATE DATABASEAnweisung geben Sie einen Speicherort an, aber war dieser Speicherort derjenige, der im ursprünglichen Setup angegeben wurde? Hat sich das Dienstkonto geändert?

Eine Möglichkeit, dies zu testen, besteht darin, einfach ein generisches Programm auszuführen

CREATE DATABASE [test1]; 
GO

Wenn derselbe Fehler auftritt, hat sich möglicherweise das Dienstkonto geändert oder es wurden Änderungen an den NTFS-Berechtigungen vorgenommen.

Ein Auflösungspfad (auch basierend auf einer Kommentarzeichenfolge) dient zur Bestätigung, dass der Dienst, auf dem SQL Server ausgeführt wird, über R / W-Berechtigungen für den angegebenen Pfad verfügt. Um dies zu tun:

Start-> Ausführen-> services.msc-> Blättern Sie durch die Liste der Dienste, bis Sie die Registerkarte SQL Server-> Rechtsklick-> Eigenschaften-> Anmelden finden

Stellen Sie nun sicher, dass das Konto über die entsprechende Berechtigung für dieses Verzeichnis verfügt, um die erforderlichen Aktionen auszuführen.

Swasheck
quelle
2

Scheint, dass der angegebene Pfad eine falsche Anzahl von Leerzeichen enthält, sodass der Ordnerbaum nicht übereinstimmt.
SQL Server erstellt keinen nicht existierenden Pfad.

Bearbeiten :
Ihr ursprünglicher Beitrag lautet:

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

und ich denke, das sind keine existierenden Pfade, und da sie von Doppelpunkten umgeben sind, ist es wichtig, wie viele Räume es gibt.

Luis Siquot
quelle
falsche Anzahl von Leerzeichen? wo ? Wenn ich diesen Pfad in meinen Datei-Explorer kopiere und
@thiagocfb Wenn du also den Pfad öffnest, siehst du diese Dateien?
Swasheck
In Ihrer "Paste" haben Sie 9 Zeichen in einem Fall und 5 Zeichen in dem anderen, zwischen Microsoft SQLundServer , und das war mir fremd, weil es normalerweise nur ein Leerzeichen sein sollte. Es ist jetzt nicht sichtbar, da dein Beitrag von @marc_s
@swasheck Ich sehe mehrere .mdf-Dateien, nicht test1.mdf. Es ist die, die ich mit dieser Abfrage erstellen möchte
@ Luis Siquot oh ich verstehe, muss ein Fehler von mir gewesen sein, während die Abfrage als Code angezeigt werden soll, danke für das Heads-up!
0

Das obige Skript, das Sie in Ihrem Fragenabschnitt posten, ist korrekt. Möglicherweise ist der in FILENAME angegebene Dateipfad falsch.

Bitte verwenden Sie das unten angegebene Skript. Es funktioniert einfach und stellt dann sicher, dass der Dateipfad, den Sie in Ihrem Skript verwenden, korrekt ist.

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
quelle