자습서: 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
에 연결할 때 올바른 호스트에 연결되도록 합니다.
이 자습서에서는 세 개의 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)을 설정합니다.
kinit
명령을 사용하여 Kerberos TGT(Ticket Granting Ticket)를 얻거나 갱신합니다.kinit
명령에 대해 권한 있는 계정을 사용해야 하며 호스트 컴퓨터는 이미 도메인의 일부여야 합니다. 이 계정에는 도메인에 연결할 수 있는 권한이 있어야 하며 도메인에 계정 및 SPN을 만들 수 있어야 합니다.이 예제 스크립트에서는 도메인 컨트롤러에 권한 있는 사용자
privilegeduser@CONTOSO.COM
가 이미 생성되었습니다.kinit privilegeduser@CONTOSO.COM
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
- 암호 플래그 사용:
이전에 만든 사용자에 대해 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 서비스 keytab 파일을 만드는 데 선호됩니다. 그렇지 않으면 SQL Server 서비스 키탭 파일을 수동으로 생성할 수 있습니다.
필수 조건
/var/opt/mssql/mssql.conf
파일을root
가 아닌mssql
가 소유하는지 확인 합니다. 그렇지 않은 경우sudo
를 사용하여 mssql-conf 명령을 실행해야 합니다.도메인 컨트롤러의
network.privilegedadaccount
계정에 대한 Active Directory 설정(이 예에서는sqluser@CONTOSO.COM
)에서 계정 탭의 계정 옵션 섹션에서 다음 옵션을 사용하도록 설정합니다.- 이 계정은 Kerberos AES 128비트 암호화를 지원합니다.
- 이 계정은 Kerberos AES 256비트 암호화를 지원합니다.
keytab 파일을 만듭니다
사용자 및 SPN을 만든 후에는 다음 단계를 사용하여 keytab을 만들 수 있습니다.
다음과 같이
mssql
사용자로 전환합니다.su mssql
kinit
명령을 사용하여 Active Directory 사용자로 로그인합니다.kinit privilegeduser@CONTOSO.COM
keytab 파일을 만듭니다:
/opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
새 Active Directory 구성을 채택하기 위해 SQL Server 서비스를 다시 시작하라는 메시지가 표시되면 다음 섹션에서 수행할 수 있습니다.
올바른 항목으로 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.kerberoskeytabfile 및 network.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
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 서비스 keytab 파일 수동으로 만들기
adutil을 설치하고 mssql-conf와 통합한 경우 mssql-conf를 사용하여 SQL Server 서비스 keytab 파일 만들기로 건너뛸 수 있습니다.
이전에 만든 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-96
및aes128-cts-hmac-sha1-96
을 선택할 수 있습니다. 그러나 암호화가 약하므로 프로덕션 환경에서는arcfour-hmac
를 피해야 합니다.표시하지 않고 암호화 유형을 선택하려는 경우 이전 명령에서
-e
인수를 사용하여 원하는 암호화 유형을 지정할 수 있습니다.adutil keytab
옵션에 대한 자세한 도움말을 보려면 다음 명령을 실행합니다.adutil keytab createauto --help
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 ]
는 이전 파일을 덮어쓰지 않으며 이미 있는 파일에 추가됩니다.생성된 keytab은
mssql
사용자가 소유하고mssql
사용자만 파일에 대한 읽기/쓰기 권한을 갖는지 확인합니다.chown
과chmod
명령을 다음과 같이 실행할 수 있습니다.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'