# 画面設計書 281-非セキュア接続設定

## 概要

本ドキュメントは、dbatools PowerShellモジュールにおける`Set-DbatoolsInsecureConnection`コマンドの機能仕様を定義する設計書です。このコマンドはSQL Server接続におけるセキュリティデフォルト設定を変更し、暗号化を無効化して全ての証明書を信頼する設定を行います。

### 本画面の処理概要

**業務上の目的・背景**：Microsoftは近年、SQL Serverクライアントライブラリの接続セキュリティデフォルトを変更し、暗号化を必須とし、証明書検証を要求するようになりました。この変更により、開発環境や自己署名証明書を使用するレガシー環境では、既存のdbatoolsスクリプトや接続が失敗する可能性があります。本コマンドは、これらの環境での接続問題を解決するため、セキュリティデフォルトを以前の動作に戻す機能を提供します。

**画面へのアクセス方法**：PowerShellコンソールまたはスクリプトから直接`Set-DbatoolsInsecureConnection`コマンドを実行します。Import-Module dbatoolsでモジュールを読み込んだ後、任意のタイミングで呼び出すことができます。

**主要な操作・処理内容**：
1. `sql.connection.trustcert`構成値を`true`に設定（全てのサーバー証明書を信頼）
2. `sql.connection.encrypt`構成値を`false`に設定（暗号化を無効化）
3. `-SessionOnly`パラメータ未指定時は設定を永続化（レジストリまたはファイルシステムに保存）
4. `-Scope`パラメータで永続化スコープを指定（ユーザーレベルまたはシステムレベル）

**画面遷移**：本コマンドはスタンドアロンの設定コマンドであり、他のコマンドからの遷移や他のコマンドへの遷移は発生しません。ただし、本コマンド実行後は`Connect-DbaInstance`などの接続コマンドの動作に影響を与えます。

**権限による表示制御**：`-Scope SystemDefault`を使用する場合は管理者権限が必要です。`-Scope UserDefault`（デフォルト）の場合は一般ユーザー権限で実行可能です。

## 関連機能

| 機能No | 機能名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 232 | Set-DbatoolsInsecureConnection | 主機能 | 非セキュア接続設定の適用 |
| 271 | Get-DbatoolsConfig | 補助機能 | 設定値の確認（設定適用後の検証に使用） |
| 90 | Connect-DbaInstance | 遷移先機能 | 設定適用後のSQL Server接続 |

## 画面種別

設定変更（Configuration）

## URL/ルーティング

PowerShellコマンド: `Set-DbatoolsInsecureConnection`
ドキュメントURL: https://dbatools.io/Set-DbatoolsInsecureConnection

## 入出力項目

| パラメータ名 | 必須 | 型 | デフォルト値 | 説明 |
|-------------|------|-----|-------------|------|
| SessionOnly | No | Switch | $false | 現在のPowerShellセッションのみに設定を適用（永続化しない） |
| Scope | No | ConfigScope | UserDefault | 永続化スコープ（UserDefault/SystemDefault） |
| Register | No | Switch | - | 非推奨パラメータ（将来削除予定） |

## 表示項目

本コマンドは出力を生成しません（None）。内部的に設定値を適用しますが、パイプラインには何も出力しません。

## イベント仕様

### 1-コマンド実行時

1. `Register`パラメータが指定された場合、非推奨警告メッセージを出力
2. `Set-DbatoolsConfig`を呼び出し、`sql.connection.trustcert`を`$true`に設定
3. `Set-DbatoolsConfig`を呼び出し、`sql.connection.encrypt`を`$false`に設定
4. `SessionOnly`が`$false`の場合:
   - `Register-DbatoolsConfig`を呼び出し、`sql.connection.trustcert`を永続化
   - `Register-DbatoolsConfig`を呼び出し、`sql.connection.encrypt`を永続化

## データベース更新仕様

### 操作別データベース影響一覧

本コマンドはデータベースを操作しません。dbatools内部構成システムのみを更新します。

| 操作（イベント） | 対象テーブル | 操作種別 | 概要 |
|----------------|-------------|---------|------|
| コマンド実行 | dbatools構成キャッシュ（メモリ） | UPDATE | sql.connection.trustcertとsql.connection.encryptの値を更新 |
| 永続化時 | レジストリまたはJSONファイル | INSERT/UPDATE | ユーザー/システムスコープに設定値を永続化 |

### テーブル別更新項目詳細

#### dbatools構成キャッシュ

| 操作 | 項目（キー名） | 更新値・取得条件 | 備考 |
|-----|-----------------|-----------------|------|
| UPDATE | sql.connection.trustcert | $true | サーバー証明書を信頼 |
| UPDATE | sql.connection.encrypt | $false | 暗号化を無効化 |

## メッセージ仕様

| 種別 | 条件 | メッセージ |
|------|------|-----------|
| Warning | -Registerパラメータ使用時 | "The Register parameter is deprecated and will be removed in a future release." |

## 例外処理

本コマンドは通常、例外をスローしません。内部で呼び出される`Set-DbatoolsConfig`や`Register-DbatoolsConfig`が失敗した場合、それぞれのコマンドのエラーハンドリングに従います。

## 備考

- 本コマンドはセキュリティを低下させる設定を適用するため、本番環境での使用は推奨されません
- 詳細情報: https://dbatools.io/newdefaults
- 関連ブログ: https://blog.netnerds.net/2023/03/new-defaults-for-sql-server-connections-encryption-trust-certificate/

---

## コードリーディングガイド

本画面を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

dbatools構成システムの設定値の構造を理解することが重要です。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | Set-DbatoolsInsecureConnection.ps1 | `public/Set-DbatoolsInsecureConnection.ps1` | パラメータ定義（52-55行目）とConfigScopeの型を確認 |

**読解のコツ**: `[Dataplat.Dbatools.Configuration.ConfigScope]`列挙型はdbatools内部クラスで、UserDefault/SystemDefaultなどの永続化スコープを定義しています。

#### Step 2: エントリーポイントを理解する

処理の起点となるprocess関数を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | Set-DbatoolsInsecureConnection.ps1 | `public/Set-DbatoolsInsecureConnection.ps1` | process関数（56-68行目）の処理フローを理解 |

**主要処理フロー**:
1. **57-59行目**: -Registerパラメータの非推奨警告出力
2. **61行目**: sql.connection.trustcertを$trueに設定
3. **62行目**: sql.connection.encryptを$falseに設定
4. **64-67行目**: -SessionOnlyでない場合、設定を永続化

#### Step 3: 内部依存コマンドを理解する

本コマンドが依存する内部コマンドの動作を確認します。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | Set-DbatoolsConfig | 内部コマンド | 構成値の設定方法 |
| 3-2 | Register-DbatoolsConfig.ps1 | `public/Register-DbatoolsConfig.ps1` | 設定の永続化処理 |

**主要処理フロー**:
- **Set-DbatoolsConfig**: メモリ上の構成キャッシュに値を設定
- **Register-DbatoolsConfig**: 設定をレジストリまたはファイルシステムに永続化

### プログラム呼び出し階層図

```
Set-DbatoolsInsecureConnection
    |
    |-- Write-Message (Warning: Register deprecated)
    |
    |-- Set-DbatoolsConfig -FullName sql.connection.trustcert -Value $true
    |       |
    |       +-- Dataplat.Dbatools.Configuration (内部構成システム)
    |
    |-- Set-DbatoolsConfig -FullName sql.connection.encrypt -Value $false
    |       |
    |       +-- Dataplat.Dbatools.Configuration (内部構成システム)
    |
    +-- (if not SessionOnly)
            |
            |-- Register-DbatoolsConfig -FullName sql.connection.trustcert
            |       |
            |       +-- レジストリ/JSONファイル永続化
            |
            +-- Register-DbatoolsConfig -FullName sql.connection.encrypt
                    |
                    +-- レジストリ/JSONファイル永続化
```

### データフロー図

```
[入力]                       [処理]                              [出力]

-SessionOnly ───────────────┐
                            |
-Scope ─────────────────────┼──▶ Set-DbatoolsInsecureConnection
                            |           |
-Register ──────────────────┘           |
                                        |
                        ┌───────────────┴───────────────┐
                        ▼                               ▼
            Set-DbatoolsConfig              (if not SessionOnly)
                   |                        Register-DbatoolsConfig
                   ▼                                   |
        [メモリ上の構成キャッシュ]                       ▼
        - sql.connection.trustcert = true   [永続化ストレージ]
        - sql.connection.encrypt = false    - レジストリ (Windows)
                                            - JSONファイル (Linux/macOS)
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| Set-DbatoolsInsecureConnection.ps1 | `public/Set-DbatoolsInsecureConnection.ps1` | ソース | メインコマンド実装（69行） |
| Register-DbatoolsConfig.ps1 | `public/Register-DbatoolsConfig.ps1` | ソース | 設定永続化コマンド |
| Set-DbatoolsConfig | 内部 | ソース | 構成値設定コマンド |
| Get-DbatoolsConfig.ps1 | `public/Get-DbatoolsConfig.ps1` | ソース | 設定確認用コマンド |
