2010-02-24 2 views
124

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

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

Open failed: Could not open file D:\ProjectData\AdventureWorks\AdventureWorksLT2008_Data.mdf for file number 0. OS error: 5(Access is denied.).

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

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

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

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

+0

ли файл MDF шифрованного любой шанс? – Brettski

+0

Nope - настоящее любопытство для меня в том, что он отлично работает, если я вхожу в систему как sa (используя Management Studio), но он не работает, если я использую свою локальную учетную запись администратора. Моя учетная запись - администратор, администратор домена, и это учетная запись, в которую я был зарегистрирован, когда я установил SQL Server (во время настройки была возможность сделать мою текущую учетную запись системным администратором, и я сделал это). – JMarsch

+1

Вот как работает UAC в W7, не удивительно. –

ответ

92

Благодарим вас за комментарии. Некоторые из вас помогли привести меня к ответу. Вот что я нашел:

Это была проблема разрешения NTFS, а не проблема SQL. Кроме того, он выглядит как похожий на ошибку (и он повторяется).

Проблема: Учетная запись, которую я использовал, имела полное разрешение NTFS на файлы mdf и ldf. Тем не менее, он имел эти разрешения через членство в группе (у группы «Локальные администраторы» были разрешения, а моя учетная запись была членом местных администраторов). (Я проверял разрешения)

Если я пытаюсь подключиться, подключитесь к SQL Server как мне (где я в группе администраторов), он не справляется с проблемой NTFS.

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

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

Таким образом, похоже, что ошибка возникает из-за того, что какой-либо код (либо в SQL Server, либо Management Studio) проверяет разрешения, которые имеет учетная запись пользователя, но он не заходит так далеко, чтобы проверить групповые разрешения, которые Учетная запись пользователя наследуется.

Это звучит странно для меня, но я могу повторять его снова и снова, поэтому я должен сделать вывод, что это ответ.

Update: Я об этом как об ошибке: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited

+98

Если, как и я, вы используете Windows 7, вам нужно будет запустить SQL Server Management Studio в качестве администратора, чтобы избежать получения этой ошибки. – Antony

+4

Воспроизводится на Win7 Pro с использованием SS2008 Express. Такая же проблема для sqlcmd и SSMS. == Meldung '5120', Ebene '16', Status '101', Server 'DAGO \ SQLEXPRESS', Zeile 1 - 'Die physische Datei' D: \ data \ mssql \ drei.mdf 'kann nicht geöffnet werden. Betriebssystemfehler 5: '5 (Zugriff verweigert) == Предоставление полного доступа к пользователю (который является членом локальной группы администратора, имеющей доступ) устраняет проблему. Кроме того, я запускаю sqlcmd (или SSMS), поскольку Администратор не создает эту ошибку. – Lumi

+0

У Энтони Хайски есть ответ. Просто убедитесь, что вы запускаете Management Studio в качестве администратора. – James

7

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

+0

Проблема с NTFS была первой, что я и подумал, но это не проблема: я являюсь членом группы местных администраторов, и я подтвердил, что администраторы имеют «полный контроль» разрешений на mdf и ldf файлы. Кроме того, я являюсь владельцем файлов - я только что создал каталог и сам скопировал файлы mdf/ldf. – JMarsch

+0

@JMarsch: @Nick говорит, что 's' имеет набор прав SQLSERVER - не NTFS-прав, которых у вашей учетной записи нет. – Trevoke

+0

@Trevoke: Я с тобой. Если это так, то какие права мне нужно будет присваивать моей учетной записи? (Я уже назначен роли sysadmin) – JMarsch

1

Я читал this page и у них есть интересное предложение в там:

Caution: Be very selective when adding users to these roles. For example, sysadmin maps out to dbo in every database and is the equivalent of logging in using the sa account.

Конечно, они также имеют это:

Permissions that are granted to users and roles and are database specific. All permissions are cumulative with the exception of a DENY. A denied permission at either a user level or at a role level overrides the same permission granted via other role memberships with the exception of the sysadmin fixed server role. (A sysadmin retains all permissions, even if a role they are a member of has a DENY permission.)

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

Конечно, в соответствии с Microsoft, вы должны принимать быстрый взгляд на этих двух страницах:
Link to Database Prerequisites

Link to Installing Databases

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

+0

+1, потому что ваш комментарий помог мне найти ответ. Я опубликую свои результаты в этой теме. BTW (я был «озорным» из-за очень странных политик, где я работаю - база данных adventureworks распространяется как exe. Я не могу загрузить exe. (Я могу загружать zip-файлы и файлы MSI, поэтому я не вижу как exe-фильтрация действительно делает anythign иначе, чем мешает, но это правила). В любом случае, я мог бы получить необработанные файлы mdf в виде zip-кода из codeplex, и именно тогда я столкнулся с этим маленьким любопытством. – JMarsch

1

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

+0

В моем случае, Нет - я повторно сделал это серверное время, чтобы убедиться. Проблема заключалась в том, что моя учетная запись имела только доступ к файлам через уровень косвенности - я был членом группы Domain Admin. Domain Admin был членом Local Группы администраторов на компьютере, а локальные администраторы (и система) имеют полный контроль над этой папкой (так что было 2 уровня групповой косвенности). Если бы я сам назначил права на себя, это сработало, если бы я их удалил, я все равно мог копировать/удалять файлы из Explorere и т. д., но SQL Server не смог их загрузить. – JMarsch

+0

При попытке добавить базу данных. Войдите как «пользователь, прошедший проверку подлинности Windows», поможет нам преодолеть разрешение на файлы базы данных. (В этом случае экземпляр MS SQLServer на диске имеет ОС Windows). –

4

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

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

0

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

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

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

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

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

3

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

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

+0

Во многих ситуациях я бы согласился с вашей точкой, но с SQL-сервером вы часто хотите, чтобы вы могли находить ваши базы данных на разных шпинделях или томах для масштабируемости. Фактически, обычной практикой является размещение журнала транзакций на отдельном шпинделе из базы данных, чтобы повысить пропускную способность транзакций. – JMarsch

+0

@JMarsch: Да .. каталоги на самом деле конфигурируются на вкладке «Свойства сервера»> «Параметры базы данных» для данных по умолчанию и местоположений журналов ... – NotMe

+0

Это касается значений по умолчанию, но это только значения по умолчанию. Вполне допустимо вносить dbs в другое место, и действительно даже не так уж редко, если у вас есть сервер, управляющий более чем 1 активной базой данных. – JMarsch

1

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

17

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

Будьте осторожны при отсоединении базы данных, поскольку пользователь окна вы вошли в систему как становится единственным пользователем с правами доступа к файлу .mdf! Исходные разрешения, внесенные в файл .mdf, который включал пользователя SQLServerMSSQLUser$<computer_name>$<instance_name> и учетную запись «Администраторы», были перезаписаны любым пользователем Windows, в котором вы вошли (как не пользователь сервера sql). Бум, все разрешения ушли именно так. Сделайте так, как сказали другие, и щелкните правой кнопкой мыши ваш .mdf-файл и дважды проверьте разрешения.

Я столкнулся с этой проблемой, потому что я использовал SSMS для подключения к базе данных (не имеет значения, какая учетная запись SQL-сервера) и отделил базу данных. После этого мой пользователь Windows был единственным, у которого были какие-либо разрешения для файла .mdf. Поэтому позже, когда я попытался подключить db, используя учетную запись sa, она выбросила ошибку «access denied».

Чтобы сохранить исходные разрешения в такте вы должны принять базы данных в автономном режиме, а затем отсоединить, а затем прикрепить в таком порядке, как так:

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 
+1

Спасибо за это! Я думаю, что это намного проще сделать правильно, если вы также вошли в систему, используя учетную запись SQL Server Authenticated с полномочиями serveradmin. –

+0

К сожалению, это не помогает мне, если я изначально создал базу данных как «sa», а не как пользователь Windows. –

+0

«Будьте осторожны при отсоединении базы данных». Скажите SSMS, чтобы быть осторожным. Мои проблемы возникли из-за того, что с помощью SSMS команда «Копировать базу данных» не удалила меня в шахтном городе без объяснения причин. –

0

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

2

Для чего это стоит кому-либо, имеющего определенную вариацию этой проблемы, что у меня было:

  • SQL Express 2008
  • Visual Studio 2010 Premium

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

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

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

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

PS. Кредиты идут до this blog post. Я обнаружил, что проблема связана с этой проблемой, инициируя идею присоединения/отсоединения базы данных для решения проблемы.

1

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

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

Этот метод помог мне решить проблему.

124

Запуск SQL Server Management Studio в качестве администратора. (щелкните правой кнопкой мыши-> запустить как администратор), который позаботился обо всех странностях в моем случае.

SQL SRV EXPRESS 2008 R2.Windows 7

+4

Running Management Studio как администратор НЕ работал для меня. Эта ошибка возникает при попытке запустить службу Windows. – Nuzzolilo

+5

Выполнение как Администратор - это первый шаг. Второй шаг - вход в SQL Server с помощью проверки подлинности Windows. (Этот метод работал для меня!) –

+1

Работал для меня тоже. Не могу выразить словами, как утомительно и разочаровывает подсказки и ошибки разрешения на Windows. Я АДМИНИСТРАТОР! –

13

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

0

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

+0

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

0

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

0

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

Перейдите в папку «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-установка). Я скопировал все файлы и восстановил оригинальную букву диска на новый жесткий диск. Однако разрешения безопасности не были скопированы. Я думаю, что в следующий раз я буду использовать лучший способ копирования данных.

4

Со мной - Запуск на окне 8 - RIght click Студия SQL Server Manager -> Запуск с помощью администратора. -> не прилагается никаких проблем

3

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

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

Решение

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

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

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

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

+0

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

8

Запуск SQL Server Management Studio в качестве администратора.(Справа Нажать на> Запуск от имени администратора) работал для меня с Windows 7 - SQL Server 2008 R2

+1

Этот ответ должен быть одобрен. Запуск SSMS как администратора - это работа, которая реплицирует этот ответ. Microsoft сообщает об этом как «ожидаемое поведение» здесь: [link] (https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited) – FreeText

4

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

15

Добавить разрешение в папку, где находится ваш файл .mdf.

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

И изменить Location к имени сервера.

+5

Чтобы найти точное имя учетной записи, так как оно может варьироваться от экземпляра к экземпляру, запустите это: 'SELECT servicename, service_account FROM sys.dm_server_services'. –

0

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

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 
0

Копия базы данных к другой папке и прикрепить или Войдите SQLServer с "Аутентификация Windows"

enter image description here

0

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

Для того чтобы fi x мне пришлось добавить OWNER RIGHTS в оба файла и полностью контролировать их на вкладке «Безопасность» диалогового окна «Свойства».

8

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

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

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

+0

Это работало с SQL Server 2016 с Management Studio 2008 R2 в Windows 10 :) – par

1

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

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

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

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

+0

Это решение работало для меня в Windows 10 и SQL Server 2017 при перемещении файла журнала на отдельный диск. В моем случае имя пользователя было «NT SERVICE \ MSSQLSERVER» –

3

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

0

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

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

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 
+0

Спасибо, вы спасли мой день – RezaSh

Смежные вопросы