CREATE FILE a rencontré l'erreur 5 du système d'exploitation (l'accès est refusé.)

13

J'essaie d'exécuter le script suivant dans 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%)

Mais je reçois l'erreur:

Msg 5123, niveau 16, état 1, ligne 2
CREATE FILE a rencontré l'erreur 5 du système d'exploitation (l'accès est refusé.)
Lors de la tentative d'ouverture ou de création du fichier physique
'C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA \ test1.mdf '.

Msg 1802, niveau 16, état 4, ligne 2
CREATE DATABASE a échoué. Certains noms de fichiers répertoriés n'ont pas pu être créés. Vérifiez les erreurs associées.

Vous avez déjà toutes les autorisations de rôle pour mon utilisateur, des idées sur ce qui ne va pas?

thiagocfb
la source
1
"Votre utilisateur" ou l'utilisateur sous lequel votre service s'exécute? Le processus serveur essaiera de créer ce fichier, pas votre utilisateur.
1
Pourriez-vous vérifier si le fichier existe déjà? (Peut-être des tentatives précédentes) Si existe et est ouvert par SqlServer, vous obtenez une erreur d'accès refusé
1
Services-> Sql Server-> Double Click-> Second Tab Page (Connection?)
1
@thiagocfb Démarrer-> Exécuter-> services.msc Parcourez la liste des services jusqu'à ce que vous trouviez SQL Server. Clic droit-> Propriétés-> onglet Connexion
swasheck
1
De plus, avez-vous essayé de simplement exécuter une plaine CREATE DATABASE [test1]; GO?
swasheck

Réponses:

19

Vous obtenez une erreur d'autorisation. Le compte qui exécute SQL Server n'a pas les droits nécessaires sur le dossier qui contiendra les fichiers de base de données.

Vous devez donner au compte qui exécute SQL Server (pas à votre compte) le contrôle total de C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA.

mrdenny
la source
Oui, le problème était l'utilisateur qui exécutait le service! :) Merci !
thiagocfb
En général, le service Windows SQL Server s'exécute sous le Network Servicecompte. Les droits appropriés devront donc être modifiés sur les répertoires respectifs de ce compte si c'est le cas sur votre PC également.
RBT
3
Au moins lors de l'exécution de l'interface graphique SSMS en tant qu'utilisateur non administrateur, pour l'opération de connexion initiale , l'ID utilisateur exécutant SSMS doit également avoir des autorisations dans ce dossier. L'exécution de SSMS en tant qu'administrateur PENDANT L'ATTACHE INITIALE résout ce problème, puis vous pouvez exécuter en tant que non-administrateur plus tard sans problèmes.
tbone
6

Sur la base de notre fil de commentaires, il semble que vous vous soyez peut-être un peu éloigné lors de l'installation. Le programme d'installation vous permet de choisir votre répertoire de données par défaut et (je suppose ) définit les autorisations appropriées sur ce répertoire pour le compte de service que vous avez spécifié.

Dans votre CREATE DATABASEdéclaration, vous spécifiez un emplacement, mais cet emplacement était-il celui spécifié dans la configuration d'origine? Le compte de service a-t-il changé?

Un moyen de tester cela consiste à simplement exécuter un générique

CREATE DATABASE [test1]; 
GO

Si vous obtenez la même erreur, le compte de service a peut-être changé ou quelque chose concernant les autorisations NTFS a changé.

Un chemin de résolution (également basé sur la chaîne de commentaire) consiste à confirmer que le service qui exécute SQL Server dispose des autorisations R / W sur le chemin que vous spécifiez. Pour faire ça:

Démarrer-> Exécuter-> services.msc-> faire défiler la liste des services jusqu'à ce que vous trouviez SQL Server-> clic droit-> propriétés-> onglet Connexion

Allez maintenant et assurez-vous que le compte dispose de l'autorisation appropriée sur ce répertoire pour faire ce qu'il doit faire.

swasheck
la source
2

Il semble qu'il y ait un nombre incorrect d'espaces dans le chemin d'accès fourni, il ne correspond donc pas à l'arborescence des dossiers.
Le serveur SQL ne créera pas de chemin inexistant.

Modifier :
votre message d'origine dit:

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

et je suppose que ce ne sont pas des chemins existants, et comme ils sont entourés de deux points, il est pertinent de savoir combien d'espace il y a.

Luis Siquot
la source
nombre incorrect d'espaces? où ? si je copie et colle ce chemin sur mon explorateur de fichiers, il atteindra très bien ce dossier @ __ @
@thiagocfb donc quand vous ouvrez le chemin voyez-vous ces fichiers?
swasheck
dans votre "coller", vous avez 9 caractères dans un cas et 5 caractères dans l'autre, entre Microsoft SQLet Server, et c'était étrange pour moi car normalement il ne devrait y avoir qu'un seul caractère d'espace. Il n'est plus visible maintenant car votre message a été édité par @marc_s
@swasheck Je vois plusieurs fichiers .mdf, pas test1.mdf, c'est celui que j'essaye de créer avec cette requête
@Luis Siquot oh je vois, ça a dû être une erreur de ma part lors de la définition de la requête pour qu'elle soit affichée en code, merci pour l'avertissement!
0

Le script ci-dessus que vous publiez dans votre section de questions est correct. Il est possible que le chemin de fichier que vous mentionnez dans FILENAME soit incorrect.

Veuillez utiliser le script ci-dessous. Cela fonctionne simplement, puis assurez-vous que le chemin du fichier que vous utilisez dans votre script.

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
la source