본문 바로가기

IT

[MSSQL] 데이터 파일 다른곳에 저장하기(RestoreContainer::ValidateTargetForCreation 엑세스 거부)

반응형

MSSQL 2012 부터 데이터파일 저장위치에 파일시스템 엑세스 권한이 서비스별 SID 가 부여 된다.

즉, D:\MSSQLDATA 라는 곳에 MSSQL 데이터 파일인, .mdf, .ldf 파일이 저장된다고 하면

해당 경로에 서비스 SID 의 쓰기 권한이 있어야 한다.


아래 경우에 문제가 발생 한다.

MSSQL 2016 설치 시 별도 설정을 하지 않고 "다음" 만 클릭 해서 기본설정으로 설치 한 경우,

데이터 설치 위치는 아래 경로 이다.

"C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA"


그런데, 설치 후 D:MSSQLDATA 라는 곳에 DB를 복구하려고 한다면, 아래 에러가 발생한다.


메시지 3634, 수준 16, 상태 1, 줄 1

'D:\MSSQLDATA\Data.mdf'에 'RestoreContainer::ValidateTargetForCreation'을(를) 시도하는 중 운영 체제에서 오류 '5(액세스가 거부되었습니다.)'을(를) 반환했습니다.

메시지 3156, 수준 16, 상태 5, 줄 1

파일 'data'을(를) 'D:\MSSQLDATA\Data.mdf'(으)로 복원할 수 없습니다. WITH MOVE를 사용하여 올바른 파일 위치를 확인하십시오.


이런 경우, "D:\MSSQLDATA" 에 SQL Server 의 Instance 명으로 이뤄진 서비스 ID에 권한을 부여 해야 한다.

(기본설정으로 설치 한 경우, Instance 명은 "MSSQLSERVER" 이다)

Instance 명을 모를 경우, 서비스 관리자에서 확인 가능하다.



위 그림에서 SQL Server(MSSQLSERVER) 중 괄호 안의 MSSQLSERVER 이 Instance 명 이다.


그렇다면 신규 데이터 저장위치 D:\MSSQLDATA 에 권한을 부여는 어떻게 하는 것일까?

먼저, 기본 저장위치 "C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA"

의 권한을 확인 해 본다.



예상대로 MSSQLSERVER 라는 Instance 명으로 모든 권한이 부여 되어 있다.

이제 신규 데이터 저장위치인 "D:\MSSQLDATA" 에 권한을 부여 한다.


해당 디렉토리에서 "속성" -> "보안" 탭 -> "편집"



"사용자 그룹 또는 그룹 선택" 화면에서 MSSQLSERVER 입력 후 "이름 확인" 을 누르면,

찾을 수 없다고 나온다.



Microsoft Docs 문서를 보니, NT Service\MSSQLSERVER 라고 입력 해야 확인 된다고 한다.

입력 후 "이름 확인" 을 클릭 한다.



이제 밑줄이 생기면서 확인이 된다.

전체 권한을 부여 하고 다시 데이터베이스를 복원 하니 에러 없이 복원 된다.






반응형