Помилка 5 операційної системи SQL Server: "5 (доступ заборонено.)"


153

Я починаю вивчати SQL, і у мене є книга, яка забезпечує базу даних, над якою можна працювати. Ці файли нижче знаходяться в каталозі, але проблема полягає в тому, що коли я запускаю запит, він дає мені цю помилку:

Msg 5120, рівень 16, стан 101, рядок 1 Неможливо відкрити фізичний файл "C: \ Murach \ SQL Server 2008 \ Бази даних \ 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
Брайан Лейсі,

109

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

  • Панель управління ->
  • Система та безпека ->
  • Адміністративні засоби ->
  • Послуги ->
  • Двічі клацніть SQL Server (SQLEXPRESS) -> клацніть правою кнопкою миші, Властивості
  • Виберіть вкладку "Увійти"
  • Виберіть "Локальний обліковий запис системи" (за замовчуванням був деякий тугий обліковий запис Windows)
  • -> Гаразд
  • клацніть правою кнопкою миші, Стоп
  • клацніть правою кнопкою миші, Пуск

Войла!

Я думаю, що налаштування облікового запису для входу могло бути варіантом у встановленні, але якщо так, це було не за замовчуванням, і його було легко пропустити, якщо ви вже не знали про це питання.


5
Я перепробував безліч варіантів, але ваша відповідь працює чудово. Спасибі mickeyf.
vicky

2
Також працює для SQL Server 2014 під Win 10. Дякую.
Йохан Фолі

7
-1 Це в першу чергу суперечить всій ідеї створення цього користувача. Це функція безпеки, і це дозволяє обійти її.
NullUserException

2
WOW .. Не можу повірити, що люди просто заскочили у цю "відповідь". Це може створити велику проблему безпеки .. Інакше спочатку не було б причини встановити цього користувача, правда? У будь-якому випадку це "рішення" для людей, які не розглядають це як питання безпеки у своїх випадках.
цікавоБой

2
Кожен, хто вважає, що безпека важливіша, ніж виконання якоїсь роботи, може просто вимкнути свій SQL-сервер!
Іван

44

Щоб обійти доступ з відмовою у доступі, я запустив SSMS як адміністратор, і це дозволило мені приєднати базу даних з мого локального диска. База даних була створена в іншому екземплярі SQL та Windows.


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

3
Це працює і для мене. Я використовую Windows 10 та Microsoft SQL Server 2012. Я запустив SQL Management Studio як адміністратор, а потім зможу долучити базу даних Adventure Work Sample.
аршо

1
Це також вирішило проблему з Windows 10 Pro під час роботи в робочому середовищі.
PerPlexSystem

Те саме - Domain Env, SSMS 2017.x, Win10 Pro. Від'єднаний від іншої машини та прикріплений до нової машини.
TravisВідкритий

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 \ Резервне копіювання
Nick King

Це має бути відповідь !!
Аксель

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

13

У мене була ця проблема. Просто запустіть 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) 

Я все-таки GOT помилку дозволу, але потім я помітив, що на екрані Attach в нижньому розділі ПОСЛІД відображався файл LOG, і повідомлення про помилку залишалося тим самим.

Сподіваюся, що це допомагає тому, хто зробив те саме.


0

Дуже просте рішення.

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

1
Не слід зберігати дані в каталозі програмних файлів. Місце установки за замовчуванням слід змінити при встановленні сервера SQl
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.