JDBC ドライバーの構成¶
このトピックでは、ドライバーを使用してSnowflakeに接続する方法など、 JDBC ドライバーを構成する方法について説明します。
注釈
接続パラメーターは、 JDBC ドライバーの接続パラメーター参照 に記載されています。
このトピックの内容:
JDBC ドライバークラス¶
JDBC アプリケーションでドライバークラスとして net.snowflake.client.jdbc.SnowflakeDriver
を使用します。
注釈
アプリケーションコード内で他のSnowflakeクラスまたはメソッドを参照しないでください。将来、改善および修正を実装するために変更される可能性があります。
以前のドライバークラス
com.snowflake.client.jdbc.SnowflakeDriver
は引き続きサポートされますが、非推奨です(つまり、将来の TBDリリースで削除されます)。そのため、以前のクラス名を参照するコードは引き続き機能しますが、変更が実装されているため、新しいクラス名を参照するように、コードを更新する必要があります。
JDBC ドライバー接続文字列¶
JDBC ドライバーを使用してSnowflakeに接続するには、次の構文の接続文字列が必要です。
構文¶
jdbc:snowflake://<account_identifier>.snowflakecomputing.com/?<connection_params>
接続パラメーター¶
注釈
個々の接続パラメーターのドキュメントについては、 JDBC ドライバーの接続パラメーター参照 をご参照ください。
<アカウント識別子>
Snowflakeアカウントのアカウント識別子を指定します。詳細については、 アカウント識別子 をご参照ください。JDBC 接続文字列で使用されるアカウント識別子の例については、 例 をご参照ください。
<接続パラメーター>
一連の1つ以上の JDBC 接続パラメーター と セッションパラメーター は、
<パラメーター>=<値>
の形式で指定します。各パラメーターはアンパサンド文字(&
)で区切られ、接続文字列のいずれにもスペースは使用しません。スペース、アンパサンド(
&
)、等号(=
)、またはその他の特殊文字を使用するパラメーター値を設定する必要がある場合は、 特殊文字を URL エンコード する必要があります。たとえば、 クエリタグ セッションパラメーターにスペース、アンパサンド、等号を含む値を指定する必要がある場合は、次のようになります。String connectionURL = "jdbc:snowflake://myorganization-myaccount.snowflakecomputing.com/?query_tag='folder=folder1 folder2&'
スペースを
%20
、アンパサンドを%26
、等号を%3D
としてエンコードします。String connectionURL = "jdbc:snowflake://myorganization-myaccount.snowflakecomputing.com/?query_tag='folder%3Dfolder1%20folder2%26'
別の方法として、接続文字列でこれらのパラメーターを指定する代わりに、
DriverManager.getConnectionIO
メソッドに渡すProperties
オブジェクトでこれらのパラメーターを設定できます。Properties props = new Properties(); props.put("parameter1", parameter1Value); props.put("parameter2", parameter2Value); Connection con = DriverManager.getConnection("jdbc:snowflake://<account_identifier>.snowflakecomputing.com/", props);
注釈
個々の接続パラメーターのドキュメントについては、 JDBC ドライバーの接続パラメーター参照 をご参照ください。
その他のパラメーター¶
任意のセッションパラメーターを接続文字列に含めることができます。例:
CLIENT_OUT_OF_BAND_TELEMETRY_ENABLED=<ブール値>
アウトオブバンドテレメトリを有効にするかどうかを指定します。
デフォルトは
true
です。CLIENT_SESSION_KEEP_ALIVE=<ブール値>
非アクティブな状態が一定時間続いた後、現在のセッションをアクティブのままにするか、ユーザーに再度ログインさせるかを指定します。値が
true
の場合、Snowflakeは、ユーザーからのアクティビティがない場合でも、セッションを無期限にアクティブに保ちます。値がfalse
の場合、ユーザーは4時間の非アクティブ後に再度ログインする必要があります。デフォルトは
false
です。CLIENT_SESSION_KEEP_ALIVE_HEARTBEAT_FREQUENCY=<整数>
クライアントがセッションのトークンの更新を試みる間隔の秒数(900から3600)を指定します。
デフォルトは
3600
です。
すべてのセッションパラメーターの説明については、 パラメーター をご参照ください。
例¶
以下は、組織 myorganization
のアカウント myaccount
を指定する アカウント識別子 を使用する、接続文字列の例です。
jdbc:snowflake://myorganization-myaccount.snowflakecomputing.com/?user=peter&warehouse=mywh&db=mydb&schema=public
以下は、アカウント識別子として アカウントロケーター xy12345
を使用する、接続文字列の例です。
jdbc:snowflake://xy12345.snowflakecomputing.com/?user=peter&warehouse=mywh&db=mydb&schema=public
この例では、 AWS US 西部(オレゴン)リージョンのアカウントを使用しています。アカウントが別のリージョンにある場合、またはアカウントが別のクラウドプロバイダーを使用している場合は、 アカウントロケーターの後に追加のセグメントを指定する 必要があります。
認証でのシングルサインオン(SSO)の使用¶
シングルサインオン(SSO)を使用するようにSnowflakeを構成 している場合、認証に SSO を使用するようにクライアントアプリケーションを構成できます。詳細については Snowflakeに接続するクライアントアプリケーションでの SSO の使用 をご参照ください。
多要素認証の使用¶
Snowflakeは、 MFA トークンキャッシングと SSO の組み合わせを含む、 MFA トークンのキャッシングをサポートしています。
詳細については、 MFA トークンキャッシングを使用して認証中のプロンプトの数を最小限に抑える --- オプション をご参照ください。
キーペア認証とキーローテーションの使用¶
Snowflake JDBC ドライバーは、キーペア認証とキーローテーションをサポートしています。この認証方法には、2048ビット(最小)の RSA キーペアが必要です。
開始するには、 キーペア認証とキーペアローテーション に示すように、キーペア認証の初期構成を完了します。
そして、次に挙げる3つのオプションのいずれかを選択して、 JDBC 接続プロパティまたは JDBC 接続文字列を構成します。
接続プロパティのprivateKeyプロパティを介して秘密キーを指定します。
接続プロパティで個別のプロパティとして、そのファイルの秘密キーファイル名とパスワードを指定します。
接続文字列の一部として、そのファイルの秘密キーファイル名とパスワードを指定します。
これらのオプションについては、次の3つのセクションで詳しく説明します。
接続プロパティの privateKey
プロパティ¶
このセクションでは、 privateKey
プロパティをファイルの秘密キーに設定する例を示します。
この例では、 Bouncy Castle暗号化 APIs を使用しています。この例をコンパイルして実行するには、クラスパスに次の JAR ファイルを含める必要があります。
プロバイダー JAR ファイル(
bcprov-jdkversions.jar
)PKIX / CMS / EAC / PKCS / OCSP / TSP / OPENSSL JAR ファイル(
bcpkix-jdkversions.jar
)
ここで、 versions
は、 JAR ファイルがサポートする JDK のバージョンを指定します。
この例を使用するには、
以下のサンプルコード をコピーし、次のプレースホルダー値を置き換えます。
プレースホルダー
説明
path/rsa_key.p8
これを前に生成した秘密キーファイルのパスと名前に設定します。
private_key_passphrase
暗号化されたキーを生成した場合は、
getPrivateKeyPassphrase()
メソッドを実装して、そのキーを復号化するためのパスフレーズを返します。account_identifier
これは、使用する アカウント識別子 に設定します。
user
これをSnowflakeのログイン名に設定します。
database_name
これを、使用するデータベースの名前に設定します。
schema_name
これを、使用するスキーマの名前に設定します。
warehouse_name
これを、使用するウェアハウスの名前に設定します。
role
これを、使用するロールの名前に設定します。
サンプルコードをコンパイルして実行します。クラスパスにBouncy Castle JAR ファイルを含めます。
たとえば、Linuxおよび macOS の場合、
javac -cp bcprov-jdk<versions>.jar:bcpkix-jdk<versions>.jar TestJdbc.java java -cp .:snowflake-jdbc-<ver>.jar:bcprov-jdk<versions>.jar:bcpkix-jdk<versions>.jar TestJdbc.java
Windowsの場合、
javac -cp bcprov-jdk<versions>.jar;bcpkix-jdk<versions>.jar TestJdbc.java java -cp .;snowflake-jdbc-<ver>.jar;bcprov-jdk<versions>.jar;bcpkix-jdk<versions>.jar TestJdbc.java
サンプルコード
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import org.bouncycastle.openssl.jcajce.JceOpenSSLPKCS8DecryptorProviderBuilder;
import org.bouncycastle.operator.InputDecryptorProvider;
import org.bouncycastle.operator.OperatorCreationException;
import org.bouncycastle.pkcs.PKCS8EncryptedPrivateKeyInfo;
import org.bouncycastle.pkcs.PKCSException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Paths;
import java.security.PrivateKey;
import java.security.Security;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;
import java.util.Properties;
public class TestJdbc
{
// Path to the private key file that you generated earlier.
private static final String PRIVATE_KEY_FILE = "/<path>/rsa_key.p8";
public static class PrivateKeyReader
{
// If you generated an encrypted private key, implement this method to return
// the passphrase for decrypting your private key.
private static String getPrivateKeyPassphrase() {
return "<private_key_passphrase>";
}
public static PrivateKey get(String filename)
throws Exception
{
PrivateKeyInfo privateKeyInfo = null;
Security.addProvider(new BouncyCastleProvider());
// Read an object from the private key file.
PEMParser pemParser = new PEMParser(new FileReader(Paths.get(filename).toFile()));
Object pemObject = pemParser.readObject();
if (pemObject instanceof PKCS8EncryptedPrivateKeyInfo) {
// Handle the case where the private key is encrypted.
PKCS8EncryptedPrivateKeyInfo encryptedPrivateKeyInfo = (PKCS8EncryptedPrivateKeyInfo) pemObject;
String passphrase = getPrivateKeyPassphrase();
InputDecryptorProvider pkcs8Prov = new JceOpenSSLPKCS8DecryptorProviderBuilder().build(passphrase.toCharArray());
privateKeyInfo = encryptedPrivateKeyInfo.decryptPrivateKeyInfo(pkcs8Prov);
} else if (pemObject instanceof PrivateKeyInfo) {
// Handle the case where the private key is unencrypted.
privateKeyInfo = (PrivateKeyInfo) pemObject;
}
pemParser.close();
JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider(BouncyCastleProvider.PROVIDER_NAME);
return converter.getPrivateKey(privateKeyInfo);
}
}
public static void main(String[] args)
throws Exception
{
String url = "jdbc:snowflake://<account_identifier>.snowflakecomputing.com";
Properties prop = new Properties();
prop.put("user", "<user>");
prop.put("privateKey", PrivateKeyReader.get(PRIVATE_KEY_FILE));
prop.put("db", "<database_name>");
prop.put("schema", "<schema_name>");
prop.put("warehouse", "<warehouse_name>");
prop.put("role", "<role_name>");
Connection conn = DriverManager.getConnection(url, prop);
Statement stat = conn.createStatement();
ResultSet res = stat.executeQuery("select 1");
res.next();
System.out.println(res.getString(1));
conn.close();
}
}
注釈
Windowsを含むすべてのオペレーティングシステムで、ファイルパスの区切り文字としてスラッシュを使用します。JDBC ドライバーは、スラッシュをプラットフォームの適切なパス区切り文字に置き換えます。
接続プロパティとしての秘密キーファイル名とパスワード¶
秘密キーファイル名とパスワードを個別の接続プロパティとして指定できます。次に例を示します。
Properties props = new Properties();
props.put("private_key_file", "/tmp/rsa_key.p8");
props.put("private_key_file_pwd", "dummyPassword");
Connection connection = DriverManager.getConnection("jdbc:snowflake://myorganization-myaccount.snowflake.com", props);
private_key_file
および private_key_file_pwd
パラメーターを指定する場合は、接続プロパティで privateKey
パラメーターを指定しないでください。
注釈
Windowsを含むすべてのオペレーティングシステムで、ファイルパスの区切り文字としてスラッシュを使用します。JDBC ドライバーは、スラッシュをプラットフォームの適切なパス区切り文字に置き換えます。
接続文字列の秘密キーファイル名とパスワード¶
以下に示すように、接続文字列で秘密キーファイル名とパスワードを指定できます。
Connection connection = DriverManager.getConnection(
"jdbc:snowflake://myorganization-myaccount.snowflake.com/?private_key_file=/tmp/rsa_key.p8&private_key_file_pwd=dummyPassword",
props);
注釈
Windowsを含むすべてのオペレーティングシステムで、ファイルパスの区切り文字としてスラッシュを使用します。JDBC ドライバーは、スラッシュをプラットフォームの適切なパス区切り文字に置き換えます。
接続文字列で秘密キーとパスワードを指定する場合は、接続プロパティでパラメーター private_key_file
、 private_key_file_pwd
、または privateKey
を指定しないでください。
SnowCD を使用したSnowflakeへのネットワーク接続の確認¶
ドライバーを設定したら、 SnowCD を使用して、Snowflakeへのネットワーク接続を評価およびトラブルシューティングできます。
初期設定プロセス中にオンデマンドで SnowCD をいつでも使用して、Snowflakeへのネットワーク接続を評価およびトラブルシューティングできます。
プロキシサーバーを使用した接続¶
Snowflake JDBC ドライバーでプロキシサーバーを使用するには、2つの方法があります。
クライアントアプリケーションの JVM (Java仮想マシン)でプロキシ設定のシステムプロパティを設定する。
プロキシホストとポート情報を JDBC 接続文字列または
DriverManager.getConnection()
メソッドに渡されるProperties
に含めます。
両方の手法を以下に文書化します。
注釈
接続文字列のプロキシ設定は、 JVM で設定されているプロキシシステムのプロパティを上書きします。
Tip
Snowflakeのセキュリティモデルは、トランスポート層セキュリティ(TLS)プロキシ(HTTPS 証明書を使用)を許可しません。プロキシサーバーは、公的に利用可能な認証機関(CA)を使用する必要があり、侵害されたプロキシを介した MITM (Man In The Middle)攻撃などの潜在的なセキュリティリスクを低減します。
TLS プロキシを使用する 必要がある 場合は、通信中に証明書が変更されないように、サーバーポリシーを更新してSnowflake証明書を渡すことを強くお勧めします。
別の方法として、接続文字列または Properties
オブジェクトに nonProxyHosts
パラメーターを設定して、特定の通信のプロキシをバイパスすることもできます。たとえば、 nonProxyHosts=".amazonaws.com"
を指定すると、Amazon S3アクセスをバイパスできます。
Javaシステムプロパティの設定によるプロキシサーバーの指定¶
プロキシサーバーを介して接続するために、 プロキシシステムのプロパティ を設定できます。これらをコードで設定するか、コマンドラインでクライアントアプリケーションの JVM (Java仮想マシン)に渡すことができます。
コードにシステムプロパティを設定するには、 System.setProperty
を呼び出します。
System.setProperty("http.useProxy", "true"); System.setProperty("http.proxyHost", "proxyHost Value"); System.setProperty("http.proxyPort", "proxyPort Value"); System.setProperty("https.proxyHost", "proxyHost HTTPS Value"); System.setProperty("https.proxyPort", ""proxyPort HTTPS Value"") System.setProperty("http.proxyProtocol", "https");
コマンドラインのシステムプロパティを JVM に渡すには、 -D
コマンドラインオプションを使用します。
-Dhttp.useProxy=true -Dhttps.proxyHost=<proxy_host> -Dhttp.proxyHost=<proxy_host> -Dhttps.proxyPort=<proxy_port> -Dhttp.proxyPort=<proxy_port> -Dhttp.proxyProtocol="https"
1つ以上の IP アドレスまたはホストのプロキシをバイパスするには、 http.nonProxyHosts
システムプロパティをこれらのホストのリストに設定します。
パイプ記号(
|
)を使用してホスト名を区切ります。パターンに一致するホスト名を指定するには、ワイルドカード文字としてアスタリスク(
*
)を使用します。
次の例は、コマンドラインでこのシステムプロパティを設定する方法を示しています。
-Dhttp.nonProxyHosts="*.my_company.com|localhost|myorganization-myaccount.snowflakecomputing.com|192.168.91.*"
JDBC 接続文字列によるプロキシサーバーの指定¶
注釈
URL の一部としてプロキシ情報を指定すると、プロキシ情報を指定する他の方法よりも安全性が低くなります。
JDBC 接続文字列に次のパラメーターを設定してプロキシサーバーを使用するには、
プロキシサーバーが認証を必要としない場合は、 proxyUser
および proxyPassword
パラメーターを省略できます。
プロキシサーバー接続でプロキシユーザー名とプロキシパスワードを使用した認証が必要な場合に HTTP プロトコルを使用すると、これらの認証情報が他のアプリケーションによってプレーンテキストとして公開される可能性があります。これらの認証情報の公開を回避するには、 proxyProtocol
パラメーターを使用して HTTPS プロトコルを指定します。
jdbc:snowflake://<account_identifier>.snowflakecomputing.com/?warehouse=<warehouse_name>&useProxy=true&proxyHost=<ip_address>&proxyPort=<port>&proxyUser=test&proxyPassword=test
例:
jdbc:snowflake://myorganization-myaccount.snowflakecomputing.com/?warehouse=DemoWarehouse1&useProxy=true&proxyHost=172.31.89.76&proxyPort=8888&proxyUser=test&proxyPassword=test
接続文字列で指定するプロキシ設定は、 JVM のプロキシシステムプロパティを上書きします。
プロキシサーバーのバイパス¶
1つ以上のホストに接続するときにプロキシサーバーをバイパスする必要がある場合は、 nonProxyHosts
パラメーターでホストのリストを指定します。
&nonProxyHosts=<bypass_proxy_for_these_hosts>
ホスト名は URL をエスケープしたパイプ記号(%7C
)で区切ります。アスタリスク(*
)をワイルドカードとして使用することもできます。例:
&nonProxyHosts=*.my_company.com%7Clocalhost%7Cmyorganization-myaccount.snowflakecomputing.com%7C192.168.91.*
プロキシサーバーへの接続に使用するプロトコルの指定¶
proxyProtocol
パラメーターを使用して、プロキシサーバーへの接続に使用するプロトコルを指定できます。デフォルト値は http
です。有効な値は、 http
および https
です。
例:
&proxyProtocol=https
OCSP¶
ドライバーが接続すると、Snowflakeは証明書を送信して、Snowflakeを偽装しているホストではなく、Snowflakeへの接続であることを確認します。ドライバーはその証明書を OCSP (オンライン証明書状態プロトコル)サーバーに送信し、証明書が失効していないことを確認します。
ドライバーが証明書を確認するために OCSP サーバーに到達できない場合、ドライバーは "fail open" or "fail closed" できます。
フェールオープンまたはフェールクローズモードの選択¶
JDBC 3.8.0より前のドライバーバージョンは、デフォルトでフェールクローズになります。バージョン3.8.0以降はデフォルトでフェールオープンになります。次のいずれかの方法でデフォルトの動作を上書きできます。
接続プロパティ
ocspFailOpen
をtrue
またはfalse
に設定します。例:Properties connection_properties = new Properties(); connection_properties.put("ocspFailOpen", "false"); ... connection = DriverManager.getConnection(connectionString, connection_properties);
システムプロパティ
net.snowflake.jdbc.ocspFailOpen
をtrue
またはfalse
に設定します。例:Properties p = new Properties(System.getProperties()); p.put("net.snowflake.jdbc.ocspFailOpen", "false"); System.setProperties(p);
OCSP コネクタまたはドライバーバージョンの確認¶
ドライバーまたはコネクタのバージョン、構成、および OCSP の動作の詳細については、 OCSP 設定 をご参照ください。
OCSP 応答キャッシュサーバー¶
注釈
OCSP 応答キャッシュサーバーは現在、Snowflake JDBC ドライバー3.6.0以降でサポートされています。
Snowflakeクライアントは、実際にデータを転送する前に安全な接続を確立する「ハンドシェイク」を使用して、Snowflakeサービスエンドポイントへのすべての接続を開始します。ハンドシェイクの一部として、クライアントはサービスエンドポイントの TLS 証明書を認証します。証明書の失効ステータスは、 CA (認証機関)の OCSP (オンライン証明書ステータスプロトコル)サーバーの1つにクライアント証明書リクエストを送信することにより確認されます。
OCSP サーバーからの応答が妥当な時間を超えて遅延すると、接続エラーが発生します。次のキャッシュは失効ステータスを保持し、これらの問題の軽減に役立ちます。
プロセスの存続期間中保持されるメモリキャッシュ。
ファイルキャッシュ。キャッシュディレクトリ(例:
~/.cache/snowflake
または~/.snowsql/ocsp_response_cache
)が削除されるまで保持します。Snowflake OCSP 応答キャッシュサーバー。 CA の OCSP サーバーから OCSP 応答を1時間ごとに取得し、24時間保存します。クライアントは、このサーバーキャッシュから特定のSnowflake証明書の検証ステータスをリクエストできます。
重要
サーバーポリシーでほとんどまたはすべての外部 IP アドレスおよびウェブサイトへのアクセスが拒否された場合、通常のサービス操作を許可するには、キャッシュサーバーアドレスを許可リストに登録することが 必須 です。キャッシュサーバーのホスト名は
ocsp*.snowflakecomputing.com:80
です。何らかの理由でキャッシュサーバーを無効化する必要がある場合は、
SF_OCSP_RESPONSE_CACHE_SERVER_ENABLED
環境変数をfalse
に設定します。値は大文字と小文字が区別され、小文字にする 必要がある ことに注意してください。
キャッシュレイヤーに OCSP 応答が含まれていない場合、クライアントは CAの OCSP サーバーから検証ステータスを直接取得しようとします。
ファイルキャッシュ¶
使いやすさを向上させるために、ドライバーは認証と OCSP 応答にファイルキャッシュを使用します。デフォルトでは、これらのファイルは次のディレクトリに保存されます。
- Linux:
~/.cache/snowflake
- macOS:
~/Library/Caches/Snowflake
- Windows:
%USERPROFILE%AppDataLocalSnowflakeCaches
JDBC アプリケーションユーザーのローカルオペレーティングシステムにユーザープロファイルがない場合、ドライバーはキャッシュファイルを一時ディレクトリに保存しようとします。次の環境変数を使用して、キャッシュファイルを別のディレクトリに書き込むようにドライバーを構成できます。
SF_TEMPORARY_CREDENTIAL_CACHE_DIR=string
ローカルディレクトリ内の一時的な認証情報キャッシュファイルの場所を指定します。これは、起動時に JVM オプション
-Dnet.snowflake.jdbc.temporaryCredentialCacheDir=string
で構成することもできます。SF_OCSP_RESPONSE_CACHE_DIR=string
ローカルディレクトリ内の OCSP 応答キャッシュファイルの場所を指定します。これは、起動時に JVM オプション
-Dnet.snowflake.jdbc.ocspResponseCacheDir=string
で構成することもできます。詳細については、このトピックの OCSP 応答キャッシュサーバー をご参照ください。
JVM オプションは、プログラムではなく( System.setProperty()
を介して)起動時に設定する必要があります。環境変数と JVM オプションの両方が提供されている場合、 JVM オプションが使用されます。
JDBC ログの構成¶
バージョン3.0.4以降、 JDBC ドライバーは2つのログ記録フレームワークをサポートしています。
Javaコアログ機能(Java.util.logging
)¶
このロガーを使用するには、 JVMに次のオプションを指定します。
-Dnet.snowflake.jdbc.loggerImpl=net.snowflake.client.log.JDK14Logger
次に、ロガーのアプリケーションプログラミングインターフェイス(API)を使用して、ログ記録の構成をカスタマイズできます。詳細については、 java.util.loggingパッケージのドキュメント をご参照ください。
たとえば、次の内容を含む logging.properties
という名前のファイルを作成します。
########################################################### # Default Logging Configuration File # # You can use a different file by specifying a filename # with the java.util.logging.config.file system property. # For example java -Djava.util.logging.config.file=myfile ############################################################ ############################################################ # Global properties ############################################################ # "handlers" specifies a comma-separated list of log Handler # classes. These handlers will be installed during VM startup. # Note that these classes must be on the system classpath. # ConsoleHandler and FileHandler are configured here such that # the logs are dumped into both a standard error and a file. handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler # Default global logging level. # This specifies which kinds of events are logged across # all loggers. For any given facility this global level # can be overriden by a facility specific level. # Note that the ConsoleHandler also has a separate level # setting to limit messages printed to the console. .level = INFO ############################################################ # Handler specific properties. # Describes specific configuration information for Handlers. ############################################################ # default file output is in the tmp dir java.util.logging.FileHandler.pattern = /tmp/snowflake_jdbc%u.log java.util.logging.FileHandler.limit = 5000000000000000 java.util.logging.FileHandler.count = 10 java.util.logging.FileHandler.level = INFO java.util.logging.FileHandler.formatter = net.snowflake.client.log.SFFormatter # Limit the messages that are printed on the console to INFO and above. java.util.logging.ConsoleHandler.level = INFO java.util.logging.ConsoleHandler.formatter = net.snowflake.client.log.SFFormatter # Example to customize the SimpleFormatter output format # to print one-line log message like this: # <level>: <log message> [<date/time>] # # java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n ############################################################ # Facility specific properties. # Provides extra control for each logger. ############################################################ # Snowflake JDBC logging level. net.snowflake.level = INFO net.snowflake.handler = java.util.logging.FileHandler
コマンドラインで JVM パラメーターを指定します。
java -jar application.jar -Dnet.snowflake.jdbc.loggerImpl=net.snowflake.client.log.JDK14Logger -Djava.util.logging.config.file=logging.properties
application.jar
は JDBC ドライバーのアプリケーションコードを参照します。ログファイルは /tmp/snowflake_jdbc*
にあります。
Simple Logging Facade for Java(org.slf4j
)¶
ロガー実装パッケージ(つまり、 org.sl4j:sl4j-jdk14
または org.sl4j:slf4j-log4j12
)またはカスタムロガー(つまり独自の org.slf4j.impl.StaticLoggerBinder
クラス)がクラスパスで定義されている場合、ドライバーはこのロガーを自動的に使用します。
次の JVM オプションを指定して、このロガーを使用することを明示的に選択することもできます。
-Dnet.snowflake.jdbc.loggerImpl=net.snowflake.client.log.SLF4JLogger
詳細については、 Simple Logging Facade for Java(SLF4J)のドキュメント をご参照ください。
注釈
上記の JVM オプションのいずれかを使用してドライバーのロガーを明示的に指定せず、クラスパスでカスタムロガーを定義していない場合(または3.0.4より前のドライバーバージョンを使用している場合)、ドライバーデフォルトで java.util.logging
を使用します。ただし、次のデフォルトの動作が適用されます。
ログファイルの書き込まれる場所を指定することはできません。常に
java.io.tmpDir
システムプロパティで指定されたディレクトリに書き込まれます。Linuxおよび macOS 環境では、デフォルトのディレクトリは通常、
/tmp
または/var/tmp
のいずれかです。Windows環境では、デフォルトのディレクトリは通常、
C:\temp
です。
ログレベルは、
tracing
接続パラメーターによって決定されます(上記を参照)。
ログ構成ファイル¶
あるいは、 ログレベル と、 sf_client_config.json
構成ファイルにログファイルを保存するディレクトリを簡単に指定できます。
注釈
このログ構成ファイル機能は、以下のログレベルのみをサポートします。
DEBUG
ERROR
INFO
OFF
TRACE
WARNING
この構成ファイルは、 JSON を使用して、 log_level
と log_path
のログパラメーターを以下のように定義します。
{
"common": {
"log_level": "DEBUG",
"log_path": "/home/user/logs"
}
}
ドライバーは、以下の順序で構成ファイルの場所を検索します。
client_config_file
接続パラメーター。構成ファイルへの完全なパスが含まれます。SF_CLIENT_CONFIG_FILE
環境変数。構成ファイルへの完全なパスが含まれます。JDBC ドライバーのインストールディレクトリ。ファイル名は
sf_client_config.json
にする必要があります。ユーザーのホームディレクトリ。ファイル名は
sf_client_config.json
にする必要があります。
注釈
構成ファイルが前述の場所のいずれにも見つからない場合、ドライバーは Javaコアログ機能 を使用します。
client_config_file
接続パラメーターまたはSF_CLIENT_CONFIG_FILE
環境変数で指定された構成ファイルが見つからないか、読み取れない場合、ドライバーはエラーメッセージをスローします。
PUT および GET コマンドの無効化¶
デフォルトでは、 JDBC ドライバーは PUT と GET コマンドを実行できます。PUT と GET コマンドによるローカルファイルシステムへのアクセスを許可しない場合は、以下の方法でこれらのコマンドを無効にできます。
JDBC_ENABLE_PUT_GET サーバーパラメーターを
FALSE
に設定します。JDBC enablePutGet 接続パラメーターを
false
に設定します。SFBaseSession.setEnablePutGet(false)
メソッドを呼び出します。
トラブルシューティングのヒント¶
プロパティが正しく設定されていることを確認する¶
DriverManager.getConnection()
メソッドは、特定の事前定義された名前(「パスワード」、「ウェアハウス」など)に一致するプロパティパラメーターの値のみを読み取ります。プロパティ名のスペルを間違えたり、余分なプロパティを含めたりすると、ドライバーはエラーまたは警告メッセージを出さずに、それらのプロパティを無視します。これにより、小さなスペルミスの検出が困難になる場合があります。
接続文字列とアカウントに正しい値を使用する¶
接続を確立できない場合は、 JDBC 接続文字列でアカウント識別子を正しく指定していることを確認します。アカウント識別子の詳細については、 アカウント識別子 をご参照ください。