Я использую SQL Server 2008 для разработчиков. Я пытался прикрепить базу данных AdventureWorks2008.
Когда я попытался подключиться, я получил сообщение об ошибке «Отказано в доступе». Согласно журналу событий, он пришел из O / S:
Ошибка открытия: не удалось открыть файл D: \ ProjectData \ AdventureWorks \ AdventureWorksLT2008_Data.mdf для файла № 0. Ошибка ОС: 5 (доступ запрещен.).
Я думал, что «проблема NTFS», но система (и я) имеют право доступа к обоим файлам.
Я обнаружил, что могу успешно присоединить базу данных, если войду как sa, но моя учетная запись не будет работать.
Я являюсь членом группы локальных администраторов на моем компьютере и играю роль sysadmins в экземпляре SQL Server.
Есть идеи, почему я должен был войти в систему как sa?
источник
Ответы:
Запустите SQL Server Management Studio от имени администратора. (щелкните правой кнопкой мыши -> запустить от имени администратора), который позаботился обо всех странностях в моем случае.
SQL SRV EXPRESS 2008 R2. Windows 7
источник
Спасибо за все комментарии. Некоторые из вас помогли мне привести ответ. Вот что я нашел:
Это была проблема с разрешениями NTFS, а не проблема SQL. Кроме того, это выглядит как ошибка (и это повторяется).
Проблема: у учетной записи, которую я использовал, были полные права доступа NTFS к файлам mdf и ldf. Однако у него были эти разрешения через членство в группе (у группы «Локальные администраторы» были разрешения, а моя учетная запись является членом локальных администраторов). (Я проверил разрешения)
Если я пытаюсь выполнить присоединение, подключиться к SQL Server под своим именем (где я нахожусь в группе администраторов), то это приведет к ошибке NTFS.
Однако, если я предоставлю те же права доступа к файлам, которые локальная группа администраторов имеет непосредственно для моей учетной записи домена, то я могу присоединиться без проблем.
(о, да, я проверил локальные группы на этом компьютере и проверил, что моя учетная запись домена действительно является членом группы локальных администраторов).
Таким образом, похоже, что ошибка возникает из-за того, что некоторый код (либо в SQL Server, либо в Management Studio) проверяет разрешения, которые имеет учетная запись пользователя, но не заходит так далеко, чтобы проверять разрешения группы, которые эта учетная запись наследует.
Это звучит странно для меня, но я могу воспроизводить это снова и снова, поэтому я пришел к выводу, что это ответ.
Обновление: я сообщил об этом как об ошибке: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited
источник
Я хотел бы добавить дополнительную информацию к ответам, которые были опубликованы.
Будьте осторожны при отсоединении базы данных, потому что пользователь Windows, в который вы вошли, становится единственным пользователем с разрешениями на файл .mdf! Исходные разрешения .mdf-файла, которые включали пользователя
SQLServerMSSQLUser$<computer_name>$<instance_name>
и учетную запись администратора, будут перезаписаны любым пользователем Windows, в котором вы вошли (не пользователем SQL Server). Бум, все разрешения ушли просто так. Сделайте так, как сказали другие, и щелкните правой кнопкой мыши свой файл .mdf и дважды проверьте разрешения.Я столкнулся с этой проблемой, потому что я использовал SSMS для подключения к базе данных (неважно, какая учетная запись сервера sql) и отключил базу данных. После этого мой пользователь Windows был единственным, у кого были какие-либо права доступа к файлу .mdf. Поэтому позже, когда я попытался подключить БД с использованием учетной записи sa, он выдал ошибку «Отказано в доступе».
Чтобы сохранить исходные разрешения в такте, вы должны перевести базу данных в автономный режим, затем отключить, а затем присоединить в таком порядке следующим образом:
источник
Добавьте разрешение в папку, где ваш
.mdf
файл.Проверьте это имя:
NT Service\MSSQLSERVER
И измените имя
Location
вашего сервера.источник
SELECT servicename, service_account FROM sys.dm_server_services
.Эта проблема вызвана UAC (контроль учетных записей), не так ли? Хотя ваша учетная запись является членом группы «Администраторы», UAC в Windows 7 не позволяет вам выполнять действия администратора, если вы не запускаете программы «как администратор». Это не настоящая ошибка в SQL Server или Management Studio или что-то еще. (Хотя он мог бы знать проблему и попросить у вас повышенные разрешения вместо того, чтобы просто жаловаться на «ошибку 5».)
источник
Запустите SQL Server Management Studio от имени администратора. (щелкните правой кнопкой мыши -> запустить от имени администратора) работал для меня с Windows 7 - SQL Server 2008 R2
источник
База данных SQL2005 может быть присоединена таким образом в Windows 7:
И тогда присоединенная база данных успешно завершена.
источник
Когда вы входите в систему под
sa
учетной записью (или любой другой учетной записью Sql Server), вы действуете как учетная запись службы SQL Server. Когда вы входите в систему как вы, у вас есть разрешения для вашей учетной записи. По какой-то причине у вас нет доступа к соответствующему файлу, но у учетной записи службы есть.источник
SELECT servicename, service_account FROM sys.dm_server_services
Я нашел это решение: щелкните правой кнопкой мыши папку, в которой вы храните свой файл .mdf -> щелкните "Свойства" -> выберите вкладку "Безопасность", нажмите "Изменить ..." и предоставьте ему полный контроль. Надеюсь это поможет!
источник
В
sa
используют учетные записи пользователей NTFSSQLServerMSSQLUser$<computer_name>$<instance_name>
иSQLServerSQLAgentUser$<computer_name>$<instance_name>
доступ к файлам базы данных. Вы можете попробовать добавить разрешения для одного или обоих этих пользователей.Я не знаю, решает ли ваша проблема, поскольку вы говорите, что у вас нет проблем с
sa
пользователем, но я надеюсь, что это поможет.источник
Со мной - Запуск в окне 8 - Правильно нажмите SQL Server Manager Studio -> Запустить с правами администратора. -> прикрепить без проблем
источник
это можно исправить легко, но радикально, просто перейдите в папку, где вы сохранили mdf файл . выберите файл-> щелкните правой кнопкой мыши -> нажмите на свойства и дайте полный доступ к файлу для входа в систему безопасности пользователя .
источник
Каждый раз, когда я сталкивался с этой проблемой, пытался присоединить базу данных, которая находится в другом каталоге, чем каталог базы данных по умолчанию, который настроен на сервере SQL.
Я настоятельно рекомендую вместо того, чтобы использовать разные разрешения для разных каталогов и учетных записей, просто переместить файл данных в каталог, который ожидает его сервер sql.
источник
Я просто хотел добавить эту информацию.
http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/
Решение
Вы получаете эту ошибку, потому что два разных имени входа выполняли операции отсоединения и присоединения. Таким образом, файлы, когда они были отсоединены, принадлежали первому имени для входа в систему, но присоединение не удалось, поскольку использованное имя для входа не было владельцем файлов mdf и ldf.
Когда мы отсоединяем файлы базы данных, владельцем становится тот, кто выполнил команду отсоединения, поэтому для решения этой проблемы нам нужно изменить или добавить другой логин в качестве владельца файлов mdf и ldf.
Щелкните правой кнопкой мыши файл «filename.mdf» и выберите свойства, чтобы проверить права доступа к файлу mdf. Здесь мы можем видеть, что только одна учетная запись имеет разрешение на файл «filename.mdf», потому что это была учетная запись, которая использовалась для отсоединения базы данных.
Чтобы решить эту проблему, нажмите кнопку «Добавить ...», чтобы добавить другой логин или любой другой необходимый логин и дать ему полный доступ. Вы должны сделать это и для файла "ldf". После выполнения этой задачи нажмите кнопку ОК. (Обратите внимание, что для других версий ОС у вас может быть опция «Изменить», сначала нажмите эту кнопку, а затем вы увидите опцию «Добавить ...».)
источник
Из-за того, что это стоит каждому, у кого есть конкретный вариант этой проблемы, который у меня был:
Через контекстное меню папки App_data я создал базу данных SQL Express для целей отладки. Строка подключения (используемая NHibernate) была следующей:
Это дало мне ту же ошибку «Отказано в доступе» в файле базы данных. Я пытался дать различным пользователям полный доступ к папке и файлам, в какой-то момент даже к «Все». Ничего не помогло, поэтому я снова удалил добавленные разрешения.
Что окончательно решило это открыть обозреватель серверов в Visual Studio, затем подключиться к MDF и снова отсоединить его. После того, как я это сделал, мое веб-приложение могло нормально обращаться к базе данных.
PS. Кредиты переходят к этому сообщению в блоге, которое я нашел во время поиска этой конкретной проблемы, что привело к идее присоединить / отключить базу данных для решения этой проблемы.
источник
Я переместил базу данных mdf из папки данных по умолчанию в папку asp.net app_data и столкнулся с этой проблемой, пытаясь вернуть базу данных в оперативный режим.
Я сравнил параметры безопасности других файловых баз данных в исходном расположении с перемещенными файлами и заметил, что MSSQL $ SQLEXPRESS не были назначены разрешения для файлов в их новом расположении. Я добавил Полный контроль для "NT SERVICE \ MSSQL $ SQLEXPRESS" (должен включать в себя этот NT SERVICE), и он просто подключен.
Похоже, что исходная папка Data имеет эти разрешения и файлы наследуют ее. Переместите файлы и наследственные разрывы конечно.
Я проверил mdf-файл другого проекта, который я создал непосредственно в его папке app_data. у него нет разрешений MSSQL $ SQLEXPRESS. Хммм. Интересно, почему SQL Express любит одно, а не другое?
источник
Это похоже на разрешения NTFS. Обычно это означает, что ваша учетная запись службы SQL Server имеет доступ к файлу только для чтения (обратите внимание, что SQL Server использует одну и ту же учетную запись службы для доступа к файлам базы данных независимо от того, как вы входите в систему). Вы уверены, что не меняли права доступа к папкам между входом в систему как самим собой и входом в систему как sa? Если вы отсоединитесь и попробуете снова, у вас все еще будет та же проблема?
источник
Windows authenticated user
чтобы помочь нам преодолеть права на файлы базы данных. (В этом случае экземпляр MS SQLServer на диске, на котором установлена ОС Windows).У меня была такая же проблема при подключении базы данных. Это не было проблемой SQL, это была проблема учетной записи. Перейдите в панель управления / Настройки контроля учетной записи пользователя / Установите «никогда не уведомлять». Наконец, перезагрузите компьютер, и он работал для меня.
источник
Я прикрепил файл mdf, щелкнув правой кнопкой мыши базу данных и удалив файл журнала AdventureWorks2012_Data_log.ldf в мастере. Файл mdf был размещен в следующем месте
Вышеуказанный метод помог мне решить проблему.
источник
Я читал эту страницу, и там есть интересное предложение:
Конечно, у них также есть это:
Так что если вы администратор домена и входите в группу SQL 'sysadmin', мир должен быть вашим раком.
Конечно, согласно Microsoft, вы должны быстро взглянуть на эти две страницы:
ссылка на базу данных
Ссылка на установку баз данных
Вы непослушны и пытаетесь прикрепить их вручную :) Если серьезно, есть ли у вас все предпосылки для базы данных AdventureWorks2008?
Я подозреваю, что это просто еще один случай Microsoft, но я могу ошибаться.
источник
изменить на FOR ATTACH -> FOR ATTACH_FORCE_REBUILD_LOG
источник
Я получил эту ошибку как sa. В моем случае безопасность базы данных не имела значения. Я добавил всем полный контроль над файлами mdf и ldf, и прикрепление прошло нормально.
источник
Я столкнулся с той же проблемой в VS 2019. Если кто-то все еще сталкивался с той же проблемой, пожалуйста, убедитесь, что у вас есть / делаете следующие вещи:
источник
На самом деле это разрешения NTFS и странная ошибка в SQL Server. Я не уверен, что приведенный выше отчет об ошибке является точным или может ссылаться на дополнительную ошибку.
Чтобы решить эту проблему в Windows 7, я обычно запускал SQL Server Management Studio (не как администратор). Затем я попытался прикрепить файл MDF. В процессе я использовал пользовательский интерфейс, а не вставил в путь. Я заметил, что путь был отрезан от меня. Это связано с тем, что пользователь MS SQL Server (SQLServerMSSQLUser $ machinename $ SQLEXPRESS), добавляемый для вас программным обеспечением, не имеет прав доступа к папке (в данном случае папка находится глубоко в моих собственных пользовательских папках).
Вставка пути и продолжение приводит к вышеуказанной ошибке. Итак, я дал пользователям MS SQL Server права на чтение, начиная с первого каталога, в котором ему было отказано (моя папка пользователя). Затем я немедленно отменил операцию распространения, потому что это может занять вечность, и снова применил разрешения на чтение к следующей необходимой подпапке, и позволил этому распространиться полностью.
Наконец, я дал пользователю MS SQL Server права на изменение файлов .mdf и .ldf для БД.
Теперь я могу прикрепить к базе данных файлы.
источник
Если вы запускаете sql server 2012, вы можете получить эту ошибку, пытаясь прикрепить более старую версию mdf-файла. ex файл mdf с сервера sql 2008.
источник
Я решил проблему, просто переместив файл .mdf, который вы хотите прикрепить, в общую папку, в моем случае я переместил его в папку users / public. Тогда я прикрепляю его оттуда без проблем. Надеюсь это поможет.
источник
Для тех, кто не мог решить проблему с другими решениями здесь, мне помогло следующее исправление:
Перейдите в папку «DATA» в установке SQL Server, щелкните правой кнопкой мыши, выберите свойства, вкладку «Безопасность» и добавьте права полного доступа для пользователя «NETWORK SERVICE».
http://decoding.wordpress.com/2008/08/25/sql-server-2005-expess-how-to-fix-error-3417/
(Ссылка выше для SQL 2005, но это исправило установку SQL 2008 R2 для меня).
Некоторая дополнительная информация: эта проблема появилась у меня после замены дополнительного жесткого диска (на котором была установлена установка SQL). Я скопировал все файлы и восстановил исходную букву диска на новый жесткий диск. Однако разрешения безопасности не были скопированы. Я думаю, что в следующий раз я буду использовать лучший метод копирования данных.
источник
В моем случае проблема была решена следующим образом:
источник
Скопируйте базу данных в другую папку и прикрепите или войдите в SQLServer с помощью «Аутентификация Windows»
источник
У меня была такая же проблема при повторном присоединении базы данных после ее отсоединения и перемещения файлов ldf и mdf с диска C на F.
Чтобы это исправить, мне нужно было добавить участника OWNER RIGHT в оба файла и дать ему полный контроль над ними на вкладке Security диалогового окна Properties.
источник