BULK INSERT에 대한 제한되지 않은 위임 구성


12

Always On 가용성 그룹에 Microsoft SQL Server 2016 노드 쌍이 있습니다. BULK INSERTWindows Server 2016 파일 서버 장애 조치 (Failover) 클러스터에있는 파일 에서 (SQL Server 2016 Management Studio 쿼리 사용) 을 수행하려고 하는데 다음 오류가 발생합니다.

메시지 4861, 수준 16, 상태 1
"\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt"파일을 열 수 없으므로 대량로드 할 수 없습니다. 운영 체제 오류 코드 5 (액세스가 거부되었습니다.).

활성 노드 이름 ( nas2.my.domain) 또는 장애 조치 클러스터 리스너 ( nas.my.domain)를 사용하는지 여부에 관계없이 발생 합니다 .

둘러 본 후 이것은 SQL Server가와의 뉘앙스로 인해 연결된 사용자 계정을 가장 할 수 없기 때문이라는 것을 알았습니다 BULK INSERT.

Windows 인증을 사용하여 SQL Server에 연결하면 SQL Server 서비스 계정이 파일 서버에 연결할 때 사용자 계정을 가장하려고합니다. SQL Server 인증을 사용하여 연결하면 파일 서버에 SQL Server 서비스 계정으로 연결됩니다.

위임 및 가장이 제대로 구성되지 않은 경우 (기본 상태) SQL Server 서비스는 사용자 계정을 가장 할 수 없으며 익명 사용자로 파일 서버에 연결하려고합니다.

파일 서버의 보안 이벤트 로그를 통해 확인할 수 있습니다. 제한되지 않고 제한 위임을 구성하는 지침과 함께 이러한 사실은 다음 링크에 문서화되어 있습니다.

sqldude 의 가이드 의 지침을 따르 려고 했지만 여전히 작동하지 않습니다.

내가 시도하는 데이터베이스 BULK INSERT는 가용성 그룹의 일부가 아니므로 MSSQL1 노드 만 관련되어야합니다. 파일 서버가 NAS2 노드에서 활성화되었습니다. 파일 서버에서 이벤트 로그를 확인하면 여전히이 문제가 발생하고 있으며 SQL Server가 내 사용자 계정을 가장하는 대신 익명 사용자로 파일 서버를 인증하려고 시도하고 있음을 나타냅니다.

아무도 무엇이 잘못되고 있는지 알고 있습니까? 또는이 가이드를 더 이상 사용하지 않기 위해 SQL Server 2016에서 변경된 사항이 있습니까?

이 GPO가를 통해 MSSQL1에 적용되었음을 확인할 수 있으며 gpresult.exe /R, 캐시가 플러시되도록 SQL 및 파일 서버 노드가 모두 재부팅되었습니다.


1
두 가지 질문 : 1) 위임을 위해 개인 Windows 도메인 계정을 사용하려고 했습니까?, 2) SSMS를 통해 SQL Server에 연결할 때 SQL Server가 실행되고 로컬로 연결되어있는 서버 (예 : 원격 데스크톱)에 로그온되어 있습니까? 또는 워크 스테이션에 로그온하여 SQL Server에 원격으로 연결합니까? 서버에 직접 로그온하지 않고 SSMS를 통해 로컬로 연결을 시도하지 않은 경우 시도하십시오. 위임을 위해 도메인 계정을 사용하도록 설정하지 않은 경우 시도하십시오.
Solomon Rutzky

답변:


1

구성이 안정적으로 보입니다. SPN과 위임은 내가 한 것처럼 구성됩니다.

설명하지 않은 유일한 것은 파일 / 공유 권한입니다. 여기 내 솔루션이 들어갑니다.

해결 방법 1 (개인 계정)

  1. 개인 계정이 파일 서버 공유의 파일에 액세스 할 수 있는지 확인하십시오
    • 개인 계정에는 공유 권한 수준에서 최소한 READ 권한이 필요합니다. 대부분의 경우 모든 사람에게 READ 권한이 있습니다.
    • 개인 계정은 파일의 권한 수준에서 최소한 READ 권한이 필요합니다
    • 해당 파일 하나에 대해 파일 수준에서 권한 상속 확인
      • 파일 권한을 변경 한 후 SQL Server를 재부팅하거나 SQL Server 서비스를 순환하십시오.
    • 또는 개인 계정으로 SQL Server에 로그인 하고 공유에 연결하고 파일을 엽니 다.
  2. 개인 계정으로 SSMS를 엽니 다 .
  3. Windows 인증으로 SQL Server 인스턴스에 대한 연결을 엽니 다.
    • 이전에 사용한 스크립트를 사용하여 SQL Server 서비스 계정으로 인스턴스에 연결되어 있는지 확인하십시오.
  4. BULK INSERT로 가져 오기 수행

솔루션 2 (SQL Server 서비스 계정)

  1. SQL Server 서비스 계정이 파일 서버 공유의 파일에 액세스 할 수 있는지 확인하십시오.
    • SQL 서버 서비스 공유 권한 수준이나 그 모두를 볼 수 있습니다 대부분의 경우 최소한 읽기 권한에서 계정 필요는 읽기 권한을가집니다.
    • SQL Server 서비스 파일의 권한 수준 적어도 읽기 권한에서 계정 필요
    • 해당 파일 하나에 대해 파일 수준에서 권한 상속 확인
      • 파일 권한을 변경 한 후 SQL Server를 재부팅하거나 SQL Server 서비스를 순환하십시오.
    • 또는 SQL Server 서비스 계정으로 SQL Server에 로그인 한 다음 공유에 연결하고 파일을 엽니 다.
  2. SQL Server 서비스 계정으로 SSMS를 엽니 다 .
    • Runas : your_domain \ SQL_Server_service_account
    • 비밀번호 제공
  3. Windows 인증으로 SQL Server에 대한 연결을 엽니 다.
    • 이전에 사용한 스크립트를 사용하여 SQL Server 서비스 계정으로 인스턴스에 연결되어 있는지 확인하십시오.
  4. BULK INSERT로 가져 오기 수행

대량 삽입 권한

보안 계정 위임 (가장)

사용자가 SQL Server 로그인을 사용하는 경우 SQL Server 프로세스 계정의 보안 프로필이 사용됩니다. SQL Server 인증을 사용하는 로그인은 데이터베이스 엔진 외부에서 인증 할 수 없습니다. 따라서 SQL Server 인증을 사용하여 로그인하여 BULK INSERT 명령을 시작하면 SQL Server 프로세스 계정 ( SQL Server 데이터베이스 엔진 서비스에서 사용 하는 계정) 의 보안 컨텍스트를 사용하여 데이터에 연결됩니다 . 소스 데이터 를 성공적으로 읽으 려면 SQL Server 데이터베이스 엔진에서 사용하는 계정에 소스 데이터에 대한 액세스 권한을 부여 해야합니다 . 반대로, SQL Server 사용자가 Windows 인증 을 사용하여 로그온 하면 사용자 계정으로 액세스 할 수있는 파일 만 읽을 수 있습니다. SQL Server 프로세스의 보안 프로필에 관계없이

참조 : BULK INSERT (Transact-SQL)


0

위임에 대한 경험에서 SQL Server 서비스 계정은 사용자를 대신하여 액세스하려는 공유에 대한 적절한 권한이 필요합니다. 해당 권한을 조정 했습니까? 읽기만으로는 충분할 것이라고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.