Linux 또는 macOS에서 연결
이 문서에서는 SQL Server 데이터베이스에 대한 연결을 생성하는 방법에 대해 설명합니다.
연결 속성
Linux 및 macOS에서 지원되는 모든 연결 문자열 키워드 및 특성에 대해서는 DSN 및 연결 문자열 키워드 및 특성을 참조하세요.
Important
데이터베이스 미러링을 사용하는 데이터베이스(장애 조치(failover) 파트너가 있는)에 연결할 때는 연결 문자열에 데이터베이스 이름을 지정하지 않아야 합니다. 대신 쿼리를 실행하기 전에 use database_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=<password>
과(와) 같이 지정합니다.
위의 연결 문자열은 DSN
과 같이 Driver=ODBC Driver 18 for SQL Server;Server=tcp:localhost,1433;Encrypt=yes;UID=my_username;PWD=<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에 대한 설정과 관계없이 서버 로그인 자격 증명(사용자 이름 및 비밀번호)은 상시 암호화됩니다. 다음 표에는 Encrypt 및 TrustServerCertificate 설정의 효과를 보여줍니다.
ODBC 드라이버 18 이상
설정 암호화 | 서버 인증서 신뢰 | 서버 강제 암호화 | 결과 |
---|---|---|---|
아니요 | 아니요 | 아니요 | 서버 인증서가 확인되지 않습니다. 클라이언트와 서버 간에 전송된 데이터는 암호화되지 않습니다. |
예 | 예 | 아니요 | 서버 인증서가 확인되지 않습니다. 클라이언트와 서버 간에 전송된 데이터는 암호화되지 않습니다. |
예 | 아니요 | 아니요 | 서버 인증서가 확인됩니다. 클라이언트와 서버 간에 전송된 데이터가 암호화됩니다. |
예 | 예 | 아니요 | 서버 인증서가 확인되지 않습니다. 클라이언트와 서버 간에 전송된 데이터가 암호화됩니다. |
아니요 | 아니요 | 예 | 서버 인증서가 확인됩니다. 클라이언트와 서버 간에 전송된 데이터가 암호화됩니다. |
예 | 예 | 예 | 서버 인증서가 확인되지 않습니다. 클라이언트와 서버 간에 전송된 데이터가 암호화됩니다. |
예 | 아니요 | 예 | 서버 인증서가 확인됩니다. 클라이언트와 서버 간에 전송된 데이터가 암호화됩니다. |
예 | 예 | 예 | 서버 인증서가 확인되지 않습니다. 클라이언트와 서버 간에 전송된 데이터가 암호화됩니다. |
엄격 | - | - | 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부터는 연결 문자열에 KeepAlive
및 KeepAliveInterval
키워드를 지정할 수 있습니다.
KeepAlive=<integer>
는 연결을 유지하기 위해 TCP에서 연결 유지 패킷을 보내는 빈도를 제어합니다. 기본값은 30초입니다.KeepAliveInterval=<integer>
은 응답이 수신될 때까지 연결 유지 재전송을 구분하는 간격을 결정합니다. 기본값은 1초입니다.