Ошибка операционной системы SQL Server 5: «5 (доступ запрещен.)»


153

Я начинаю изучать SQL, и у меня есть книга, которая предоставляет базу данных для работы. Эти файлы ниже находятся в каталоге, но проблема в том, что когда я запускаю запрос, он выдает мне эту ошибку:

Сообщение 5120, уровень 16, состояние 101, строка 1 Не удается открыть физический файл "C: \ Murach \ SQL Server 2008 \ Databases \ AP.mdf". Ошибка операционной системы 5: «5 (доступ запрещен.)».

   CREATE DATABASE AP
      ON PRIMARY (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP.mdf')
      LOG ON (FILENAME =     'C:\Murach\SQL Server 2008\Databases\AP_log.ldf')
      FOR ATTACH
    GO

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


Если резервный файл уже существует, пожалуйста , убедитесь , что он не имеет «только для чтения» атрибута, в дополнении к убедившись , что служба имеет разрешения на запись.
jumxozizi

Ответы:


133

Учетная запись службы ядра СУБД SQL Server должна иметь разрешения на чтение и запись в новой папке.

Проверьте это

Чтобы исправить, я сделал следующее:

Добавлена ​​группа администраторов к разрешениям безопасности файлов с полным контролем над файлом данных (S :) и файлом журнала (T :).

Прикрепил базу и все отлично работает.

введите описание изображения здесь

введите описание изображения здесь


4
Иногда сервер SQL будет работать в другой группе пользователей, кромеAdministrators Group
JDandChips

57
Кроме того, это может помочь запустить SQL Server Management Studio от имени администратора, а не только службу сервера.
david.barkhuizen

1
Для меня решение по следующей ссылке сработало: stackoverflow.com/a/19061137/365188
Ozair Kafray

3
Для меня смена учетной записи службы агента SQL Server на локальную систему работала.
singhm0077

22
Если ваш экземпляр SQL Server работает под учетной записью службы (например, у меня есть MSSQL$SQLEXPRESS), может быть неочевидно, что вам нужно добавить учетную запись в список разрешений для папок следующим образом:NT Service\MSSQL$SQLEXPRESS
Brian Lacy

109

Старый пост, но здесь пошаговая инструкция для SQL Server 2014, работающего под Windows 7:

  • Панель управления ->
  • Система и безопасность ->
  • Администрирование ->
  • Услуги ->
  • Дважды щелкните SQL Server (SQLEXPRESS) -> щелкните правой кнопкой мыши, Свойства
  • Выберите вкладку «Вход в систему»
  • Выберите «Локальная системная учетная запись» (по умолчанию это была какая-то тупая системная учетная запись Windows)
  • -> ОК
  • щелкните правой кнопкой мыши, Стоп
  • щелкните правой кнопкой мыши, Пуск

Вуаля!

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


5
Я перепробовал много вариантов, но ваш ответ работает нормально. Спасибо, Миккиф.
Вики

2
Работает и для SQL Server 2014 под Win 10. Спасибо.
Йохан Фоли

7
-1 Это противоречит самой идее настройки этого пользователя. Это функция безопасности, и это позволяет обойти это.
NullUserException

2
ВАУ .. Не могу поверить, что люди просто запрыгнули в этот «ответ» .. Это может создать большую проблему с безопасностью. В противном случае, не было бы причины сначала устанавливать этого пользователя, верно? В любом случае, это «решение» для людей, которые не рассматривают это как проблему безопасности в своих случаях.
curiousBoy

2
Любой, кто считает, что безопасность важнее, чем выполнение какой-либо работы, может просто отключить свой SQL-сервер!
Иван

44

Чтобы обойти проблему отказа в доступе, я запустил SSMS как администратор, и это позволило мне подключить базу данных с моего локального диска. База данных была создана в другом экземпляре SQL и Windows.


3
это было для меня ... Я просто смотрю на полностью локальную настройку и получил эту проблему на Windows 10 Home, а ранее я сам сделал mdf & ldf "владельцем" по другой причине - возможно, уместной
Mike M

3
Это работает и для меня. Я использую Windows 10 и Microsoft SQL Server 2012. Я запустил SQL Management Studio в качестве администратора и затем смог присоединить базу данных Adventure Work Sample.
Arsho

1
Это также решило проблему с Windows 10 Pro при работе в среде рабочего домена.
PerPlexSystem

То же самое - домен Env, SSMS 2017.x, Win10 Pro. Отдельно от другой машины и на новой машине.
TravisWhidden

44

Это проблема, связанная с Windows, где SQL Server не имеет соответствующих прав доступа к папке, содержащей файл .bak, и, следовательно, эта ошибка.

Самый простой способ - скопировать ваш файл .bak в хранилище резервных копий SQL по умолчанию, которое имеет все необходимые разрешения. Вам не нужно возиться с чем-то еще. В SQL SERVER 2012 это расположение

D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup (SQL 2012)
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup (SQL 2014)
C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup (SQL 2016)

@AdamLevitt у вас есть несколько версий SQL, установленных или ранее установленных? Вы уверены, что поместили его в правильное место?
Хаммад Хан

1
@hmd, спасибо. Исправлена ​​проблема с экспортом в каталог резервных копий 2012 года.
Адам Левитт

1
Это решение работает и в SQL Server 2014. Путь: C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Ник Кинг,

Это должен быть ответ !!
Аксель

У меня была похожая проблема с MS SQL Express 2016, решение было поместить мой файл .mdf в папку: C: \ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2

14

У меня была эта проблема. Просто запустите SQL Server от имени администратора


1
«Запуск от имени администратора», как в UAC работал для меня. Мне не нужно было входить в систему как администратор учетной записи (однако я нахожусь в группе администраторов).
Майк Чил

1
Да, сделал то же самое, запустил с правами администратора и все прошло нормально.
Клайд

12

Да, это правильно. Сначала вы должны узнать свою служебную учетную запись sqlserver, вы можете увидеть ее в диспетчере задач при одновременном нажатии ctrl + alt + delete; затем вы должны дать привилегию чтения / записи "C". : \ Murach \ SQL Server 2008 \ Базы данных "для учетной записи службы.


10

Проблема связана с отсутствием разрешений для SQL Server для доступа к файлам mdf и ldf. Все эти процедуры будут работать:

  1. Вы можете напрямую изменить учетную запись запуска службы MSSQLSERVER, используя учетную запись, которая имеет более широкие права доступа к файлам. Затем попробуйте прикрепить базу данных.
  2. Или вы можете назначить пользователю файл на вкладке «Безопасность» свойств файлов mdf и ldf с проверенными привилегиями чтения и записи.
  3. Запустите с учетной записью администратора Windows, откройте SQL Server с параметром «Запуск от имени администратора» и попробуйте войти с аутентификацией Windows, а теперь попробуйте подключить базу данных.


5

Для меня это было решено следующим образом со студией управления SQL Server. - Войдите в систему как администратор (я вошел в систему как проверка подлинности Windows) - Установите файл mdf (щелкните правой кнопкой мыши База данных | Вложить | Добавить) - Выйдите как администратор - Войдите в систему как обычный пользователь


4

Фактические разрешения сервера не будут иметь значения на этом этапе; все выглядит хорошо. Самому SQL Server нужны разрешения для папок.
в зависимости от вашей версии вы можете добавить разрешения SERVERNAME $ MSSQLSERVER, чтобы касаться вашей папки. В противном случае он должен находиться в каталоге BACKUP по умолчанию (либо там, где вы его установили, либо по умолчанию c: \ programfiles (x) \ MSSQL \ BACKUP.


2

Даже если вы выполните следующие шаги, вы МОЖЕТЕ получить то же сообщение об ошибке.

1. login as SA user (SSMS)
2. Edit the file permissions to say "everyone" full access (windows folder)
3. Delete the Log file (Windows Exploring  (this was what I had done per advise from some msdn forum) 

Я все еще получил ошибку разрешения, но потом я заметил, что на экране «Присоединение» нижняя часть STILL показала файл LOG, и сообщение об ошибке осталось прежним.

Надеюсь, это поможет тому, кто сделал то же самое.


0

Очень простое решение.

  1. Войти через системного администратора
  2. скопируйте ваши файлы mdf и ldf в папку «C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA», где находятся все остальные файлы данных.
  3. Теперь прикрепите оттуда будет работать

1
Вы не должны хранить данные в каталоге файлов программы. Расположение по умолчанию должно быть изменено при установке SQl Server
OrangeKing89

0

Я использовал Entity Framework в своем приложении и у меня возникла эта проблема, я установил любое разрешение в папках и службах Windows и не работает, после этого я запускаю свое приложение как администратор (щелкните правой кнопкой мыши в exe-файле и выберите «Запуск от имени администратора»), и это работает хорошо.


0

Если вы получили эту ошибку для .MDFфайла в APP_DATAпапке (или где-либо, где вы ее поместили) для проекта Visual Studio, то, как я это сделал, было просто скопировать разрешения из существующей DATAпапки здесь (я использую SQL Express 2014 для поддержки старое приложение):

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS2014\MSSQL\DATA

(примечание: ваш фактический путь установки может отличаться - особенно если имя вашего экземпляра другое)

Дважды щелкните по DATAпапке сначала как администратор, чтобы убедиться, что у вас есть доступ, затем откройте свойства папки и имитируйте то же самое для APP_DATAпапки. В моем случае отсутствующим пользователем был MSSQL$SQLEXPRESS2014(потому что я назвал экземпляр SQLEXPRESS2014- ваш может отличаться). Это также происходит с именем пользователя службы SQL Server.


0

По какой-то причине установка всех правильных разрешений в моем случае не помогла. У меня был файл, db.bakкоторый я не смог восстановить из-за 5(Access is denied.)ошибки. Файл был помещен в ту же папку, что и несколько других файлов резервных копий, и все разрешения были идентичны другим файлам. Мне удалось восстановить все остальные файлы, кроме этого db.bakфайла. Я даже пытался изменить журнал службы SQL Server на пользователя - все тот же результат. Я попытался скопировать файл без эффекта.

Затем я попытался просто создать идентичный файл, выполнив

type db.bak > db2.bak

вместо копирования файла. И вуаля это сработало! db2.bakуспешно восстановлен.

Я подозреваю, что о некоторых других проблемах с чтением файла резервной копии можно ошибочно сообщить, как 5(Access is denied.)в MS SQL.


0

В linux я зашел в /var/opt/mssql/data/папку и открыл терминал с sudoзатем, изменил мои права доступа к файлам * .mdf и * .ldf, как показано ниже, в которых вы заменяете yourDBсвоим именем файла базы данных и myUserтекущим зарегистрированным именем пользователя:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

После этого он был снова подключен без каких-либо проблем.


0

Это означает, что пользователь для входа в систему SSMS не имеет разрешения для файла .mdf. Вот как это сработало для меня:

Я открыл SSMS (Запуск от имени администратора) и вошел в систему как пользователь-администратор, щелкнул правой кнопкой мыши на присоединении базы данных, нажмите кнопку Добавить, выберите файл .mdf, нажмите кнопку ОК. Готово.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.