Linux에서 SQL Server와 active Directory 인증Active Directory Authentication with SQL Server on Linux

이 항목 적용 대상: 아니요SQL Server Windows 예SQL Server Linux 아니요Azure SQL Database 아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: noSQL Server Windows yesSQL Server Linux noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

이 문서에서는 구성 하는 방법에 설명 SQL ServerSQL Server linux Active Directory (AD) 인증, 라고도 통합된 인증을 지원 하도록 합니다.This document explains how to configure SQL ServerSQL Server on Linux to support Active Directory (AD) authentication, also known as integrated authentication. AD 인증을 통해 인증 하는 데 Windows 또는 Linux에서 도메인에 가입 된 클라이언트 SQL ServerSQL Server 해당 도메인 자격 증명 및 Kerberos 프로토콜을 사용 하 여 합니다.AD Authentication enables domain-joined clients on either Windows or Linux to authenticate to SQL ServerSQL Server using their domain credentials and the Kerberos protocol. AD 인증을 통해 다음과 같은 이점을 SQL ServerSQL Server 인증:AD Authentication has the following advantages over SQL ServerSQL Server Authentication:
• 사용자가 암호를 입력 하지 않고 single sign-on을 통해 인증 합니다.• Users authenticate via single sign-on, without being prompted for a password.
AD 그룹에 대 한 로그인을 만들어 •를 액세스 및 권한을 관리할 수 있습니다 SQL ServerSQL Server AD 그룹 멤버 자격을 사용 하 여 합니다.• By creating logins for AD groups, you can manage access and permissions in SQL ServerSQL Server using AD group memberships.
• 각 사용자 id를 가진 단일 조직 전체에서 추적할 수는 없는 SQL ServerSQL Server 사람에 해당 하는 로그인입니다.• Each user has a single identity across your organization, so you don’t have to keep track of which SQL ServerSQL Server logins correspond to which people.
• AD를 사용 하면 조직 전체에서 중앙 집중화 된 암호 정책을 적용할 수 있습니다.• AD enables you to enforce a centralized password policy across your organization.

필수 구성 요소Prerequisites

AD 인증을 구성 하기 전에 해야 합니다.Before you configure AD Authentication, you need to:

중요

이 경우 데이터베이스 미러링 끝점에 지원 되는 유일한 인증 방법에는 인증서입니다.At this time, the only authentication method supported for database mirroring endpoint is CERTIFICATE. 이후 버전에서 WINDOWS 인증 방법을 설정 됩니다.WINDOWS authentication method will be enabled in a future release

1 단계: 조인 SQL ServerSQL Server AD 도메인에 호스트Step 1: Join SQL ServerSQL Server host to AD domain

참가할 수 있도록 있는 다양 한 도구는 SQL ServerSQL Server AD 도메인에 호스트 컴퓨터.Numerous tools exist to help you join the SQL ServerSQL Server host machine to your AD domain. 이 연습에서는 realmd, 인기 있는 오픈 소스 패키지 합니다.This walkthrough uses realmd, a popular open source package. 아직 하지 않는 경우에 realmd와 Kerberos 클라이언트 패키지가 설치는 SQL ServerSQL Server Linux 배포판의 패키지 관리자를 사용 하 여 호스트 컴퓨터:If you haven't already, install both the realmd and Kerberos client packages on the SQL ServerSQL Server host machine using your Linux distribution's package manager:

# RHEL
sudo yum install realmd krb5-workstation

# SUSE
sudo zypper install realmd krb5-client

# Ubuntu
sudo apt-get install realmd krb5-user software-properties-common python-software-properties packagekit

Kerberos 클라이언트 패키지 설치 영역 이름을 요청 하는 경우 도메인 이름을 대문자로 입력 합니다.If the Kerberos client package installation prompts you for a realm name, enter your domain name in uppercase.

참고

이 연습에서는 "contoso.com" 및 "CONTOSO.COM" 예제 도메인 및 영역 이름으로 각각 사용 됩니다.This walkthrough uses "contoso.com" and "CONTOSO.COM" as example domain and realm names, respectively. 이러한 고유한 값으로 바꿔야 합니다.You should replace these with your own values. 이러한 명령은 대/소문자, 하므로 반드시 사용 대문자이 연습에서 사용 될 때마다 합니다.These commands are case-sensitive, so make sure you use uppercase wherever it is used in this walkthrough.

확인 하려면 다음 명령을 실행 하는 SQL ServerSQL Server 호스트 컴퓨터와 DNS 이름 서버에 대 한 AD 도메인 컨트롤러를 사용 하도록 구성 된:Run the following command to verify that the SQL ServerSQL Server host machine is configured to use the AD domain controller for as a DNS nameserver:

sudo realm discover contoso.com -v

구성 해야 하는 도메인이 없는 경우 프로그램 SQL ServerSQL Server 호스트 컴퓨터를 AD 도메인 컨트롤러의 IP 주소는 DNS 이름 서버를 사용 합니다.If your domain is not found, you need to configure your SQL ServerSQL Server host machine to use your AD domain controller's IP address as a DNS nameserver. 이렇게 하려면 특정 단계는 네트워크 장치 구성, 도메인 구성 및 Linux 배포 사항에 따라 달라 집니다.The specific steps to do this depend on your network device configuration, domain configuration, and Linux distribution. 다음은 몇 가지 예제 방식을입니다.Here are some example approaches.

DNS 구성의 예: UbuntuExample DNS configuration: Ubuntu

편집 된 /etc/network/interfaces 파일 AD 도메인 컨트롤러의 IP 주소는 dns 이름 서버 목록이 표시 됩니다.Edit the /etc/network/interfaces file so that your AD domain controller's IP address is listed as a dns-nameserver. 예를 들어For example:

<...>
# The primary network interface
auth eth0
iface eth0 inet dhcp
dns-nameservers **<AD domain controller IP address>**
dns-search **<AD domain name>**
참고

다른 컴퓨터에 대 한 네트워크 인터페이스 (eth0) 다를 수 있습니다.The network interface (eth0) might differ for differnet machines. 사용 하는 어떤 것을 알아보려면 ifconfig를 실행 하 고 인터페이스에는 IP 주소와 전송 및 수신한 바이트를 복사 합니다.To find out which one you are using, run ifconfig and copy the interface that has an IP address and transmitted and received bytes.

이 파일을 편집한 후 네트워크 서비스를 다시 시작 합니다.After editing this file, restart the network service:

sudo ifdown eth0 && sudo ifup eth0

이제 있는지 여부를 확인 하면 /etc/resolv.conf 파일에 다음과 같은 줄이 포함 되어 있습니다.Now check that your /etc/resolv.conf file contains a line like the following:

nameserver **<AD domain controller IP address>**

DNS 구성의 예: RHELExample DNS configuration: RHEL

편집의 /etc/sysconfig/network-scripts/ifcfg-eth0 파일 (또는 다른 인터페이스 구성 파일을 적절 하 게)를 AD 도메인 컨트롤러의 IP 주소는 DNS 서버 목록이 표시 됩니다.Edit the /etc/sysconfig/network-scripts/ifcfg-eth0 file (or other interface config file as appropriate) so that your AD domain controller's IP address is listed as a DNS server:

<...>
PEERDNS=no
DNS1=**<AD domain controller IP address>**

이 파일을 편집한 후 네트워크 서비스를 다시 시작 합니다.After editing this file, restart the network service:

sudo systemctl restart network

이제 있는지 여부를 확인 하면 /etc/resolv.conf 파일에 다음과 같은 줄이 포함 되어 있습니다.Now check that your /etc/resolv.conf file contains a line like the following:

nameserver **<AD domain controller IP address>**

도메인에 가입Join the domain

DNS가 올바르게 구성 되었는지 확인 하 고 나면 아래 명령을 실행 하 여 도메인에 가입 합니다.Once you've confirmed that your DNS is configured properly, join the domain by running the command below. 새 컴퓨터를 도메인에 가입 하는 AD에 충분 한 권한을 가진 AD 계정을 사용 하 여 인증 해야 합니다.You'll need to authenticate using an AD account that has sufficient privileges in AD to join a new machine to the domain. 이 명령은 AD에서 새 컴퓨터 계정을 만들를 만들기는 특히는 /etc/krb5.keytab keytab 파일을 호스트 하 고 있는 도메인의 구성 /etc/sssd/sssd.conf:Specifically, this command will create a new computer account in AD, create the /etc/krb5.keytab host keytab file, and configure the domain in /etc/sssd/sssd.conf:

sudo realm join contoso.com -U 'user@CONTOSO.COM' -v
<...>
 * Successfully enrolled machine in realm
참고

오류 표시, "필요한 패키지가 설치 되지 않은" 경우 실행 하기 전에 Linux 배포판의 패키지 관리자를 사용 하 여 이러한 패키지를 설치 해야는 realm join 명령을 다시 합니다.If you see an error, "Necessary packages are not installed," then you should install those packages using your Linux distribution's package manager before running the realm join command again.

"에 도메인 가입 권한이" 오류가 발생 하는 경우 Linux 컴퓨터를 도메인에 연결 하려면 충분 한 권한이 있는지 도메인 관리자와 함께 확인 해야 합니다.If you receive an error, "Insufficient permissions to join the domain," then you will need to check with a domain administrator that you have sufficient permissions to join Linux machines to your domain.

도메인에서 사용자에 대 한 정보를 수집할 이제 수 및 해당 사용자로 Kerberos 티켓을 얻을 수 있습니다를 확인 합니다.Verify that you can now gather information about a user from the domain, and that you can acquire a Kerberos ticket as that user.

We will use id, kinit and klist commands for this.We will use id, kinit and klist commands for this.

id user@contoso.com
uid=1348601103(user@contoso.com) gid=1348600513(domain group@contoso.com) groups=1348600513(domain group@contoso.com)

kinit user@CONTOSO.COM
Password for user@CONTOSO.COM:

klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: user@CONTOSO.COM
<...>
참고

경우 id user@contoso.com 반환, "사용자," 명령을 실행 하 여 SSSD 서비스가 성공적으로 시작 되었는지 확인 sudo systemctl status sssd합니다.If id user@contoso.com returns, "No such user," make sure that the SSSD service started successfully by running the command sudo systemctl status sssd. 서비스를 실행 하는 경우 "사용자" 오류가 표시 SSSD에 대 한 자세한 정보 로깅을 사용 하도록 설정 하십시오.If the service is running and you still see the "No such user" error, try enabling verbose logging for SSSD. 자세한 내용은 Red Hat 설명서를 참조 문제 해결 SSSD합니다.For more information, see the Red Hat documentation for Troubleshooting SSSD.

경우 kinit user@CONTOSO.COM "KDC 회신 일치 하지 않습니다 기대 초기 자격 증명을 가져오는 동안" 반환 대문자로 표시 영역을 지정 했는지 확인 합니다.If kinit user@CONTOSO.COM returns, "KDC reply did not match expectations while getting initial credentials," make sure you specified the realm in uppercase.

자세한 내용은 Red Hat 설명서를 참조 Discovering 및 Id 도메인이 가입합니다.For more information, see the Red Hat documentation for Discovering and Joining Identity Domains.

2 단계: AD 사용자에 대 한 만들기 SQL ServerSQL Server SPN을 설정 하 고Step 2: Create AD user for SQL ServerSQL Server and set SPN

참고

다음 단계는 사용 하면 정규화 된 도메인 이름합니다.In the next steps we will use your fully qualified domain name. 사용 중인 Azure, ´ ë ç 만드세요 계속 진행 하기 전에.If you are on Azure, you will have to create one before you proceed.

도메인 컨트롤러에서 실행 하는 New-aduser 만료 되지 않는 암호를 사용 하 여 새 AD 사용자를 만들려면 PowerShell 명령입니다.On your domain controller, run the New-ADUser PowerShell command to create a new AD user with a password that never expires. 이 예에서는 "mssql," 계정 이름이 되지만 필요 하면 계정 이름이 될 수 있습니다.This example names the account "mssql," but the account name can be anything you like. 계정의 새 암호를 입력 하 라는 메시지가 표시 됩니다.You will be prompted to enter a new password for the account:

Import-Module ActiveDirectory

New-ADUser mssql -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true
참고

전용 AD 계정이 SQL Server에 대 한 보안 모범 사례는 하는 SQL Server 자격 증명 동일한 계정을 사용 하 여 다른 서비스와 공유 되지 않도록 합니다.It is a security best practice to have a dedicated AD account for SQL Server, so that SQL Server's credentials aren't shared with other services using the same account. 그러나 재사용할 수 있습니다 기존 AD 계정 원하는 경우 (다음 단계에서는 keytab 파일을 생성 하는 데 필요) 계정의 암호를 알고 있는 경우.However, you can reuse an existing AD account if you prefer, if you know the account's password (required to generate a keytab file in the next step).

지금 사용 하 여이 계정에 대 한 서비스 사용자 이름 (SPN) 설정에서 setspn.exe 도구입니다.Now set the ServicePrincipalName (SPN) for this account using the setspn.exe tool. SPN은 다음 예제에 지정 된 대로 형식 이어야 합니다:의 정규화 된 도메인 이름을 찾을 수 있습니다는 SQL ServerSQL Server 호스트 컴퓨터를 실행 하 여 hostname --all-fqdnsSQL ServerSQL Server 호스트 및 TCP 포트는 1433 이어야 함 구성 하지 않으면 SQL ServerSQL Server 다른 포트 번호를 사용 하도록 합니다.The SPN must be formatted exactly as specified in the following example: You can find the fully qualified domain name of the SQL ServerSQL Server host machine by running hostname --all-fqdns on the SQL ServerSQL Server host, and the TCP port should be 1433 unless you have configured SQL ServerSQL Server to use a different port number.

setspn -A MSSQLSvc/**<fully qualified domain name of host machine>**:**<tcp port>** mssql
참고

"액세스 권한이 부족 합니다" 오류가 발생 하는 경우 수 있는 충분 한 권한이이 계정에 SPN을 설정할 수는 도메인 관리자와 함께 확인 해야 합니다.If you receive an error, "Insufficient access rights," then you need to check with a domain administrator that you have sufficient permissions to set an SPN on this account.

나중에 TCP 포트를 변경 하면 새 포트 번호로 setspn 명령을 다시 실행 해야 합니다.If you change the TCP port in the future, then you will need to run the setspn command again with the new port number. 다음 섹션의 단계를 수행 하 여 SQL Server 서비스 keytab에 새 SPN을 추가 해야 합니다.You will also need to add the new SPN to the SQL Server service keytab by following the steps in the next section.

자세한 내용은 Kerberos 연결의 서비스 사용자 이름 등록을 참조하세요.For more information, see Register a Service Principal Name for Kerberos Connections.

3 단계: 구성 SQL ServerSQL Server 서비스 keytabStep 3: Configure SQL ServerSQL Server service keytab

먼저, 이전 단계에서 만든 AD 계정에 대 한 키 버전 번호 (kvno)를 확인 합니다.First, check the Key Version Number (kvno) for the AD account created in the previous step. 일반적으로 2, 됩니다 이지만 여러 번 계정의 암호를 변경 하는 경우 다른 정수 수도 있습니다.Usually it will be 2, but it could be another integer if you changed the account's password multiple times. SQL ServerSQL Server 호스트 컴퓨터를 다음을 실행 합니다.On the SQL ServerSQL Server host machine, run the following:

kinit user@CONTOSO.COM

kvno MSSQLSvc/**<fully qualified domain name of host machine>**:**<tcp port>**

이제 이전 단계에서 만든 AD 사용자는 keytab 파일을 만듭니다.Now create a keytab file for the AD user you created in the previous step. 사용 하 여 그렇게 하려면 ktutil합니다.To do so we will use ktutil. 메시지가 표시 되 면 해당 AD 계정의 암호를 입력 합니다.When prompted, enter the password for that AD account.

sudo ktutil

ktutil: addent -password -p MSSQLSvc/**<fully qualified domain name of host machine>**:**<tcp port>**@CONTOSO.COM -k **<kvno from above>** -e aes256-cts-hmac-sha1-96

ktutil: addent -password -p MSSQLSvc/**<fully qualified domain name of host machine>**:**<tcp port>**@CONTOSO.COM -k **<kvno from above>** -e rc4-hmac

ktutil: wkt /var/opt/mssql/secrets/mssql.keytab

quit
참고

Ktutil 도구 암호의 유효성을 검사 하지는 않으므로 올바르게 입력 있는지를 확인 합니다.The ktutil tool does not validate the password, so make sure you enter it correctly.

이에 액세스할 수 있는 모든 사용자 keytab 파일을 가장할 수 SQL ServerSQL Server 도메인에 있으므로 해야 이러한 파일에 대 한 액세스는 유일한는 mssql 계정에 대 한 읽기 액세스:Anyone with access to this keytab file can impersonate SQL ServerSQL Server on the domain, so make sure you restrict access to the file such that only the mssql account has read access:

sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab
sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab

다음으로 구성 SQL ServerSQL Server 이 하 keytab Kerberos 인증에 대 한 파일:Next, configure SQL ServerSQL Server to use this keytab file for Kerberos authentication:

sudo /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
sudo systemctl restart mssql-server

4 단계: transact-sql에서 AD 기반 로그인 만들기Step 4: Create AD-based logins in Transact-SQL

연결할 SQL ServerSQL Server 새, AD 기반 로그인을 만듭니다.Connect to SQL ServerSQL Server and create a new, AD-based login:

CREATE LOGIN [CONTOSO\user] FROM WINDOWS;

로그인에 이제 나열 되어 있는지 확인 하십시오.는 sys.server_principals 시스템 카탈로그 뷰:Verify that the login is now listed in the sys.server_principals system catalog view:

SELECT name FROM sys.server_principals;

5 단계: 연결할 SQL ServerSQL Server AD 인증을 사용 하 여Step 5: Connect to SQL ServerSQL Server using AD Authentication

도메인 자격 증명을 사용 하는 클라이언트 컴퓨터에 로그인 합니다.Log in to a client machine using your domain credentials. 에 연결할 수 이제 SQL ServerSQL Server AD 인증을 사용 하 여 암호를 다시 입력 하지 않고도 합니다.Now you can connect to SQL ServerSQL Server without reentering your password, by using AD Authentication. AD 그룹에 대 한 로그인을 만들면 해당 그룹의 구성원 인 모든 AD 사용자는 동일한 방식으로 연결할 수 있습니다.If you create a login for an AD group, any AD user who is a member of that group can connect in the same way.
AD 인증을 사용 하는 클라이언트에 대 한 특정 연결 문자열 매개 변수는 사용 중인 드라이버에 따라 다릅니다.The specific connection string parameter for clients to use AD Authentication depends on which driver you are using. 몇 가지 예는 다음과 같습니다.A few examples are below.

Examples

예제 1: sqlcmd 도메인에 가입 된 Linux 클라이언트에서Example 1: sqlcmd on a domain-joined Linux client

사용 하 여 도메인에 가입 된 Linux 클라이언트에 로그인 ssh 및 도메인 자격 증명:Log in to a domain-joined Linux client using ssh and your domain credentials:

ssh -l user@contoso.com client.contoso.com

이전에 설치한 있는지 확인은 mssql 도구 패키지 하 고, 다음 사용 하 여 연결 sqlcmd 자격 증명을 지정 하지 않고:Make sure you've installed the mssql-tools package, then connect using sqlcmd without specifying any credentials:

sqlcmd -S mssql.contoso.com

도메인에 가입 된 Windows 클라이언트에서 예 2: SSMSExample 2: SSMS on a domain-joined Windows client

도메인 자격 증명을 사용 하는 도메인에 가입 된 Windows 클라이언트에 로그인 합니다.Log in to a domain-joined Windows client using your domain credentials. 있는지 확인 SQL Server Management StudioSQL Server Management Studio 설치 된 다음에 연결 하면 SQL ServerSQL Server 인스턴스를 지정 하 여 Windows 인증서버에 연결 대화 합니다.Make sure SQL Server Management StudioSQL Server Management Studio is installed, then connect to your SQL ServerSQL Server instance by specifying Windows Authentication in the Connect to Server dialog.

다른 클라이언트 드라이버를 사용 하 여 AD 인증AD Authentication using other client drivers

• JDBC: Kerberos를 사용 하 여 통합 인증을 SQL 서버에 연결 하려면• JDBC: Using Kerberos Integrated Authentication to Connect SQL Server
• ODBC: 통합된 인증을 사용 하 여• ODBC: Using Integrated Authentication
• ADO.NET: 연결 문자열 구문• ADO.NET: Connection String Syntax