CREATE FILE에서 운영 체제 오류 5가 발생했습니다 (액세스가 거부되었습니다).


13

SQL Server Management Studio에서 다음 스크립트를 실행하려고합니다.

USE [master]
GO

CREATE DATABASE [test1] ON PRIMARY (
  NAME = N'test1', 
  FILENAME =
    N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf',
  SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB)
LOG ON (
  NAME = N'test1_log',
  FILENAME =
    N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1_log.ldf',
  SIZE = 164672KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

하지만 오류가 발생합니다.

메시지 5123, 수준 16, 상태 1, 줄 2
CREATE FILE
에서 실제 파일
'C : \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ 을 열거 나 만들 때 운영 체제 오류 5 (액세스가 거부되었습니다.)가 발생했습니다 . DATA \ test1.mdf '입니다.

메시지 1802, 수준 16, 상태 4, 줄 2
CREATE DATABASE가 실패했습니다. 나열된 일부 파일 이름을 만들 수 없습니다. 관련 오류를 확인하십시오.

내 사용자에 대한 모든 역할 권한이 이미 있습니다. 무엇이 잘못 되었습니까?


1
"사용자"또는 서비스를 실행중인 사용자? 서버 프로세스는 사용자가 아닌 해당 파일을 작성하려고합니다.

1
파일이 이미 존재하는지 확인할 수 있습니까? (아마도 이전 시도에서) SqlServer에 의해 열려 있고 열려있는 경우 액세스 거부 오류가 발생합니다

1
서비스-> SQL Server-> 더블 클릭-> 두 번째 탭 페이지 (연결?)

1
@thiagocfb 시작-> 실행-> services.msc SQL Server를 찾을 때까지 서비스 목록을 스크롤하십시오. 오른쪽 클릭-> 속성-> 로그온 탭
swasheck

1
또한, 평범한 달리기를 시도 CREATE DATABASE [test1]; GO했습니까?
swasheck

답변:


19

권한 오류가 발생했습니다. SQL Server를 실행하는 계정에는 데이터베이스 파일이 들어있는 폴더에 대한 필요한 권한이 없습니다.

SQL Server를 실행하는 계정 (계정이 아닌)에 C : \ Program Files \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA에 대한 모든 권한을 부여해야합니다.


그렇습니다. 문제는 서비스를 실행 한 사용자였습니다! :) 감사 !
thiagocfb

일반적으로 SQL Server Windows 서비스는 Network Service계정으로 실행 됩니다. 따라서 귀하의 PC에서도 해당 계정에 대한 해당 디렉토리에 대한 적절한 권한을 수정해야합니다.
RBT

3
최소한 관리자가 아닌 사용자로 SSMS GUI를 실행하는 경우 초기 연결 작업의 경우 SSMS를 실행하는 사용자 ID에도 해당 폴더에 대한 권한이 있어야합니다. 초기 연결 중에 SSMS를 관리자로 실행하면이 문제가 해결되고 나중에 문제없이 관리자가 아닌 관리자로 실행할 수 있습니다.
tbone

6

주석 스레드를 기준으로 설치하는 동안 약간 옆으로 들린 것처럼 들립니다. 설치 프로그램은 기본 데이터 디렉토리를 선택 할 수 있으며 (나는 것이라고 가정은 ) 당신이 지정한 서비스 계정에 대한 해당 디렉토리에 적절한 권한을 설정합니다.

당신에 CREATE DATABASE문 해당 위치는 원래 설정에 지정된 하나를 한 위치를 지정하지만거야? 서비스 계정이 변경 되었습니까?

이것을 테스트하는 방법은 제네릭을 실행하는 것입니다.

CREATE DATABASE [test1]; 
GO

같은 오류가 발생하면 서비스 계정이 변경되었거나 NTFS 권한에 관한 내용이 변경되었을 수 있습니다.

주석 문자열을 기반으로하는 확인 경로는 SQL Server를 실행하는 서비스에 지정한 경로에 대한 R / W 권한이 있는지 확인하는 것입니다. 이것을하기 위해:

services.mscSQL Server-> 마우스 오른쪽 단추 클릭-> 속성-> 로그온 탭을 찾을 때까지 시작-> 실행 - > -> 서비스 목록을 스크롤하십시오.

이제 계정이 해당 디렉토리에 대해 필요한 권한을 가지고 있는지 확인하십시오.


2

제공된 경로에 잘못된 수의 공백이 있으므로 폴더 트리와 일치하지 않습니다.
SQL Server는 기존 경로가 아닌 경로를 만들지 않습니다.

편집 :
원래 게시물은 다음과 같이 말합니다.

...\Microsoft SQL         Server\...
...\Microsoft SQL     Server\...

나는 이것이 기존 경로가 아니라고 생각합니다. 콜론으로 둘러싸여 있기 때문에 얼마나 많은 공간이 있는지와 관련이 있습니다.


잘못된 수의 공백? 어디 ? 이 경로를 복사하여 파일 탐색기에 붙여 넣으면이 폴더에 도달합니다. __ @

@thiagocfb 그래서 경로를 열 때 그 파일이 보입니까?
swasheck

에 당신이 사이에 하나의 경우 9 개 문자와 다른 5 개 문자가 "붙여 넣기" Microsoft SQLServer, 그리고 normaly 그것은 단지 하나의 공백 문자해야하기 때문에이 나에게 이상한. 귀하의 게시물이 @marc_s에 의해 수정 되었기 때문에 지금 보이지 않습니다

@swasheck test1.mdf가 아닌 여러 .mdf 파일이

@Luis Siquot 오, 내가 본 코드를 표시하도록 쿼리를 설정하는 동안 내 실수 였을 것입니다.

0

질문 섹션에 게시 한 위의 스크립트가 맞습니다. FILENAME에서 언급 한 파일 경로가 잘못되었을 수 있습니다.

아래에 주어진 스크립트를 사용하십시오. 그것은 단순히 작동하고 스크립트에서 사용하는 파일 경로를 확인하십시오.

Use Master
go

CREATE DATABASE test1 ON  PRIMARY 
( NAME = N'test1', 
  FILENAME = N'D:\test1.mdf', 
  SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1014KB)
 LOG ON 
( NAME = N'test1_log', 
  FILENAME = N'D:\test1_log.ldf', 
  SIZE = 164671KB , MAXSIZE = 1048GB , FILEGROWTH = 10%)
GO
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.