Snowflake / リリースノート / 2026/07/08 / 重要
Snowflake SQLAlchemy 1.11.0、接続情報とSQL生成を安全化
公式リリースノート
Snowflake SQLAlchemy 1.11.0は、接続URLとSQL生成に含まれる機密情報・利用者入力の扱いを強化しました。9個の接続パラメーターをURL照会文字列から渡せなくし、create_engine()のconnect_argsへ移す必要があります。
要点
host、protocol、鍵・トークンファイル、キャッシュ・診断ログのパス、安全性を弱める設定など9項目がURL指定不可になりました。- アカウント・地域名のDNS安全文字検証、利用者名のパーセント符号化、DDLの識別子・文字列エスケープを強化しました。
- クラウド秘密情報の表示マスクと任意のログ秘匿フィルターを追加し、単一テーブルのメタデータ取得も高速化しました。
今回の更新で変わること
最も互換性へ影響する変更は、機密性の高い接続パラメーターをURLの照会文字列から渡せなくしたことです。対象はhost、protocol、token_file_path、private_key_file、ocsp_response_cache_filename、connection_diag_log_path、crl_cache_dir、unsafe_file_write、unsafe_skip_file_permissions_checkです。これらはcreate_engine()のconnect_argsへ渡します。すでに同方式を使うアプリは影響を受けません。
一時的な互換手段として、環境変数SNOWFLAKE_SQLALCHEMY_LEGACY_URL_PARAMS=1を設定すると以前の挙動へ戻せます。ただし恒久対応ではありません。URLはログ、例外、監視画面、構成管理へ残りやすいため、移行期限と所有者を決め、connect_argsへの変更後に互換設定を削除します。
接続URLの組み立ても安全化されます。accountとregionは英数字、ハイフン、ピリオド、アンダースコアだけを許す検証を通り、予期しない文字がURLの接続先部分を壊すことを防ぎます。userはURLへ入れる前にパーセント符号化され、@、?、#を区切り文字と誤認せず、元の値をコネクターへ渡します。
DDL生成では、MERGE INTOの列キー、ステージの名前空間と名前、ファイル形式名を識別子処理へ通します。クラウドストレージURI、CREDENTIALS、ENCRYPTION、FILESの値には標準の文字列エスケープを適用します。CREATE STAGEもオブジェクトの文字列表現ではなく、各フィールドからSQLを構築します。
CopyIntoStorage、CreateStage、CreateFileFormatでは、ファイル形式の文字列値を埋め込む前にエスケープします。AWSBucket、AzureContainer、GCSBucketの表示では、AWSの秘密鍵・キーID・トークン、Azure SASトークン、マスターキーを***へ置き換えます。これはオブジェクト表示の秘匿であり、生成するSQLそのものは変えません。
エンジンログに認証情報を直接含める既存処理向けに、SnowflakeSecretRedactionFilter、add_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へ移します。接続失敗時の例外とログに秘密情報がないことを確認し、MERGE、CREATE STAGE、COPY INTO、ビュー定義取得、クラスタリング指定を回帰試験します。問題があれば互換設定で時間を確保しつつ、URL指定へ戻したままにせず修正します。
結局、この更新をどう見るべきか
1.11.0は単なる依存更新ではなく、接続URL、SQL生成、ログでの秘密情報・利用者入力の境界を厳しくする版です。既存URLが拒否される互換性変更を先に洗い出し、秘匿・エスケープ・メタデータ取得を一緒に確認する必要があります。