CREATE FILE обнаружена ошибка операционной системы 5 (доступ запрещен.)

13

Я пытаюсь выполнить следующий скрипт в 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%)

Но я получаю ошибку:

Сообщение 5123, уровень 16, состояние 1, строка 2
CREATE FILE обнаружена ошибка операционной системы 5 (доступ запрещен)
при попытке открыть или создать физический файл
'C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA \ test1.mdf.

Сообщение 1802, уровень 16, состояние 4, строка 2
СОЗДАТЬ БАЗУ ДАННЫХ не удалось. Некоторые имена файлов не могут быть созданы. Проверьте связанные ошибки.

У меня уже есть все полномочия на роль для моего пользователя, есть идеи, что не так?

thiagocfb
источник
1
«Ваш пользователь» или пользователь, под которым работает ваш сервис? Серверный процесс попытается создать этот файл, а не ваш пользователь.
1
Не могли бы вы проверить, существует ли файл? (Возможно, из предыдущих попыток) Если SqlServer существует и открывается, вы получаете ошибку «Отказано в доступе»
1
Службы-> Сервер Sql-> Двойной щелчок-> Вторая вкладка (Соединение?)
1
@thiagocfb Пуск-> Выполнить-> services.msc Прокручивайте список служб, пока не найдете SQL Server. Щелкните правой кнопкой мыши -> Свойства -> вкладка «Вход»
swasheck
1
Кроме того, вы пытались просто запустить равнину CREATE DATABASE [test1]; GO?
swasheck

Ответы:

19

Вы получаете ошибку разрешения. У учетной записи, на которой запущен SQL Server, нет необходимых прав на папку, в которой будут находиться файлы базы данных.

Вы должны предоставить учетной записи, на которой работает SQL Server (не вашей учетной записи) полный контроль над C: \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA.

mrdenny
источник
Да, проблема была в том, что пользователь запускал сервис! :) Благодарность !
thiagocfb
В общем случае служба Windows Server Windows запускается под Network Serviceучетной записью. Поэтому соответствующие права должны быть изменены в соответствующих каталогах для этой учетной записи, если это также относится и к вашему ПК.
RBT
3
По крайней мере, при запуске графического интерфейса пользователя SSMS от имени пользователя, не являющегося администратором, для начальной операции присоединения идентификатор пользователя, работающий с SSMS, также должен иметь разрешения в этой папке. Запуск SSMS с правами администратора во время первоначального присоединения решает эту проблему, и затем вы можете запускать без прав администратора позже без проблем.
17
6

Судя по нашей ветке комментариев, похоже, что вы немного пострадали во время установки. Установщик позволяет вам выбрать каталог данных по умолчанию и (я бы предположил ) устанавливает соответствующие разрешения для этого каталога для указанной учетной записи службы.

В своем CREATE DATABASEзаявлении вы указываете местоположение, но было ли это место тем, которое было указано в исходной настройке? Изменился ли сервисный аккаунт?

Чтобы проверить это, просто запустите

CREATE DATABASE [test1]; 
GO

Если вы получаете ту же ошибку, возможно, учетная запись службы изменилась или что-то в разрешениях NTFS изменилось.

Путь разрешения (также основанный на строке комментария) должен подтвердить, что служба, на которой запущен SQL Server, имеет разрешения R / W для указанного вами пути. Сделать это:

Пуск-> Выполнить-> services.msc-> прокручивать список служб, пока не найдете SQL Server-> щелчок правой кнопкой мыши-> свойства-> вкладка «Вход»

Теперь перейдите и убедитесь, что у учетной записи есть соответствующее разрешение на этот каталог, чтобы делать то, что ему нужно.

swasheck
источник
2

Кажется, в указанном пути указано неверное количество пробелов, поэтому оно не соответствует дереву папок.
Сервер Sql не будет создавать несуществующий путь.

Изменить :
ваш оригинальный пост говорит:

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

и я думаю, что это не существующие пути, и так как они обделены двоеточиями, важно, сколько там пробелов.

Луис Сиквот
источник
неверное количество пробелов? где ? если я
@thiagocfb, поэтому, когда вы открываете путь, вы видите эти файлы?
swasheck
в вашей «вставке» у вас есть 9 символов в одном случае и 5 символов в другом, между Microsoft SQLи Server, и это было странно для меня, потому что обычно это должен быть только один пробел. Это не видно сейчас, потому что ваше сообщение отредактировал @marc_s
@swasheck Я вижу несколько файлов .mdf, а не test1.mdf, это тот, который я пытаюсь создать с помощью этого запроса
@ Luis Siquot о, я вижу, должно быть, это была моя ошибка при настройке запроса, который будет отображаться в виде кода, спасибо за заголовок!
0

Вышеуказанный скрипт, который вы публикуете в разделе вопросов, верен. Возможно, неверный путь к файлу, который вы упоминаете в FILENAME.

Пожалуйста, используйте скрипт, приведенный ниже. Это просто работает, а затем убедитесь, что путь к файлу, который вы используете в вашем скрипте.

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
источник