Snowflake のロゴ

Snowflake / リリースノート / 2026/07/08 / 重要

Snowflake SQLAlchemy 1.11.0、接続情報とSQL生成を安全化

datadeveloper-tools

公式リリースノート

Snowflake SQLAlchemy 1.11.0は、接続URLとSQL生成に含まれる機密情報・利用者入力の扱いを強化しました。9個の接続パラメーターをURL照会文字列から渡せなくし、create_engine()connect_argsへ移す必要があります。

要点

  • hostprotocol、鍵・トークンファイル、キャッシュ・診断ログのパス、安全性を弱める設定など9項目がURL指定不可になりました。
  • アカウント・地域名のDNS安全文字検証、利用者名のパーセント符号化、DDLの識別子・文字列エスケープを強化しました。
  • クラウド秘密情報の表示マスクと任意のログ秘匿フィルターを追加し、単一テーブルのメタデータ取得も高速化しました。

今回の更新で変わること

最も互換性へ影響する変更は、機密性の高い接続パラメーターをURLの照会文字列から渡せなくしたことです。対象はhostprotocoltoken_file_pathprivate_key_fileocsp_response_cache_filenameconnection_diag_log_pathcrl_cache_dirunsafe_file_writeunsafe_skip_file_permissions_checkです。これらはcreate_engine()connect_argsへ渡します。すでに同方式を使うアプリは影響を受けません。

一時的な互換手段として、環境変数SNOWFLAKE_SQLALCHEMY_LEGACY_URL_PARAMS=1を設定すると以前の挙動へ戻せます。ただし恒久対応ではありません。URLはログ、例外、監視画面、構成管理へ残りやすいため、移行期限と所有者を決め、connect_argsへの変更後に互換設定を削除します。

接続URLの組み立ても安全化されます。accountregionは英数字、ハイフン、ピリオド、アンダースコアだけを許す検証を通り、予期しない文字がURLの接続先部分を壊すことを防ぎます。userはURLへ入れる前にパーセント符号化され、@?#を区切り文字と誤認せず、元の値をコネクターへ渡します。

DDL生成では、MERGE INTOの列キー、ステージの名前空間と名前、ファイル形式名を識別子処理へ通します。クラウドストレージURI、CREDENTIALSENCRYPTIONFILESの値には標準の文字列エスケープを適用します。CREATE STAGEもオブジェクトの文字列表現ではなく、各フィールドからSQLを構築します。

CopyIntoStorageCreateStageCreateFileFormatでは、ファイル形式の文字列値を埋め込む前にエスケープします。AWSBucketAzureContainerGCSBucketの表示では、AWSの秘密鍵・キーID・トークン、Azure SASトークン、マスターキーを***へ置き換えます。これはオブジェクト表示の秘匿であり、生成するSQLそのものは変えません。

エンジンログに認証情報を直接含める既存処理向けに、SnowflakeSecretRedactionFilteradd_secret_redaction_filter()redact_secrets()が任意機能として追加されました。Snowflakeは、SQLへ秘密情報を埋め込むよりSTORAGE_INTEGRATIONを使うことを推奨しています。秘匿フィルターを、秘密情報を渡し続ける理由にはできません。

性能面では、一つのテーブルだけをメタデータ取得する際にスキーマ全体を走査しなくなります。対象を絞ったInspector呼び出しの待ち時間とSnowflakeクレジット消費を減らす変更です。大規模スキーマで単一テーブルを頻繁に調べる移行・検査処理は、呼び出し回数と実行時間を更新前後で比較できます。

不具合修正は二件です。ClusterByOptionへ文字列またはTextClause以外を渡した場合、暗黙に文字列化して壊れたDDLを作るのではなく、コンパイル時にTypeErrorを出します。文字列やtext(...)だけを使うコードは影響を受けません。ビュー名に単一引用符やバックスラッシュがある場合にget_view_definitionが失敗・切り捨てする問題も、名前をSQLエスケープして修正されました。

対象になりそうなユーザー・チーム

Snowflake SQLAlchemyで接続を作るPython開発者、接続URLを環境変数・構成ファイルで管理する基盤担当、ステージ・ファイル形式・MERGEを生成するデータパイプライン、ログの秘密情報を監査するセキュリティ担当が対象です。

押さえておきたいポイント

  • リポジトリと設定から対象9パラメーターのURL指定を検索し、connect_argsへ移します。
  • 互換環境変数を使う場合は期限を付け、ログ・例外・監視画面へのURL露出を確認します。
  • 特殊文字を含む利用者名、ビュー名、ステージ名、ファイル名でSQL生成とメタデータ取得を試します。
  • オブジェクト表示のマスクと生成SQL、エンジンログの秘匿を別々に検証します。

実務へのつながり

検証環境で依存を1.11.0へ固定し、通常認証、秘密鍵、診断ログ、安全性関連設定の各接続をconnect_argsへ移します。接続失敗時の例外とログに秘密情報がないことを確認し、MERGECREATE STAGECOPY INTO、ビュー定義取得、クラスタリング指定を回帰試験します。問題があれば互換設定で時間を確保しつつ、URL指定へ戻したままにせず修正します。

結局、この更新をどう見るべきか

1.11.0は単なる依存更新ではなく、接続URL、SQL生成、ログでの秘密情報・利用者入力の境界を厳しくする版です。既存URLが拒否される互換性変更を先に洗い出し、秘匿・エスケープ・メタデータ取得を一緒に確認する必要があります。