Go-MSSQLDB 接続オプション

本記事では、 go-mssqldb ドライバが受け入れるすべての接続パラメータの完全な参考文献を提供します。 接続文字列 フォーマットの構文については、Connection strings を参照してください。

共通パラメーター

パラメーター Aliases Default Description
user id user - SQL Serverのログイン名。
password - - SQL Serverログイン用のパスワード。
database - - ターゲットデータベース。
connection timeout - 0 ログインタイムアウトは数秒で完了します。 0 無限に待つ。 接続やクエリのタイムアウトにはGoコンテキストを好む。
dial timeout - 15 x protocol count ネットワークダイヤルタイムアウトは数秒で完了します。 0 無限に待つ。 ドライバーは登録プロトコルごとに15秒のデフォルト設定です。
encrypt - false 暗号化モード。 Azure SQLは常にサーバー側で暗号化が必要です。 暗号化 と証明書を参照してください。
app name - - ログイン記録にアプリケーション名が送信されました。
authenticator - - azureadなどの外部パッケージで登録されるカスタム認証器。

サーバーとポート

ADOおよびODBC形式では、サーバーとポートは別々のパラメータです:

パラメーター Default Description
server localhost ホスト名SQL Server、オプションで\instanceも含めます。
port 1433 TCPポート番号。

URL形式では、ホストとポートをURLに直接指定してください: sqlserver://host:port

フェールオーバー

パラメーター Default Description
failoverpartner - フェイルオーバーパートナーサーバーのホスト名。
failoverpartnerspn - フェイルオーバーパートナーのサービスプリンシパル名(SPN)です。
failoverport 1433 フェイルオーバーパートナー用のTCPポート。

プライマリサーバーにアクセスできない場合、ドライバーはフェイルオーバーパートナーへの接続を自動的に試みます。

ネットワークとパフォーマンス

パラメーター Default Description
packet size 4096 TDSパケットサイズ(バイト単位)。 有効範囲:512-32767。
keepAlive 30 生存維持間隔は数秒で。 0 OSのデフォルトを使用しています。
TrustServerCertificate 依存先 encrypt trueたらサーバー証明書検証をスキップしてください。 デフォルトはencryptが指定されている場合falseencryptが省略されるとtrueとなります。 encrypt=strict場合は無視されます。 運用環境での使用は推奨されません。
multisubnetfailover - AlwaysOn可用性グループのマルチサブネットフェイルオーバーを有効にしてください。

アプリケーションの意図

パラメーター Values Description
ApplicationIntent ReadOnlyReadWrite アプリケーションが読み取り専用か読み書きかを宣言します。 AlwaysOn読み取り専用ルーティングで使用。

ワークステーションとSPN

パラメーター Default Description
Workstation ID - ログイン記録にワークステーション名が送信されました。
ServerSPN - SQL Serverのサービスプリンシパル名。 非デフォルトSPN構成でのみ必要です。

プロトコル

パラメーター Values Description
protocol tcpnplpcadmin トランスポート プロトコル プロトコルを参照してください
pipe - パイプパスの名前付き。 protocol=npの場合のみ適用されます。

常に暗号化されています

パラメーター Default Description
columnencryption None 常に暗号化を有効にするには true に設定してください。 「 常に暗号化されている」を参照してください。

暗号化とTLS

パラメーター Default Description
encrypt 共通パラメータを参照 strict (TDS 8.0)、 true/mandatoryfalse/optionaldisable
TrustServerCertificate 依存先 encrypt true時は証明書検証を省略してください。 デフォルトはencryptが指定されている場合falseencryptが省略されるとtrueとなります。 encrypt=strict場合は無視されます。
certificate None 証明書チェーン検証のためのPEMまたはDER証明書ファイルへのパス。
serverCertificate None バイトレベル比較のためのPEMまたはDER証明書ファイルへのパス(v1.5.0以降)。
hostnameincertificate None TLS証明書検証時に使用されたホスト名を上書きします。
tlsmin None 最低限のTLSバージョン: 1.01.11.21.3

詳細な暗号化ガイダンスについては、「 暗号化と証明書」を参照してください。

ログフラグ

診断出力を制御するには log パラメータを使いましょう。 値はビットマスクフラグであり、整数の値を加算することで組み合わせることができます:

価値 Description
1 ログエラー
2 ログ メッセージ
4 丸太列
8 SQL ステートメントをログに記録する
16 ログのパラメーター
32 ログ トランザクション
64 ログデバッグ情報
128 ログリトライ

例:エラーやSQL文を記録するには、 log=9 (1 + 8)を設定します。

詳細は 「ログと診断」をご覧ください。

ユニーク識別子列

ドライバーはデフォルトで uniqueidentifier 列を生のバイト配列として読み込みます。 標準的なGUID形式の文字列を取得するには、string[]byteではなくmssql.UniqueIdentifierにスキャンしてください。 このドライバーは接続パラメータによる自動GUID変換をサポートしていません。

SessionInitSQL

SessionInitSQLは接続文字列パラメータではありません。 NewConnectorConfig APIを通して設定してください:

import (
    "database/sql"
    "github.com/microsoft/go-mssqldb"
    "github.com/microsoft/go-mssqldb/msdsn"
)

config := msdsn.Config{
    Host:     "<server>",
    Port:     1433,
    Database: "AdventureWorks2025",
}

connector := mssql.NewConnectorConfig(config)
connector.SessionInitSQL = "SET ANSI_NULLS ON"
db := sql.OpenDB(connector)

SQL文は、新しい接続が確立された直後に実行され、接続が呼び出し元に戻される前に実行されます。