자습서: adutil을 사용하여 SQL Server on Linux에서 Active Directory 인증 구성

적용 대상:SQL Server - Linux

이 자습서에서는 adutil을 사용하여 SQL Server on Linux에 대해 Windows Active Directory 인증을 구성하는 방법을 설명합니다. ktpass를 사용하여 Active Directory 인증을 구성하는 다른 방법은 자습서: Linux에서 SQL Server와 Active Directory 인증 사용을 참조하세요.

이 자습서는 다음 작업으로 구성됩니다.

  • adutil 설치
  • Linux 컴퓨터를 Active Directory 도메인에 조인
  • adutil을 사용하여 SQL Server의 Active Directory 사용자를 만들고 서비스 사용자 이름(SPN)을 설정합니다.
  • SQL Server 서비스 keytab(키 테이블) 파일 만들기
  • keytab 파일을 사용하도록 SQL Server 구성
  • Transact-SQL을 사용하여 Active Directory 기반 SQL Server 로그인 만들기
  • Active Directory 인증을 사용하여 SQL Server 연결

필수 조건

Active Directory 인증을 구성하기 전에 다음이 필요합니다.

  • 네트워크에서 Active Directory Domain Services를 실행하는 Windows 도메인 컨트롤러입니다.
  • 도메인에 연결된 호스트 컴퓨터에 설치된 adutil 도구입니다.

도메인 머신 준비

Linux 호스트 IP 주소에 대해 Active Directory에서 추가된 전달 호스트(A) 항목이 있는지 확인합니다. 이 자습서에서 sql1 호스트 머신의 IP 주소는 10.0.0.10입니다. 다음 예제에서는 Active Directory에 전달 호스트 항목을 추가합니다. 이 항목은 사용자가 sql1.contoso.com에 연결할 때 올바른 호스트에 연결되도록 합니다.

add host record

이 자습서에서는 세 개의 VM(가상 머신)이 포함된 Azure의 환경을 사용하고 있습니다. 첫 번째 VM은 도메인 이름이 contoso.com인 DC(도메인 컨트롤러)로 실행되는 Windows 서버 컴퓨터(이름: adVM.contoso.com)입니다. 두 번째 VM은 winbox라는 Windows 10을 실행되는 클라이언트 머신이며, SSMS(SQL Server Management Studio)가 설치되어 있습니다. 세 번째 머신은 sql1라는 Ubuntu 18.04 LTS 머신이며 SQL Server를 호스트합니다.

Linux 호스트 컴퓨터를 Active Directory 도메인에 조인

sql1를 Active Directory 도메인에 조인하려면 Linux 호스트의 SQL Server를 Active Directory 도메인에 조인을 참조하세요.

adutil 설치

adutil을 설치하려면 이전 단계에서 도메인에 추가한 호스트 컴퓨터에서 adutil - Active Directory 유틸리티 소개 문서에 설명된 단계를 따릅니다.

adutil을 사용하여 SQL Server의 Active Directory 사용자를 만들고 서비스 사용자 이름(SPN)을 설정합니다.

  1. kinit 명령을 사용하여 Kerberos TGT(Ticket Granting Ticket)를 얻거나 갱신합니다. kinit 명령에 대해 권한 있는 계정을 사용해야 하며 호스트 컴퓨터는 이미 도메인의 일부여야 합니다. 이 계정에는 도메인에 연결할 수 있는 권한이 있어야 하며 도메인에 계정 및 SPN을 만들 수 있어야 합니다.

    이 예제 스크립트에서는 do기본 컨트롤러에 호출 privilegeduser@CONTOSO.COM 된 권한 있는 사용자가 이미 만들어집니다.

    kinit privilegeduser@CONTOSO.COM
    
  2. adutil을 사용하여 SQL Server에서 권한 있는 Active Directory 계정으로 사용할 새 사용자를 만듭니다.

    암호는 다음과 같은 세 가지 방법으로 지정할 수 있습니다. 이러한 메서드 중 하나 이상을 사용하는 경우 다음 순서로 우선합니다.

    • 암호 플래그 사용: --password <password>
    • 환경 변수로: ADUTIL_ACCOUNT_PWD
    • 명령줄 프롬프트의 대화형 입력

    환경 변수 또는 대화형 입력 메서드는 암호 플래그보다 더 안전합니다.

    adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password 'P@ssw0rd'
    

    앞에서 설명한 대로 고유 이름(--distname)을 사용하여 계정 이름을 지정하거나 OU(조직 구성 단위) 이름을 사용할 수 있습니다. 둘 다 지정하는 경우 OU 이름(--ou)이 고유 이름보다 우선적으로 적용됩니다. 자세한 내용을 보려면 다음 명령을 실행할 수 있습니다.

    adutil user create --help
    
  3. 이전에 만든 보안 주체에 SPN을 등록합니다. 컴퓨터의 FQDN(정규화된 도메인 이름)을 사용해야 합니다. 이 자습서에서는 SQL Server의 기본 포트인 1433을 사용합니다. 포트 번호는 다를 수 있습니다.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
    
    • addauto 는 계정에 대한 kinit 충분한 권한이 있는 한 SPN을 자동으로 만듭니다.
    • -n: SPN을 할당할 계정의 이름입니다.
    • -s: SPN을 생성하는 데 사용할 서비스 이름입니다. 이 경우는 SQL Server 서비스에 대한 것이므로 서비스 이름은 MSSQLSvc입니다.
    • -H: SPN을 생성하는 데 사용할 호스트 이름입니다. 지정하지 않으면 로컬 호스트의 FQDN이 사용됩니다. 이 경우 호스트 이름은 sql1이고 FQDN은 sql1.contoso.com입니다.
    • -p: SPN을 생성하는 데 사용할 포트입니다. 지정하지 않으면 SPN이 포트 없이 생성됩니다. SQL Server가 기본 포트 1433에서 수신 대기하는 경우에만 SQL 연결이 작동합니다.

mssql-conf를 사용하여 SQL Server 서비스 keytab 파일 만들기

adutil을 설치하고 mssql-conf와 통합하여 mssql-conf를 사용하여 keytab을 직접 만들고 구성할 수 있습니다. SQL Server 서비스 키탭 파일을 만들기 위한 기본 방법입니다. 그렇지 않으면 SQL Server 서비스 키탭 파일을 수동으로 만들 수 있습니다.

필수 조건

  1. 파일이 소유하고 mssql 있지 않은지 root확인 /var/opt/mssql/mssql.conf 합니다. 그렇지 않은 경우 .를 사용하여 sudomssql-conf 명령을 실행해야 합니다.

  2. do기본 컨트롤러의 network.privilegedadaccount 계정에 대한 Active Directory 설정(이 예제sqluser@CONTOSO.COM에서는)에서 계정 옵션 섹션의 계정 탭에서 다음 옵션을 사용하도록 설정합니다.

    • 이 계정은 Kerberos AES 128비트 암호화를 지원합니다.
    • 이 계정은 Kerberos AES 256비트 암호화를 지원합니다.

keytab 파일 만들기

사용자 및 SPN을 만든 후에는 다음 단계를 사용하여 keytab을 만들 수 있습니다.

  1. 다음과 같이 mssql 사용자로 전환합니다.

    su mssql
    
  2. 다음 명령을 사용하여 Active Directory 사용자로 로그인합니다 kinit .

    kinit privilegeduser@CONTOSO.COM
    
  3. keytab 파일을 만듭니다.

    /opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
    

    다음 섹션에서 수행할 수 있는 새 Active Directory 구성을 채택하도록 SQL Server 서비스를 다시 시작하라는 메시지가 표시됩니다.

  4. 올바른 항목으로 keytab이 생성되어 있는지 확인합니다.

    klist -kte /var/opt/mssql/secrets/mssql.keytab
    

    다음 예시와 유사한 출력이 표시됩니다.

    keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab
    KVNO Timestamp           Principal
    ---- ------------------- ------------------------------------------------------
       4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
    

    참고 항목

    /var/opt/mssql/mssql.conf 파일이 소유mssql하지 않은 경우 이전 단계에 따라 network.kerberoskeytabfilenetwork.privilegedadaccount 값을 설정하도록 mssql-conf를 구성해야 합니다. 메시지가 표시되면 암호를 입력합니다.

    /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
    
  5. Active Directory 인증이 문제 없이 작동하는지 확인하려면 구성의 유효성을 검사합니다.

    /opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytab
    

    다음 예제와 비슷한 내용이 출력됩니다.

    Detected Configuration:
    Default Realm: CONTOSO.COM
    Keytab: /var/opt/mssql/secrets/mssql.keytab
    Reverse DNS Result: sql1.contoso.com
    SQL Server Port: 1433
    Detected SPNs (SPN, KVNO):
    (MSSQLSvc/sql1.CONTOSO.COM:1433, 4)
    (MSSQLSvc/sql1.CONTOSO.COM, 4)
    (MSSQLSvc/sql1:1433, 4)
    (MSSQLSvc/sql1, 4)
    Privileged Account (Name, KVNO):
    (sqluser, 4)
    

수동으로 SQL Server 서비스 키탭 파일 만들기

adutil을 설치하고 mssql-conf와 통합한 경우 mssql-conf를 사용하여 SQL Server 서비스 keytab 파일 만들기로 건너뛸 수 있습니다.

  1. 이전에 만든 4개의 SPN 각각에 대한 항목을 포함하는 keytab 파일과 사용자에 대한 keytab 파일을 만듭니다.

    adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H sql1.contoso.com --password 'P@ssw0rd' -s MSSQLSvc
    

    가능한 명령줄 옵션은 다음과 같습니다.

    • -k: 파일이 만들어지는 mssql.keytab 경로입니다. 위의 예제에서 /var/opt/mssql/secrets/ 디렉터리는 이미 호스트에 있어야 합니다.
    • -p: SPN을 생성하는 데 사용할 포트입니다. 지정하지 않으면 SPN이 포트 없이 생성됩니다.
    • -H: SPN을 생성하는 데 사용할 호스트 이름입니다. 지정하지 않으면 로컬 호스트의 FQDN이 사용됩니다. 이 경우 호스트 이름은 sql1이고 FQDN은 sql1.contoso.com입니다.
    • -s: SPN을 생성하는 데 사용할 서비스 이름입니다. 이 예제의 경우 SQL Server 서비스 이름은 MSSQLSvc입니다.
    • --password: 앞에서 만든 권한 있는 Active Directory 사용자 계정의 암호입니다.
    • -e 또는 --enctype: keytab 항목의 암호화 유형입니다. 쉼표로 구분된 값 목록을 사용합니다. 지정하지 않으면 대화형 프롬프트가 표시됩니다.

    호스트 및 도메인이 암호화 유형을 지원하는 하나 이상의 암호화 유형을 선택할 수 있습니다. 이 예제에서는 aes256-cts-hmac-sha1-96aes128-cts-hmac-sha1-96을 선택할 수 있습니다. 그러나 암호화가 약하므로 프로덕션 환경에서는 arcfour-hmac를 피해야 합니다.

    메시지를 표시하지 않고 암호화 유형을 선택하려면 위의 명령에서 인수를 사용하여 -e 암호화 유형을 선택할 수 있습니다. adutil keytab 옵션에 대한 자세한 도움말을 보려면 다음 명령을 실행합니다.

    adutil keytab createauto --help
    
  2. SQL Server에서 Active Directory에 연결하는 데 사용하는 보안 주체 이름 및 암호에 대한 항목을 keytab에 추가합니다.

    adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
    
    • -k: 파일을 만들 경로입니다 mssql.keytab .
    • -p: keytab에 추가할 사용자입니다.

    adutil keytab [ create | autocreate ]는 이전 파일을 덮어쓰지 않으며 이미 있는 파일에 추가됩니다.

  3. 생성된 keytab은 mssql 사용자가 소유하고 mssql 사용자만 파일에 대한 읽기/쓰기 권한을 갖는지 확인합니다. 다음과 같이 명령 및 chmod 명령을 실행할 chown 수 있습니다.

    chown mssql /var/opt/mssql/secrets/mssql.keytab
    chmod 440 /var/opt/mssql/secrets/mssql.keytab
    

keytab을 사용하도록 SQL Server 구성

아래 명령을 실행하여 이전 단계에서 만든 keytab을 사용하도록 SQL Server를 구성하고 권한 있는 Active Directory 계정을 이전에 만든 사용자로 설정합니다. 이 예제에서 사용자 이름은 sqluser입니다.

/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
/opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser

SQL Server 다시 시작

다음 명령을 실행하여 SQL Server 서비스를 다시 시작합니다.

sudo systemctl restart mssql-server

Transact-SQL에서 Active Directory 기반 SQL Server 로그인 만들기

SQL Server에 커넥트 다음 명령을 실행하여 로그인을 만들고 나열되어 있음을 확인합니다.

CREATE LOGIN [contoso\privilegeduser] FROM WINDOWS;
SELECT name FROM sys.server_principals;

Active Directory 인증을 사용하여 SQL Server에 연결

SSMS 또는 Azure Data Studio를 사용하여 연결하려면 Windows 자격 증명을 사용하여 SQL Server에 로그인합니다.

sqlcmd와 같은 도구를 사용하여 Windows 인증을 사용하는 SQL Server에 연결할 수도 있습니다.

sqlcmd -E -S 'sql1.contoso.com'