Linux 또는 macOS에서 연결

ODBC 드라이버 다운로드

이 문서에서는 SQL Server 데이터베이스에 대한 연결을 생성하는 방법에 대해 설명합니다.

연결 속성

Linux 및 macOS에서 지원되는 모든 연결 문자열 키워드 및 특성에 대해서는 DSN 및 연결 문자열 키워드 및 특성을 참조하세요.

Important

데이터베이스 미러링을 사용하는 데이터베이스(장애 조치(failover) 파트너가 있는)에 연결할 때는 연결 문자열에 데이터베이스 이름을 지정하지 않아야 합니다. 대신 쿼리를 실행하기 전에 usedatabase_name 명령을 보내 데이터베이스에 연결합니다.

Driver 키워드에 전달되는 값은 다음 중 하나일 수 있습니다

  • 드라이버를 설치할 때 사용한 이름.

  • 드라이버를 설치하는 데 사용되는 템플릿 .ini 파일에 지정된 드라이버 라이브러리의 경로.

DSN는 선택 사항입니다. DSN을 사용하여 연결 문자열에서 참조할 수 있는 DSN 이름 아래에 연결 문자열 키워드(keyword)를 정의할 수 있습니다. DSN을 만들려면 현재 사용자만 액세스할 수 있는 사용자 DSN의 경우 ~/.odbc.ini(홈 디렉터리의 .odbc.ini), 시스템 DSN(관리자 권한 필요)의 경우 /etc/odbc.ini 파일을 만들고(필요한 경우) 편집합니다. 다음 odbc.ini는 DSN에 필요한 최소 항목을 표시하는 샘플입니다.

# [DSN name]
[MSSQLTest]  
Driver = ODBC Driver 18 for SQL Server  
# Server = [protocol:]server[,port]  
Server = tcp:localhost,1433
Encrypt = yes
#
# Note:  
# Port isn't a valid keyword in the odbc.ini file  
# for the Microsoft ODBC driver on Linux or macOS
#  

연결 문자열에 위의 DSN을 사용하여 연결하려면 DSN 키워드를 DSN=MSSQLTest;UID=my_username;PWD=my_password과(와) 같이 지정합니다.
위의 연결 문자열은 DSN과 같이 Driver=ODBC Driver 18 for SQL Server;Server=tcp:localhost,1433;Encrypt=yes;UID=my_username;PWD=my_password 키워드 없이 연결 문자열을 지정하는 것과 동일합니다.

필요에 따라 서버에 연결할 프로토콜 및 포트를 지정할 수 있습니다. 예를 들어 Server=tcp:servername,12345입니다. Linux와 macOS 드라이버에서 지원하는 유일한 프로토콜은 tcp입니다.

정적 포트의 명명된 인스턴스에 연결하려면 Server=servername,port_number를 사용합니다. 버전 17.4 이전에는 동적 포트 연결이 지원되지 않습니다.

또는 템플릿 파일에 DSN 정보를 추가하고 다음 명령을 실행하여 이를 ~/.odbc.ini에 추가할 수 있습니다.

odbcinst -i -s -f <template_file>

ini 파일 및 odbcinst에 대한 전체 설명서는 unixODBC 설명서를 참조하세요. ODBC Driver for SQL Server 관련 odbc.ini 파일의 항목에 대해서는 Linux 및 macOS에서 지원되는 DSN 및 연결 문자열 키워드 및 특성을 참조하세요.

isql을(를) 사용하여 연결을 테스트해 드라이버가 작동하는지 확인하거나 다음 명령을 사용할 수 있습니다.

bcp master.INFORMATION_SCHEMA.TABLES out OutFile.dat -S <server> -U <name> -P <password>

TLS/SSL 사용

이전에 SSL(Secure Sockets Layer)로 알려진 TLS(전송 계층 보안)를 사용하여 SQL Server에 대한 연결을 암호화할 수 있습니다. TLS는 네트워크를 통해 SQL Server 사용자 이름 및 비밀번호를 보호합니다. 또한 TLS는 중간자(man-in-the-middle) 공격으로부터 보호하기 위해 서버의 ID를 확인합니다.

암호화를 사용하도록 설정하면 성능이 저하되는 대신 보안이 강화됩니다.

자세한 내용은 SQL Server에 대한 연결 암호화유효성 검사 없이 암호화 사용을 참조하세요.

암호화TrustServerCertificate에 대한 설정과 관계없이 서버 로그인 자격 증명(사용자 이름 및 비밀번호)은 상시 암호화됩니다. 다음 표에는 EncryptTrustServerCertificate 설정의 효과를 보여줍니다.

ODBC 드라이버 18 이상

설정 암호화 서버 인증서 신뢰 서버 강제 암호화 결과
아니요 없음 아니요 서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화되지 않습니다.
아니요 서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화되지 않습니다.
아니요 아니요 서버 인증서가 확인되었습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
아니요 서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
아니요 없음 서버 인증서가 확인되었습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
아니요 서버 인증서가 확인되었습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
Strict - - TrustServerCertificate는 무시됩니다. 서버 인증서가 확인되었습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.

참고 항목

Strict는 TDS 8.0 연결을 지원하는 서버에서만 사용할 수 있습니다.

ODBC 드라이버 17 이하

설정 암호화 서버 인증서 신뢰 서버 강제 암호화 결과
아니요 없음 아니요 서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화되지 않습니다.
아니요 서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화되지 않습니다.
아니요 아니요 서버 인증서가 확인되었습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
아니요 서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
아니요 없음 서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
아니요 서버 인증서가 확인되었습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.
서버 인증서가 확인되지 않습니다.
클라이언트와 서버 간에 전송된 데이터는 암호화됩니다.

연결 암호화를 사용할 때 SQL Server TLS/SSL 인증서에 있는 주체 CN(일반 이름) 또는 SAN(주체 대체 이름)의 이름(또는 IP 주소)은 연결 문자열에 지정된 서버 이름(또는 IP 주소)과 정확하게 일치해야 합니다. HostnameInCertificate 키워드(v18.0 이상)를 사용하여 TLS/SSL 인증서의 이름과 일치하는 대체 이름을 지정할 수 있습니다. 키워드가 지정되면 SQL Server TLS/SSL 인증서가 서버 이름 중 하나, 또는 HostnameInCertificate와 일치해야 합니다.

기본적으로 암호화된 연결은 서버의 인증서를 항상 확인합니다. 그러나 자체 서명된 인증서가 있고 엄격한 암호화 모드를 사용하지 않는 서버에 연결하는 경우 TrustServerCertificate 옵션을 추가하여 신뢰할 수 있는 인증 기관 목록에 대한 인증서 확인을 무시할 수 있습니다.

Driver={ODBC Driver 18 for SQL Server};Server=ServerNameHere;Encrypt=YES;TrustServerCertificate=YES  

엄격한 암호화 모드에서는 인증서가 항상 확인됩니다. 표준 인증서 유효성 검사를 위한 옵션으로 ServerCertificate 키워드(v18.1 이상)를 사용하여 SQL Server 인증서와 일치하는 인증서 파일의 경로를 지정할 수 있습니다. 이 옵션은 Strict 암호화를 사용하는 경우에만 사용할 수 있습니다. 허용되는 인증서 형식은 PEM, DER 및 CER입니다. 지정된 경우 제공된 ServerCertificate이 정확히 일치하는지 확인하여 SQL Server 인증서가 확인됩니다.

Linux와 macOS의 TLS는 OpenSSL 라이브러리를 사용합니다. 다음 표에서는 최소 지원되는 버전의 OpenSSL 및 각 플랫폼에 대한 기본 인증서 신뢰 저장소 위치를 보여줍니다.

플랫폼 최소 OpenSSL 버전 기본 인증서 신뢰 저장소 위치
Debian 10, 11, 12 1.1.1 /etc/ssl/certs
Debian 9 1.1.0 /etc/ssl/certs
Debian 8.71 1.0.1 /etc/ssl/certs
OS X 10.11, macOS 1.0.2 /usr/local/etc/openssl/certs
Red Hat Enterprise Linux 9 3.0.1 /etc/pki/tls/cert.pem
Red Hat Enterprise Linux 8 1.1.1 /etc/pki/tls/cert.pem
Red Hat Enterprise Linux 7 1.0.1 /etc/pki/tls/cert.pem
Red Hat Enterprise Linux 6 1.0.0-10 /etc/pki/tls/cert.pem
SUSE Linux Enterprise 15 1.1.0 /etc/ssl/certs
SUSE Linux Enterprise 11, 12 1.0.1 /etc/ssl/certs
Ubuntu 22.04, 23.04 3.0.2 /etc/ssl/certs
Ubuntu 20.04 1.1.1 /etc/ssl/certs
Ubuntu 18.04 1.1.0 /etc/ssl/certs
Ubuntu 16.04 1.0.2 /etc/ssl/certs
Ubuntu 14.04 1.0.1 /etc/ssl/certs
Alpine 3.17, 3.18 3.0.1 /etc/ssl/certs

SQLDriverConnect를 사용하여 연결할 때 Encrypt 옵션을 사용하여 연결 문자열에서 암호화를 지정할 수도 있습니다.

TCP 연결 유지 설정 조정

ODBC 드라이버 17.4부터 응답을 받지 못하면 드라이버가 연결 유지 패킷을 보내고 재전송하는 빈도를 구성할 수 있습니다. 구성하려면 odbcinst.ini의 드라이버 섹션 또는 odbc.ini의 DSN 섹션에 다음 설정을 추가합니다. DSN을 사용하여 연결하는 경우 드라이버는 DSN 섹션의 설정(있는 경우)을 사용합니다. 연결 문자열만 사용하여 연결하는 경우에는 odbcinst.ini의 드라이버 섹션에 있는 설정을 사용합니다. 설정이 어느 위치에도 없는 경우 드라이버는 기본값을 사용합니다. ODBC 드라이버 17.8부터는 연결 문자열에 KeepAliveKeepAliveInterval 키워드를 지정할 수 있습니다.

  • KeepAlive=<integer>는 연결을 유지하기 위해 TCP에서 연결 유지 패킷을 보내는 빈도를 제어합니다. 기본값은 30초입니다.

  • KeepAliveInterval=<integer>은 응답이 수신될 때까지 연결 유지 재전송을 구분하는 간격을 결정합니다. 기본값은 1초입니다.

참고 항목