데이터베이스를 연결할 때 액세스가 거부되었습니다.
SQL Server 2008 개발자 에디션을 사용하고 있습니다.AdventureWorks2008 데이터베이스를 첨부하려고 했습니다.
접속을 시도했을 때 "access is denied" 오류가 발생하였습니다.이벤트 로그에 따르면 O/S:
열지 못했습니다.D: 파일을 열 수 없습니다.\ProjectData\AdventureWorks\AdventureWorks파일 번호 0의 LT2008_Data.mdf.OS 오류: 5(액세스가 거부되었습니다).
NTFS 문제인 줄 알았는데 시스템(및 나)이 두 파일 모두에 대한 수정 액세스 권한을 가지고 있습니다.
sa로 로그인하면 데이터베이스를 정상적으로 연결할 수 있지만 사용자 계정이 작동하지 않습니다.
저는 시스템의 로컬 관리자 그룹의 멤버이며 SQL Server 인스턴스에서 sysadmins 역할을 맡고 있습니다.
내가 왜 sa로 로그인해야 했는지 알아?
관리자로 SQL Server Management Studio를 실행합니다.(오른쪽 클릭-> 관리자 권한으로 실행)이 모든 이상함을 해결했습니다.
SQL SRV EXPRESS 2008 R2.윈도 7
댓글 달아주셔서 감사합니다.여러분 중 몇몇은 제가 답을 찾을 수 있도록 도와주었습니다.제가 찾은 건 다음과 같습니다.
이것은 NTFS 권한 문제이며 SQL 문제가 아닙니다.또, 버그와 비슷해 보입니다(또한 반복할 수 있습니다.
문제:사용하던 계정은 mdf 및 ldf 파일에 대한 NTFS 권한을 완전히 가지고 있었습니다.단, 그룹 멤버십을 통해 이러한 권한을 가지고 있습니다(Local Administrators 그룹은 권한을 가지고 있으며, 내 계정은 로컬 관리자의 구성원입니다).(권한을 확인했습니다)
연결을 수행하려고 하면 관리자 그룹에 있는 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>
관리자 계정은 (sql server 사용자가 아닌) 로그인한 Windows 사용자에 의해 덮어쓰게 됩니다.요.다른 사람이 말한 대로 실행한 후 .mdf 파일을 오른쪽 클릭하여 권한을 다시 확인합니다.
SSMS를 사용하여 데이터베이스에 접속하고(어떤 SQL 서버 계정을 사용하든 상관 없음) 데이터베이스를 분리했기 때문에 이 문제가 발생하였습니다.그 후 Windows 사용자만이 .mdf 파일에 대한 권한을 가지고 있었습니다.그래서 나중에 sa 계정을 사용하여 db를 첨부하려고 하면 "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
합니다..mdf
을 사용하다
확인해 보세요.NT Service\MSSQLSERVER
★★★★★★★★★★★★★★★★★★★★★★」Location
서버명으로 이동합니다.
관리자로 SQL Server Management Studio를 실행합니다.(오른쪽 클릭 > 관리자 권한으로 실행) Windows 7에서 사용 가능 - SQL Server 2008 R2
이 문제는 UAC(User Account Control)에 의한 것입니다.사용자 계정은 Administrators 그룹의 멤버이지만 프로그램을 "관리자로서" 실행하지 않는 한 Windows 7의 UAC에서는 관리자 작업을 수행할 수 없습니다.SQL Server나 Management Studio 등의 실제 버그는 아닙니다(단, 문제를 인식하고 "에러 5"를 표시하는 대신 높은 권한을 요구할 수도 있습니다).
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 서비스 계정으로 기능하며, 사용자로 로그인하면 계정의 권한이 부여됩니다.어떤 이유로든 사용자는 적절한 파일 액세스 권한이 없지만 서비스 계정에는 액세스 권한이 있습니다.
다음 해결책을 찾았습니다..mdf 파일을 저장할 폴더를 우클릭합니다. -- > [속성] -- > [보안]탭을 선택하고 [편집]을 클릭합니다.모든 것을 통제할 수 있게 해주죠이게 도움이 됐으면 좋겠네요!
쉽게 수정할 수 있지만 급진적인 방법으로 mdf 파일을 저장한 폴더로 이동합니다.file -> 우클릭 -> 속성을 클릭하여 로그인 사용자 보안에 대한 파일에 대한 완전한 권한을 부여합니다.
sa
계정을 합니다.SQLServerMSSQLUser$<computer_name>$<instance_name>
★★★★★★★★★★★★★★★★★」SQLServerSQLAgentUser$<computer_name>$<instance_name>
이치노이러한 사용자 중 하나 또는 둘 다에 대한 권한을 추가할 수 있습니다.
이 문제가 해결되는지 모르겠습니다. 왜냐하면 당신은 이 문제에 아무런 문제가 없다고 말했기 때문입니다.sa
도움이 되었으면 합니다.
[With me] - [Running on window 8] - [ RIGHT ]- [ SQL Server Manager Studio ]-> [ Run with admin ]을 클릭합니다.-> 문제없음
이 문제가 발생할 때마다 SQL Server에 설정된 기본 데이터베이스 디렉토리와 다른 디렉토리에 있는 데이터베이스를 연결하려고 했습니다.
다양한 디렉토리 및 계정에 대한 권한을 가진 잭킹 대신 데이터 파일을 sql 서버가 찾을 것으로 예상되는 디렉토리로 이동하는 것이 좋습니다.
저도 이 정보를 추가하고 싶었어요.
http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/
솔루션
이 오류는 두 개의 서로 다른 로그인에서 분리 및 연결 작업을 수행했기 때문에 발생합니다.따라서 파일을 분리할 때 첫 번째 로그인이 파일을 소유했지만 사용된 로그인이 mdf 및 ldf 파일의 소유자가 아니기 때문에 첨부에 실패했습니다.
데이터베이스 파일을 분리하면 소유자가 detach 명령어를 실행한 사람이 되므로 문제를 해결하려면 다른 로그인을 mdf 및 ldf 파일의 소유자로 변경하거나 추가해야 합니다.
"filename.mdf" 파일을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하여 mdf 파일의 권한을 확인합니다.여기서는 "filename.mdf" 파일에 대한 권한을 가진 계정은 1개뿐임을 알 수 있습니다.이 계정은 데이터베이스 분리에 사용된 계정이기 때문입니다.
이 문제를 해결하려면 [추가]를 클릭하십시오.버튼을 클릭하면 다른 로그인 또는 필요한 로그인이 추가되고 로그인에 Full Control이 부여됩니다."ldf" 파일에도 이 작업을 수행해야 합니다.이 작업을 완료하면 OK 버튼을 클릭합니다.(다른 OS 버전에서는 [Edit](편집) 옵션이 있는 경우가 있습니다.이 옵션을 클릭하면 [Add...](추가...)가 표시됩니다.옵션)
내가 가졌던 이 문제의 특별한 변형을 가진 모든 사람에게 가치가 있는 것은:
- SQL Express 2008
- Visual Studio 2010 Premium
App_data 폴더의 컨텍스트 메뉴를 통해 디버깅을 위해 SQL Express 데이터베이스를 만들었습니다.접속 문자열(NHibernate에서 사용)은 다음과 같습니다.
Server=.\SQLExpress;
AttachDbFilename=|DataDirectory|DebugDatabase.mdf;
Database=DebugDatabase;
Trusted_Connection=Yes;
이로 인해 데이터베이스 파일에 동일한 "접근 거부" 오류가 발생했습니다.한 때 "Everyone"에게까지 다양한 사용자에게 폴더와 파일에 대한 모든 권한을 부여하려고 했습니다.아무것도 도움이 되지 않아 추가된 권한을 다시 제거했습니다.
최종적으로 해결된 것은 Visual Studio에서 Server Explorer를 열고 MDF에 연결한 후 다시 분리하는 것이었습니다.그 후 웹 앱은 데이터베이스에 정상적으로 액세스할 수 있었습니다.
추신. 크레딧은 이 특정 문제를 구글로 검색하다가 발견한 블로그 투고에 가서 이 문제를 해결하기 위해 데이터베이스를 첨부/삭제하는 아이디어를 유발합니다.
데이터베이스 mdf를 기본 Data 폴더에서 asp.net app_data 폴더로 이동했는데 데이터베이스를 온라인으로 되돌리려다 이 문제가 발생했습니다.
원래 위치에 있는 다른 파일 데이터베이스의 보안 설정을 이동된 파일과 비교했더니 MSQL$SQLLEXPRESS가 새 위치에 있는 파일에 권한이 할당되지 않았습니다."NT SERVICE\MSSQL$SQLLEXPRESS" (NT SERVICE를 포함해야 함)에 대한 풀 컨트롤을 추가했더니 정상적으로 연결되었습니다.
원래 데이터 폴더에는 이러한 권한이 있으며 파일이 이러한 권한을 상속합니다.파일을 이동하면 상속이 중단됩니다.
app_data 폴더에 직접 작성한 다른 프로젝트의 mdf 파일을 확인했습니다.MSQL$SQLLEXPRESS 권한이 없습니다.음. SQL Express는 왜 한쪽은 좋아하지만 다른 한쪽은 싫어하는지 궁금하네요.
이 에러는 sa로 표시됩니다.제 경우 데이터베이스 보안은 중요하지 않았습니다.mdf와 ldf 파일에 모든 권한을 추가했고 첨부파일은 정상적으로 처리되었습니다.
NTFS 권한인 것 같습니다.이는 일반적으로 SQL Server 서비스 계정이 파일에 대한 읽기 전용 액세스 권한을 가지고 있음을 의미합니다(SQL Server는 로그인 방법에 관계없이 동일한 서비스 계정을 사용하여 데이터베이스 파일에 액세스합니다).사용자로 로그인하고 sa로 로그인하는 사이에 폴더 권한을 변경하지 않으셨습니까?분리했다가 다시 시도해도 같은 문제가 발생합니까?
데이터베이스를 첨부할 때도 같은 문제가 있었습니다.SQL 문제가 아니라 계정 문제였습니다.패널 제어 / 사용자 계정 제어 설정 / "알리지 않음"으로 설정합니다.마지막으로, 컴퓨터를 다시 시작했는데, 그것은 나에게 효과가 있었다.
데이터베이스를 우클릭하여 마법사에서 로그파일 AdventureWorks2012_Data_log.ldf를 삭제하고 mdf 파일을 첨부했습니다.mdf 파일은 다음 위치에 있습니다.
C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA
위의 방법이 문제 해결에 도움이 되었습니다.
데이터베이스를 다른 폴더에 복사하고 "Windows 인증"을 사용하여 SQL Server에 연결 또는 로그인
이 페이지를 읽고 있었는데 흥미로운 문장이 있더군요
주의:이러한 역할에 사용자를 추가할 때는 매우 신중하게 선택하십시오.예를 들어 sysadmin은 모든 데이터베이스에서 dbo에 매핑되며 sa 계정을 사용하여 로그인하는 것과 동일합니다.
물론 다음과 같은 기능도 있습니다.
사용자 및 역할에 부여된 데이터베이스별 권한입니다.모든 권한은 DENY를 제외하고 누적됩니다.사용자 수준 또는 역할 수준에서 거부된 권한은 sysadmin 고정 서버 역할을 제외하고 다른 역할 구성원 자격에서 부여된 동일한 권한을 덮어씁니다(시스템 관리자는 역할이 DENY 권한을 가진 경우에도 모든 권한을 보유합니다).
따라서 당신이 도메인 관리자이고 SQL 'sysadmin' 그룹에 속해 있다면 세계는 당신의 갑각류일 것입니다.
물론 Microsoft에 따르면 다음 두 페이지를 간단히 살펴봐야 합니다.
to Database (데이터베이스 전제조건 )
장난을 치면서 수동으로 연결하려고 합니다:) 정말입니다만, AdventureWorks2008 데이터베이스의 전제 조건은 모두 갖추어져 있습니까?
이것은 Microsoft의 또 다른 이상한/엣지 케이스에 불과하다고 생각합니다만, 제가 틀릴 수도 있습니다.
USE [master]
GO
CREATE DATABASE [DataBasename] ON
( FILENAME = N'C:\data\DataBasename.mdf' )
FOR ATTACH
GO
FOR ATCHT --> ATCHT_FORCE_REBUILD_LOG로 변경합니다.
USE [master]
GO
CREATE DATABASE [DataBasename] ON
( FILENAME = N'C:\data\DataBasename.mdf' )
FOR ATTACH_FORCE_REBUILD_LOG
GO
VS 2019에서도 같은 문제에 직면해 있었습니다.아직 같은 문제를 안고 있는 사람이 있다면 다음 사항을 확인해 주십시오.
- SQL Express가 m/c에 설치되어 있어야 합니다.
- 이전 버전의 VS에 SSDT가 설치되어 있어야 합니다(VS 2019에서는 설치 시 이 구성 요소를 확인하십시오). 이 구성 요소를 외부에서 추가해야 합니다.
- 연결 문자열에 '사용자 인스턴스 = True' 추가
- 옵션이라고 생각합니다.VS와 SQL Express를 관리 모드로 열고 SQL Express에 관리자로 로그인합니다.
실제로는 NTFS 권한이며 SQL Server의 이상한 버그입니다.위의 버그 보고서가 정확한지 알 수 없거나 추가 버그를 참조할 수 있습니다.
Windows 7에서 이 문제를 해결하기 위해 SQL Server Management Studio를 일반(관리자로서가 아님)으로 실행했습니다.다음으로 MDF 파일을 첨부해 보겠습니다.그 과정에서 경로에 붙여넣기 보다는 UI를 사용했습니다.나는 길이 나에게서 끊긴 것을 알아차렸다.이는 MS SQL Server(SQLServerMSSQLUser$machinname$)가 원인입니다.소프트웨어가 추가한 SQLEXPRESS) 사용자에게 폴더(이 경우 내 사용자 폴더 깊숙이 있는 폴더)에 액세스할 수 있는 권한이 없습니다.
경로를 붙여넣고 계속 진행하면 위의 오류가 발생합니다.그래서 MS SQL Server 사용자에게 거부된 첫 번째 디렉토리(내 사용자 폴더)부터 읽을 수 있는 권한을 부여했습니다.그런 다음 전파 작업을 즉시 취소하고 필요한 다음 하위 폴더에 읽기 권한을 다시 적용하여 완전히 전파되도록 했습니다.
마지막으로 MS SQL Server 사용자에게 db의 .mdf 및 .ldf 파일에 대한 수정 권한을 부여했습니다.
이제 데이터베이스 파일에 첨부할 수 있습니다.
sql server 2012를 실행하는 경우 이전 버전의 mdf 파일을 첨부하려고 하면 이 오류가 발생할 수 있습니다.sql server 2008에서 mdf 파일을 제외합니다.
당신이 첨부하고 싶은 .mdf 파일을 퍼블릭 폴더에 옮기는 것만으로 문제를 해결했습니다.저 같은 경우는 사용자/퍼블릭 폴더로 옮겼습니다.그럼 거기서 문제없이 붙입니다.이게 도움이 됐으면 좋겠다.
여기 있는 다른 솔루션에서도 문제를 해결할 수 없는 분들을 위해 다음과 같은 수정이 도움이 되었습니다.
SQL Server 설치에서 "DATA" 폴더로 이동하여 마우스 오른쪽 버튼, 속성, 보안 탭을 클릭하고 "NETWORK SERVICE" 사용자에 대한 전체 제어 권한을 추가합니다.
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
데이터베이스를 분리하여 드라이브 C에서 F로 ldf와 mdf 파일을 이동한 후 다시 연결할 때도 같은 문제가 발생하였습니다.
이를 수정하기 위해 두 파일에 OWNER RIGHTS 프린서펄을 추가하고 [프로퍼티]대화상자의 [보안]탭에서 그것들을 완전히 제어할 수 있도록 했습니다.
언급URL : https://stackoverflow.com/questions/2330439/access-is-denied-when-attaching-a-database
'programing' 카테고리의 다른 글
SQL Server에서 예/아니오 부울 필드를 만드는 방법 (0) | 2023.04.07 |
---|---|
row_number()를 사용한SQL 업데이트 (0) | 2023.04.07 |
SQL Server를 기존 테이블로 선택 (0) | 2023.04.07 |
열 값이 고유하지 않은 모든 행을 선택하는 방법 (0) | 2023.04.07 |
SQL Server: SQL 쿼리를 사용하여 테이블 기본 키 가져오기 (0) | 2023.04.07 |