Доступ запрещен при подключении базы данных - PullRequest
138 голосов
/ 25 февраля 2010

Я использую SQL Server 2008 для разработчиков. Я пытался присоединить базу данных AdventureWorks2008.

Когда я пытался присоединиться, я получил сообщение об ошибке «Отказано в доступе». Согласно журналу событий, это пришло из O / S:

Ошибка открытия: не удалось открыть файл D: \ ProjectData \ AdventureWorks \ AdventureWorksLT2008_Data.mdf для файла № 0. Ошибка ОС: 5 (доступ запрещен.).

Я думал, что «проблема NTFS», но у Системы (и у меня) есть доступ к обоим файлам.

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

Я являюсь членом группы локальных администраторов на моем компьютере и выполняю роль sysadmins в экземпляре SQL Server.

Есть идеи, почему мне нужно было войти как sa?

Ответы [ 30 ]

4 голосов
/ 05 марта 2010

Пользователь sa использует учетные записи NTFS SQLServerMSSQLUser$<computer_name>$<instance_name> и SQLServerSQLAgentUser$<computer_name>$<instance_name> для доступа к файлам базы данных. Вы можете попробовать добавить разрешения для одного или обоих этих пользователей.

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

4 голосов
/ 01 октября 2016

Я нашел это решение: щелкните правой кнопкой мыши папку, в которой вы храните свой файл .mdf -> щелкните "Свойства" -> выберите вкладку "Безопасность", нажмите "Изменить" и предоставьте ему полный контроль Надеюсь, это поможет!

3 голосов
/ 01 марта 2014

Я просто хотел добавить и эту информацию.

http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/

Решение

Вы получаете эту ошибку, потому что два разных логина выполняли операции отсоединения и присоединения. Таким образом, файлы, когда они были отсоединены, принадлежали первому имени для входа в систему, но присоединение не удалось, поскольку использованное имя для входа не было владельцем файлов mdf и ldf.

Когда мы отсоединяем файлы базы данных, владельцем становится тот, кто выполнил команду отсоединения, поэтому для решения проблемы нам нужно изменить или добавить другой логин в качестве владельца файлов mdf и ldf.

Щелкните правой кнопкой мыши файл «filename.mdf» и выберите свойства, чтобы проверить права доступа к файлу mdf. Здесь мы можем видеть, что только одна учетная запись имеет разрешение на файл «filename.mdf», потому что это была учетная запись, которая использовалась для отключения базы данных.

Чтобы решить эту проблему, нажмите кнопку «Добавить ...», чтобы добавить другой логин или любой другой необходимый логин и дать ему полный доступ. Вы должны сделать это и для файла "ldf". После того, как вы выполнили эту задачу, нажмите кнопку ОК. (Обратите внимание, что для других версий ОС у вас может быть опция «Изменить», сначала нажмите эту кнопку, а затем вы увидите опцию «Добавить ...».)

3 голосов
/ 08 апреля 2011

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

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

2 голосов
/ 07 марта 2012

За то, что это стоит для всех, кто имел конкретный вариант этой проблемы, который у меня был:

  • SQL Express 2008
  • Visual Studio 2010 Premium

Через контекстное меню папки App_data я создал базу данных SQL Express для целей отладки. Строка подключения (используемая NHibernate) была следующей:

Server=.\SQLExpress;
AttachDbFilename=|DataDirectory|DebugDatabase.mdf;
Database=DebugDatabase;
Trusted_Connection=Yes;

Это дало мне ту же ошибку "Отказано в доступе" в файле базы данных. Я пытался дать различным пользователям полный доступ к папке и файлам, в какой-то момент даже к «Все». Ничего не помогло, поэтому я снова удалил добавленные разрешения.

Что окончательно решило проблему было открыть Обозреватель серверов в Visual Studio, затем подключиться к MDF и снова отсоединить его. После того, как я это сделал, мое веб-приложение могло нормально обращаться к базе данных.

PS. Кредиты переходят на это сообщение в блоге Я обнаружил, когда гуглил эту конкретную проблему, вызывая идею присоединить / отсоединить базу данных для решения проблемы.

2 голосов
/ 18 февраля 2016

Я переместил базу данных mdf из папки данных по умолчанию в папку asp.net app_data и столкнулся с этой проблемой, пытаясь вернуть базу данных в оперативный режим.

Я сравнил настройки безопасности других файловых баз данных в исходном местоположении с перемещенными файлами и заметил, что MSSQL $ SQLEXPRESS не были назначены разрешения для файлов в их новом местоположении. Я добавил Полный контроль для «NT SERVICE \ MSSQL $ SQLEXPRESS» (должен включать в себя этот NT SERVICE), и он просто подключился.

Похоже, что исходная папка Data имеет эти разрешения и файлы наследуют ее. Переместите файлы и наследственные разрывы конечно.

Я проверил mdf-файл другого проекта, который создал непосредственно в его папке app_data. у него нет разрешений MSSQL $ SQLEXPRESS. Хммм. Интересно, почему SQL Express нравится одно, а другое нет?

1 голос
/ 05 марта 2010

Это похоже на разрешения NTFS. Обычно это означает, что ваша учетная запись службы SQL Server имеет доступ только для чтения к файлу (обратите внимание, что SQL Server использует одну и ту же учетную запись службы для доступа к файлам базы данных независимо от того, как вы входите в систему). Вы уверены, что не меняли права доступа к папкам между входом в систему как самим собой и входом в систему как sa? Если вы отсоединитесь и попробуете снова, у вас все еще будет та же проблема?

1 голос
/ 02 марта 2010

Я читал эту страницу , и там есть интересное предложение:

Внимание: будьте очень избирательны при добавлении пользователи на эти роли. Например, Сисадмин отображает в дбо в каждом база данных и является эквивалентом вход в систему с использованием учетной записи sa.

Конечно, у них также есть это:

Разрешения, которые предоставляются пользователям и роли и являются конкретными для базы данных. Все разрешения накапливаются с исключение DENY. Отказано разрешение на уровне пользователя или на уровне роли переопределяет то же самое разрешение, предоставленное через другую роль членство за исключением фиксированная роль сервера sysadmin. (A Сисадмин сохраняет все разрешения, даже если роль, членом которой они являются, имеет ДЕНЬ разрешение.)

Так что если вы администратор домена и входите в группу SQL 'sysadmin', мир должен быть вашим раком.

Конечно, согласно Microsoft, вам следует взглянуть на эти две страницы:
Ссылка на базу данных Необходимые условия

Ссылка на установку баз данных

Вы шалите и пытаетесь прикрепить их вручную :) Если серьезно, есть ли у вас все предпосылки для базы данных AdventureWorks2008?
Я подозреваю, что это просто еще один случай Microsoft, но я могу ошибаться.

1 голос
/ 26 апреля 2012

Я прикрепил файл mdf, щелкнув правой кнопкой мыши базу данных и удалив файл журнала AdventureWorks2012_Data_log.ldf в мастере. Файл mdf был размещен в следующем месте

    C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

Приведенный выше метод помог мне решить проблему.

1 голос
/ 01 сентября 2011

У меня была такая же проблема при подключении базы данных. Это не было проблемой SQL, это была проблема учетной записи. Перейдите в панель управления / Настройки контроля учетной записи пользователя / Установите «никогда не уведомлять». Наконец, перезагрузите компьютер, и он заработал для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...