Linux または macOS からの接続
この記事では、SQL Server データベースへの接続を作成する方法について説明します。
接続のプロパティ
Linux および macOS でサポートされている接続文字列のすべてのキーワードと属性については、「DSN と接続文字列のキーワードと属性」をご覧ください。
重要
データベース ミラーリングを使用する (フェールオーバー パートナーがある) データベースに接続する場合は、接続文字列にデータベース名を指定しないでください。 代わりに、use <データベース名> コマンドを送信してデータベースに接続してから、クエリを実行します。
Driver キーワードには、次のいずれかの値を渡すことができます。
ドライバーをインストールしたときに使用した名前。
ドライバー ライブラリへのパス。ドライバーのインストールに使用されたテンプレート .ini ファイルで指定されています。
DSN は省略可能です。 DSN を使用して、接続文字列で参照できる DSN
名の下で接続文字列キーワードを定義できます。 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=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
のように DSN
キーワードなしで接続文字列を指定することに相当します。
サーバーに接続するために、必要に応じてプロトコルとポートを指定することができます。 たとえば、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 の使用
TLS (トランスポート層セキュリティ) (以前の SSL (Secure Sockets Layer)) では、SQL Server への接続を暗号化することができます。 TLS は、ネットワーク上で SQL Server のユーザー名とパスワードを保護します。 TLS は、サーバーの ID を検証して、man-in-the-middle (MITM) 攻撃に対しても保護します。
暗号化を有効にすると、セキュリティは向上しますが、パフォーマンスは低下します。
詳しくは、「SQL Server への接続の暗号化」および「検証を伴わない暗号化の使用」をご覧ください。
Encrypt と TrustServerCertificateの設定に関係なく、サーバー ログインの資格情報 (ユーザー名とパスワード) は常に暗号化されます。 次の表に、Encrypt と TrustServerCertificate の設定の効果を示します。
ODBC Driver 18 以降
暗号化の設定 | [Trust Server Certificate] | サーバーの強制的な暗号化 | 結果 |
---|---|---|---|
いいえ | 番号 | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されません。 |
いいえ | 有効 | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されません。 |
はい | いいえ | いいえ | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
はい | はい | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
いいえ | 番号 | はい | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
いいえ | イエス | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
はい | いいえ | はい | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
はい | イエス | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
高 | - | - | TrustServerCertificate は無視されます。 サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
Note
Strict は、TDS 8.0 接続をサポートするサーバーに対してのみ使用できます。
ODBC Driver 17 以前
暗号化の設定 | [Trust Server Certificate] | サーバーの強制的な暗号化 | 結果 |
---|---|---|---|
いいえ | 番号 | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されません。 |
いいえ | 有効 | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されません。 |
はい | いいえ | いいえ | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
はい | はい | いいえ | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
いいえ | 番号 | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
いいえ | イエス | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
はい | いいえ | はい | サーバー証明書は確認されます。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
はい | イエス | はい | サーバー証明書は確認されません。 クライアントとサーバー間で送信されるデータは暗号化されます。 |
接続文字列を使用する場合、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 の証明書と照合する証明書ファイルへのパスを指定できます。 このオプションは、厳格な暗号化を使用する場合にのみ利用できます。 受け付けられる証明書の形式は PEM、DER、CER です。 指定した場合、SQL Server の証明書は、指定された ServerCertificate
が完全に一致するかどうかを確認することでチェックされます。
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 Driver 17.8 以降では、接続文字列で KeepAlive
キーワードと KeepAliveInterval
キーワードを指定できます。
KeepAlive=<integer>
では、TCP がキープアライブ パケットを送信することによって、アイドル状態の接続が壊れていないかどうかを確認する頻度を制御します。 既定値は 30 秒です。KeepAliveInterval=<integer>
では、応答を受信するまでキープアライブを再送信する間隔を設定します。 既定値は 1 秒です。