次の方法で共有


チュートリアル:Azure SQL Database 内のデータベースをセキュリティで保護する

適用対象: Azure SQL データベース

このチュートリアルで学習する内容は次のとおりです。

  • サーバーレベルとデータベースレベルのファイアウォール規則を作成する
  • Microsoft Entra 管理者を構成する
  • SQL 認証、Microsoft Entra 認証、セキュリティで保護された接続文字列を使用して、ユーザー アクセスを管理する
  • Microsoft Defender for SQL、監査、データ マスキング、暗号化などのセキュリティ機能を有効にする

Note

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

Azure SQL Database は、次のようにしてデータをセキュリティで保護します。

  • ファイアウォール規則を使用したアクセス制限
  • ID の入力を求める認証メカニズムの使用
  • ロールベースのメンバーシップとアクセス許可による認可の使用
  • セキュリティ機能の有効化

Note

Azure SQL Managed Instance は、Azure SQL Database Managed Instance接続アーキテクチャに関するページに記載されているように、ネットワーク セキュリティ規則とプライベート エンドポイントを使用してセキュリティで保護されます。

詳細については、Azure SQL Database のセキュリティの概要機能に関する記事を参照してください。

ヒント

この無料の Learn モジュールでは、Azure SQL Database でデータベースをセキュリティで保護する方法がわかります。

前提条件

このチュートリアルを完了するには、前提条件として次のものが必要です。

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

Azure portal にサインインする

このチュートリアルのすべての手順は、Azure portal にサインインして行います

ファイアウォール規則を作成する

SQL Database とデータベースは、Azure 内のファイアウォールによって保護されます。 既定では、サーバーとデータベースに対する接続がすべて拒否されます。 詳細については、サーバーレベルとデータベースレベルのファイアウォール規則に関するページを参照してください。

最も安全な構成は、 [Azure サービスへのアクセスを許可][オフ] にしておくことです。 次に、Azure VM やクラウド サービスなど、接続する必要があるリソース用に予約済み IP (クラシック デプロイ) を作成し、その IP アドレスだけにファイアウォール経由のアクセスを許可します。 Resource Manager デプロイ モデルを使用している場合は、リソースごとに専用のパブリック IP アドレスが必要です。

注意

SQL Database の通信は、ポート 1433 上で行われます。 企業ネットワーク内から接続しようとしても、ポート 1433 での送信トラフィックがネットワークのファイアウォールで禁止されている場合があります。 その場合、管理者によってポート 1433 が開放されない限り、サーバーに接続することはできません。

サーバーレベルのファイアウォール規則を設定する

サーバーレベルの IP ファイアウォール規則は、同じサーバー内のすべてのデータベースに適用されます。

サーバーレベルのファイアウォール規則を設定する手順は次のとおりです。

  1. Azure portal で、左側のメニューから [SQL データベース] を選択し、 [SQL データベース] ページで目的のデータベースをクリックします。

    論理 SQL Database 用の Azure portal ページのスクリーンショット。サーバー名が強調表示されています。

    Note

    チュートリアルの後の手順で使用するために、完全修飾サーバー名 (yourserver.database.windows.net など) をコピーしておいてください。

  2. [設定] で、 [ネットワーク] を選択します。 [パブリック アクセス] タブを選択し、[パブリック ネットワーク アクセス][選択したネットワーク] を選択して、[ファイアウォール規則] セクションを表示します。

    論理 SQL Server 用の Azure portal の [ネットワーク] ページのスクリーンショット。サーバー レベルの IP ファイアウォール規則が表示されています。

  3. ツール バーの [クライアント IP の追加] を選び、現在の IP アドレスを新しい IP ファイアウォール規則に追加します。 IP ファイアウォール規則は、単一の IP アドレスまたは IP アドレスの範囲に対して、ポート 1433 を開くことができます。

  4. [OK] を選択してファイアウォールの設定を保存します。

これで、指定した IP アドレスまたは IP アドレスの範囲を使用して、サーバー内の任意のデータベースに接続できるようになりました。

データベースのファイアウォール規則の設定

データベースレベルのファイアウォール規則は、個々のデータベースのみに適用されます。 サーバーのフェールオーバーの間、これらの規則はデータベースに保持されます。 データベースレベルのファイアウォール規則は、サーバーレベルのファイアウォール規則を構成した後にのみ、Transact-SQL (T-SQL) ステートメントを使用して構成することができます。

データベースレベルのファイアウォール規則を設定するには:

  1. SQL Server Management Studio などを使用して、データベースに接続します。

  2. オブジェクト エクスプローラーでデータベースを右クリックし、 [新しいクエリ] を選択します。

  3. クエリ ウィンドウで次のステートメントを追加し、その IP アドレスをお使いのパブリック IP アドレスに変更します。

    EXECUTE sp_set_database_firewall_rule N'Example DB Rule','0.0.0.4','0.0.0.4';
    
  4. ツール バー上で [実行] を選択して、ファイアウォール規則を作成します。

Note

sp_set_firewall_rule コマンドを使用して、SSMS でサーバーレベルのファイアウォール規則を作成することもできます。ただし、master データベースに接続する必要があります。

Microsoft Entra 管理者を作成する

適切な Microsoft Entra ID (旧称 Azure Active Directory) マネージド ドメインを使用していることを確認します。 ドメインを選択するには、Azure portal の右上隅を使用します。 このプロセスでは、Microsoft Entra ID とデータベースまたはデータ ウェアハウスをホストする論理サーバーの両方に同じサブスクリプションが使用されていることを確認します。

ディレクトリを選択する [ディレクトリ + サブスクリプション] フィルター ページが表示されている Azure portal のスクリーンショット。

Microsoft Entra 管理者を設定するには:

  1. Azure portal の SQL server ページで、リソース メニューから [Microsoft Entra ID] を選択し、[管理者の設定] を選択して [Microsoft Entra ID] ウィンドウを開きます。

    論理サーバーの Azure portal Microsoft Entra ID ページのスクリーンショット。

    重要

    このタスクを実行するには、"グローバル管理者" である必要があります。

  2. [Microsoft Entra ID] ペインで、Microsoft Entra ユーザーまたはグループを検索して選択し、[選択] を選択します。 Microsoft Entra 組織のすべてのメンバーとグループが一覧表示され、グレーアウトしたエントリは Microsoft Entra 管理者としてサポートされていません

    Azure portal の Microsoft Entra ID 管理者の追加ページのスクリーンショット。

    重要

    Azure ロールベースのアクセス制御 (Azure RBAC) はポータルにのみ適用され、SQL Server には反映されません。

  3. [Microsoft Entra 管理者] ページの上部にある [保存] を選択します。

    管理者を変更する処理には数分かかる場合があります。 新しい管理者が [Microsoft Entra 管理者] フィールドに表示されます。

Note

Microsoft Entra 管理者を設定する場合、新しい管理者名 (ユーザーまたはグループ) がログインまたはユーザーとして "master" データベースに存在できません。 存在していると、セットアップが失敗して変更がロールバックされ、その管理者名が既に存在していることが示されます。 サーバー ログインまたはユーザーは Microsoft Entra ID の一部ではないため、Microsoft Entra 認証を使用してこのユーザーに接続しようとしても失敗します。

Microsoft Entra ID の構成については、次を参照してください。

データベース アクセスを管理する

データベースにユーザーを追加するか、セキュリティで保護された接続文字列でのユーザー アクセスを許可することにより、データベース アクセスを管理します。 接続文字列は、外部アプリケーションの場合に便利です。 詳細については、ログインとユーザー アカウントの管理Microsoft Entra 認証に関するページを参照してください。

ユーザーを追加するには、データベース認証の種類を選択します。

  • SQL 認証: ログインにユーザー名とパスワードを使用します。サーバー内の特定のデータベースのコンテキストでのみ有効です。

  • Microsoft Entra 認証: Microsoft Entra ID によって管理される ID を使用します。

SQL 認証

SQL 認証を使用するユーザーを追加する手順は次のとおりです。

  1. SQL Server Management Studio などを使用して、データベースに接続します。

  2. オブジェクト エクスプローラーでデータベースを右クリックし、 [新しいクエリ] を選択します。

  3. クエリ ウィンドウで、次のコマンドを入力します。

    CREATE USER ApplicationUser WITH PASSWORD = 'YourStrongPassword1';
    
  4. ツール バーの [実行] を選択して、ユーザーを作成します。

  5. 既定では、ユーザーはデータベースに接続できますが、データを読み取ったり書き込んだりするアクセス許可は付与されていません。 これらのアクセス許可を付与するには、新しいクエリ ウィンドウで次のコマンドを実行します。

    ALTER ROLE db_datareader ADD MEMBER ApplicationUser;
    ALTER ROLE db_datawriter ADD MEMBER ApplicationUser;
    

Note

新規ユーザーの作成などの管理者タスクを実行する必要がない場合は、データベース レベルで非管理者アカウントを作成します。

Microsoft Entra 認証

Azure SQL Database は Microsoft Entra サーバー プリンシパル (ログイン) をサポートしていないため、Microsoft Entra アカウントで作成されたデータベース ユーザーは包含データベース ユーザーとして作成されます。 包含データベース ユーザーは、同じ名前の master ログインが存在する場合でも、 データベース内のログインに関連付けられません。 AMicrosoft Entra ID は、個々のユーザーまたはグループに対応しています。 詳細については、「包含データベース ユーザー - データベースの可搬性を確保する」と、Microsoft Entra を使用して認証する方法に関する 「Microsoft Entra チュートリアル」を参照してください。

Note

Azure portal を使用してデータベース ユーザー (管理者を除く) を作成することはできません。 Microsoft Entra ロールは、SQL server、データベース、データ ウェアハウスには反映されません。 これらは Azure リソースの管理のみに使用され、データベースのアクセス許可には適用されません。

たとえば、"SQL Server 共同作成者" ロールでは、データベースやデータ ウェアハウスに接続するためのアクセス権は付与されません。 このアクセス許可は、T-SQL ステートメントを使用して、データベース内で付与する必要があります。

重要

コロン : やアンパサンド & などの特殊文字は、T-SQL の CREATE LOGIN ステートメントと CREATE USER ステートメントのユーザー名ではサポートされていません。

Microsoft Entra 認証を使用してユーザーを追加するには:

  1. 少なくとも ALTER ANY USER アクセス許可を持つ Microsoft Entra アカウントを使用して、Azure のサーバーに接続します。

  2. オブジェクト エクスプローラーでデータベースを右クリックし、 [新しいクエリ] を選択します。

  3. クエリ ウィンドウで、次のコマンドを入力し、<Azure_AD_principal_name> を Microsoft Entra ユーザーのプリンシパル名または Microsoft Entra グループの表示名に変更します。

    CREATE USER [<Azure_AD_principal_name>] FROM EXTERNAL PROVIDER;
    

Note

Microsoft Entra ユーザーは、データベース メタデータ内でグループのタイプ E (EXTERNAL_USER) およびタイプ X (EXTERNAL_GROUPS) としてマークされます。 詳細については、「sys.database_principals」を参照してください。

セキュリティで保護された接続文字列

クライアント アプリケーションと SQL データベースの間に暗号化された安全な接続を確立するには、接続文字列を次のように構成する必要があります。

  • 暗号化接続を要求する
  • サーバー証明書を信頼しない

トランスポート層セキュリティ (TLS) を使用して接続が確立され、中間者攻撃のリスクが軽減されます。 接続文字列はデータベースごとに利用可能で、ADO.NET、JDBC、ODBC、PHP などのクライアント ドライバーをサポートするように事前構成されます。 TLS と接続の詳細については、TLS に関する考慮事項に関するセクションを参照してください。

セキュリティで保護された接続文字列をコピーする手順は次のとおりです。

  1. Azure portal で、左側のメニューから [SQL データベース] を選択し、 [SQL データベース] ページで目的のデータベースをクリックします。

  2. [概要] ページで、 [データベース接続文字列の表示] を選択します。

  3. [ドライバー] タブを選択し、完全な接続文字列をコピーします。

    接続文字列のページが表示されている Azure portal のスクリーンショット。[ADO.NET] タブが選択され、ADO.NET (SQL 認証) 接続文字列が表示されています。

セキュリティ機能の有効化

Azure SQL Database は、Azure portal を使用してアクセスされるセキュリティ機能を提供します。 これらの機能は、データベースとサーバーの両方で利用可能です。ただし、データ マスクは例外で、データベースのみで利用可能です。 詳細については、Microsoft Defender for SQL監査動的データ マスクキング透過的なデータ暗号化に関するページを参照してください。

Microsoft Defender for SQL

Microsoft Defender for SQL 機能は、潜在的な脅威の発生を検出し、異常なアクティビティがあればセキュリティ アラートを送信します。 ユーザーは、監査機能を使用して、こうした疑わしいイベントを調査し、そのイベントがデータベース内のデータへのアクセス、侵害、悪用かどうかを判断できます。 また、脆弱性評価を含めたセキュリティ概要や、データの検出と分類ツールも提供されます。

Note

脅威の一例として SQL インジェクションがあります。これは、攻撃者がアプリケーションの入力に悪意のある SQL を挿入するプロセスです。 これにより、アプリケーションが知らないうちに悪意のある SQL を実行し、攻撃者がデータベース内のデータにアクセスして侵害や変更を行えるようになります。

Microsoft Defender for SQL を有効にする手順は次のとおりです。

  1. Azure portal で、左側のメニューから [SQL データベース] を選択し、 [SQL データベース] ページで目的のデータベースをクリックします。

  2. [概要] ページで、 [サーバー名] リンクを選択します。 サーバーのページが開きます。

  3. [SQL サーバー] ページで [セキュリティ] セクションを探し、 [Defender for Cloud] を選択します。

    1. この機能を有効にするには、 [Microsoft Defender for SQL][オン] を選択します。 脆弱性評価の結果を保存するためのストレージ アカウントを選択します。 次に、 [保存] を選択します。

      Azure portal のナビゲーション ウィンドウにある脅威検出設定のスクリーンショット。

      電子メールを構成して、セキュリティのアラート、ストレージの詳細、脅威検出の種類を受信することもできます。

  4. 目的のデータベースの [SQL データベース] ページに戻り、 [セキュリティ] セクションの [Defender for Cloud] を選択します。 ここには、データベースのさまざまなセキュリティ インジケーターがあります。

    Azure portal の [脅威の状態] ページのスクリーンショット。データ検出と分類、脆弱性評価、脅威検出の円グラフが表示されています。

異常なアクティビティが検出されると、そのイベントの情報が電子メールで届きます。 これには、アクティビティの性質、データベース、サーバー、イベントの発生時点、考えられる原因、推奨アクションが含まれていて、潜在的な脅威を調査してその影響を軽減することができます。 このような電子メールを受信したら、 [Azure SQL Auditing Log](Azure SQL 監査ログ) リンクを選択して Azure portal を起動し、そのイベントの時点に関連する監査レコードを確認します。

Sql インジェクション脅威の検出の可能性を示す、Azure からのサンプル メールのスクリーンショット。メール本文にある Azure SQL DB 監査ログへのリンクが強調表示されています。

監査

監査機能は、データベース イベントを追跡し、Azure Storage の監査ログ、Azure Monitor ログ、またはイベント ハブのいずれかにイベントを書き込みます。 監査により、規制に対するコンプライアンスの維持、データベース アクティビティの把握、セキュリティ侵害の可能性がある差異や異常に対する分析が容易になります。

監査を有効にする手順は次のとおりです。

  1. Azure portal で、左側のメニューから [SQL データベース] を選択し、 [SQL データベース] ページで目的のデータベースをクリックします。

  2. [セキュリティ] セクションで、 [監査] を選択します。

  3. [監査] の設定で、次の値を設定します。

    1. [監査][オン] に設定します。

    2. [監査ログの保存先] として、次のいずれかを選択します。

      • [ストレージ] : イベント ログが保存され、 .xel ファイルとしてダウンロードできる Azure ストレージ アカウント。

        ヒント

        監査レポートのテンプレートを最大限活用するには、すべての監査済みデータベースに同じストレージ アカウントを使用してください。

      • [Log Analytics] : クエリや詳細な分析のために、イベントが自動的に保存されます。

        Note

        分析、カスタムのアラート ルール、Excel や Power BI のエクスポートなどの高度な機能をサポートするには、Log Analytics ワークスペースが必要です。 ワークスペースがない場合は、クエリ エディターのみを使用できます。

      • [イベント ハブ] : イベントをルーティングして、他のアプリケーションで使用できるようにします。

    3. [保存] を選択します。

      Azure portal の監査の設定のページのスクリーンショット。[保存] ボタンが強調表示されています。監査ログの宛先フィールドが強調表示されています。

  4. これで、 [監査ログの表示] を選択してデータベース イベントのデータを表示できるようになりました。

    SQL Database の監査レコードを示す Azure portal のページのスクリーンショット。

重要

PowerShell や REST API を使用して監査イベントをさらにカスタマイズする方法については、SQL Database の監査に関するページを参照してください。

動的データ マスク

データ マスク機能は、データベース内の機密データを自動的に隠します。

データ マスクを有効にする手順は次のとおりです。

  1. Azure portal で、左側のメニューから [SQL データベース] を選択し、 [SQL データベース] ページで目的のデータベースをクリックします。

  2. [セキュリティ] セクションで、 [動的データ マスク] を選択します。

  3. [動的データ マスク] の設定で、 [マスクの追加] を選択してマスクの規則を追加します。 使用可能なデータベース スキーマ、テーブル、選択元の列は自動的に設定されます。

    [保存] または動的データ マスクの追加のフィールドが表示されている Azure portal のページのスクリーンショット。マスクが推奨されるフィールドに、スキーマ、テーブル、テーブルの列が表示されています。

  4. [保存] を選択します。 これで、選択した情報はプライバシー保護のためマスクされます。

    簡潔に INSERT および SELECT ステートメントが表示されている SQL Server Management Studio (SSMS) のスクリーンショット。SELECT ステートメントの、LastName 列にマスクされたデータが表示されています。

透過的なデータ暗号化

暗号化機能では、保存データが自動的に暗号化されます。暗号化されたデータベースにアクセスするアプリケーションの変更は必要ありません。 新しいデータベースの場合、暗号化は既定で有効になっています。 SSMS と Always Encrypted 機能を使用してデータを暗号化することもできます。

暗号化を有効化または確認する手順は次のとおりです。

  1. Azure portal で、左側のメニューから [SQL データベース] を選択し、 [SQL データベース] ページで目的のデータベースをクリックします。

  2. [セキュリティ] セクションで、 [透過的なデータ暗号化] を選択します。

  3. 必要に応じて、 [データの暗号化][オン] に設定します。 [保存] を選択します。

    Transparent Data Encryption を有効にする Azure portal のページのスクリーンショット。

Note

暗号化の状態を確認するには、SSMS を使用してデータベースに接続し、sys.dm_database_encryption_keys ビューの encryption_state 列にクエリを実行します。 状態 3 は、データベースが暗号化されていることを示します。

Note

テーブル名、オブジェクト名、インデックス名など、カスタマー コンテンツと見なされる一部の項目は、Microsoft によるサポートとトラブルシューティングのためにログ ファイルで送信される場合があります。

ヒント

.NET アプリケーションの開発を開始する準備はできましたか? この無料の Learn モジュールでは、単純なデータベースの作成など、Azure SQL Database に対してクエリを行う ASP.NET アプリケーションを開発および構成する方法を学習できます。

次のステップ

次のチュートリアルに進み、地理的分散の実装方法を学習してください。