Доступ запрещен при подключении базы данных

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

когда я попытался подключиться, я получил ошибку "доступ запрещен". Согласно журналу событий, он пришел из O/ S:

открыть не удалось: не удалось открыть файл D:ProjectDataAdventureWorksAdventureWorksLT2008_Data - ... mdf для файла номер 0. Ошибка ОС: 5 (Доступ запрещен.).

Я думал, что "проблема NTFS", но система (и я) имеют изменить доступ к файлам.

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

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

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

30 ответов


запустите 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 server) и отсоединил базу данных. После этого мой пользователь windows был единственным, у которого были какие-либо разрешения .файл mdf. Поэтому позже, когда я попытался подключить БД с помощью учетной записи sa, он выбросил ошибку "отказано в доступе".

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

USE [master]
GO
-- kick all users out of the db
ALTER DATABASE mydb
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO

-- Take the Database Offline
ALTER DATABASE mydb SET OFFLINE WITH
ROLLBACK IMMEDIATE
GO

-- detach the db
EXEC master.dbo.sp_detach_db @dbname = N'mydb'
GO

добавить разрешение в папку, где ваш Это.

проверьте это имя:NT Service\MSSQLSERVER

, и Location на имя сервера.


эта проблема вызвана UAC (Контроль учетных записей), не так ли? Хотя ваша учетная запись пользователя является членом группы администраторов, UAC в Windows 7 не позволяет вам делать администраторские вещи, если вы не запускаете программы "от имени администратора". Это не настоящая ошибка в SQL Server или Management Studio или что-то еще. (Хотя он может знать проблему и попросить у вас повышенные разрешения вместо того, чтобы просто жаловаться на "ошибку 5".)


запустите SQL Server Management Studio от имени администратора. (правая кнопка мыши-> Запуск от имени администратора) работал для меня с Windows 7 к SQL серверу 2008 Р2


база данных SQL2005 может быть присоединена таким образом в Windows 7:

start menu >
 all program >
  Microsoft sql server 2005 >
   sql server management studio >
    right click >
     run as administrator >
      click ok

и затем подключенная база данных успешно завершена.


при входе в sa (или любая учетная запись Sql Server), вы функционируете как учетная запись службы SQL Server, когда вы вошли в систему как вы, у вас есть разрешения вашей учетной записи. По какой-то причине у вас нет соответствующего доступа к файлам, но у учетной записи службы есть.


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

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


со мной - Работает на window 8 - Щелкните правой кнопкой мыши SQL Server Manager Studio - > выполнить с администратором. - >прикрепить нет проблем


может быть исправлено easly но radicaly, просто перейдите в папку, где у вас хранятся файл mdf. выберите файл - > щелкните правой кнопкой мыши - > нажмите на свойства и дайте полные разрешения на файл для входа в систему безопасности пользователя.


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


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

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


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

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

решение

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

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

щелкните правой кнопкой мыши на " filename.mdf " файл и выберите Свойства, чтобы проверить разрешения файла mdf. Здесь мы видим, что только одна учетная запись имеет разрешение на "именем.mdf", потому что это была учетная запись, которая использовалась для отсоединения базы данных.

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


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

  • 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. Кредиты идут в этот блог Я нашел, пока гуглил эту проблему, вызвав идея прикрепите / отсоедините базу данных для решения проблемы.


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


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


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

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

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


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

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

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

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

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

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

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

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


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

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

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

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


enter image description here

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH
GO

заменить на ДЛЯ ATTACH -- > ДЛЯ ATTACH_FORCE_REBUILD_LOG

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH_FORCE_REBUILD_LOG
GO

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

чтобы решить эту проблему в Windows 7, я обычно запускал SQL Server Management Studio (не как администратор). Затем я попытался прикрепить файл MDF. В этом процессе я использовал пользовательский интерфейс, а не вставлял путь. Я заметил, что тропинка отрезана от меня. Это связано с тем, что MS SQL Server (SQLServerMSSQLUser$machinename$SQLEXPRESS) пользователь, добавляемый для вас программным обеспечением, не имеет разрешений на доступ к папке (в этом случае папка глубоко в моих собственных папках пользователя).

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

наконец, я дал пользователю MS SQL Server разрешения на изменение .MDF и. ldf файлы для БД.

теперь я могу прикрепить к файлам базы данных.


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


при запуске sql server 2012 Вы можете получить эту ошибку, пытаясь прикрепить более старую версию mdf-файла. ex файл mdf из sql server 2008.


Я решил проблему, просто двигаться .файл mdf, который вы хотите прикрепить к общей папке, в моем случае я переместил его в папку users/public. Затем я прикрепляю его оттуда без каких-либо проблем. Надеюсь, это поможет.


для тех, кто не смог решить проблему с другими решениями здесь, следующее исправление сработало для меня:

перейдите в папку " данные "в установке SQL Server, щелкните правой кнопкой мыши, свойства, вкладка" Безопасность "и добавьте разрешения полного управления для пользователя "сетевая служба".

http://decoding.wordpress.com/2008/08/25/sql-server-2005-expess-how-to-fix-error-3417/

(приведенная выше ссылка для SQL 2005, но это исправлено SQL 2008 R2 установка для меня).

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


в моем случае то, что решило проблему, было следующим:

USE [master]
GO
CREATE DATABASE [AdventureWorks2008R2] ON
( FILENAME = 'C:\Program Files\Microsfot SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\AdventureWors2008R2_Data.mdf')
FOR ATTACH_REBUILD_LOG

скопируйте базу данных в другую папку и присоедините или войдите в SQLServer с "аутентификацией Windows"

enter image description here


У меня была такая же проблема при повторном подключении базы данных после ее отсоединения и перемещения файлов ldf и mdf с диска C на F.

чтобы исправить это, я должен был добавить принципала прав владельца в оба файла и дал ему полный контроль над ними на вкладке "Безопасность" диалогового окна "Свойства".


Я боролся с SSMS (2016), чтобы прикрепить базу данных AdventureWorks2012. Но имел успех с этим кодом, взятым из статья CodeProject by Mohammad Elsheimy:

CREATE DATABASE AdventureWorks2012
    ON PRIMARY (FILENAME='D:\Dev\SQL Server\AdventureWorks2012.mdf')
    FOR ATTACH;