エクスポート (0) 印刷
すべて展開

Azure SQL データベースのセキュリティのガイドラインと制限事項

更新日: 2014年2月

このトピックでは、Microsoft Microsoft Azure SQL データベースのセキュリティに関するガイドラインと制限事項について説明します。Azure SQL データベース のセキュリティを管理するときには、以下の点に注意してください。

Microsoft Azure SQL データベース サービスは、TCP ポート 1433 でのみ利用できます。コンピューターから Azure SQL データベース にアクセスするには、ファイアウォールで TCP ポート 1433 における TCP 通信の発信を許可する必要があります。

最初に Azure SQL データベース サーバーに接続する前に、Azure Platform Management Portal を使用して、Azure SQL データベース ファイアウォールを構成する必要があります。コンピューターまたは Azure から Azure SQL データベース サーバーへの接続の試行を有効にする、サーバーレベルのファイアウォールの設定を作成する必要があります。また、Azure SQL データベース サーバー内の特定のデータベースへのアクセスを制御する場合は、それぞれのデータベースに対するデータベースレベルのファイアウォール ルールを作成します。詳細については、「Azure SQL データベース ファイアウォール」を参照してください。

Microsoft Azure SQL データベース とアプリケーション間のすべての通信は、常に暗号化 (SSL) を必要とします。クライアント アプリケーションが接続時に証明書を検証しない場合、Microsoft Azure SQL データベース への接続は中間者攻撃を受けやすくなります。

アプリケーション コードやツールで証明書を検証するには、暗号化された接続を明示的に要求し、サーバー証明書は信頼しないようにします。アプリケーション コードやツールが、暗号化された接続を要求しない場合でも、暗号化された接続を受け付けることはできます。しかし、サーバー証明書は検証されず、中間者攻撃を受けやすくなります。

ADO.NET アプリケーション コードで証明書を検証するには、データベース接続文字列で Encrypt=True および TrustServerCertificate=False を設定します。詳細については、「方法: ADO.NET を使用して Azure SQL データベースに接続する」を参照してください。

SQL Server Management Studio も、証明書の検証をサポートしています。[サーバーへの接続] ダイアログ ボックスで、[接続プロパティ] タブの [暗号化接続] をクリックします。

noteメモ
SQL Server Management Studio は、Microsoft Azure SQL データベース より前のバージョンでは SQL Server 2008 R2をサポートしていません。

SQLCMD は Microsoft Azure SQL データベース 以降で SQL Server 2008をサポートしていますが、SQL Server 2008 R2 より前のバージョンでは証明書の検証をサポートしていません。SQL Server 2008 R2 以降の SQLCMD で証明書を検証するには、-N コマンド ライン オプションを使用し、-C オプションは使用しないでください。-N オプションを使用することで、SQLCMD は暗号化された接続を要求するようになります。-C オプションを使用しないことで、SQLCMD はサーバー証明書を暗黙的に信頼しなくなり、証明書の検証が強制されるようになります。

補足的な技術情報については、TechNet Wiki サイトにある Azure SQL データベースでの接続セキュリティに関する記事を参照してください。

Microsoft Azure SQL データベースでは、SQL Server 認証のみがサポートされます。Windows 認証 (統合セキュリティ) はサポートされません。ユーザーは、Microsoft Azure SQL データベースに接続するたびに資格情報 (ログインとパスワード) を提供する必要があります。SQL Server 認証の詳細については、SQL Server オンライン ブックで「認証モードの選択」を参照してください。

パフォーマンス上の理由により、パスワードが Microsoft Azure SQL データベースでリセットされると、接続プールが原因で接続がリセットされた場合でも、接続は再認証されません。これは、内部設置型の SQL Server とは異なる動作です。パスワードが変更されていると、要求は失敗し、セッションが切断 (終了) されます。新しいパスワードを使用して認証するには、KILL コマンドを使用してセッションを終了してから再接続します。KILL の詳細については、「KILL (Azure SQL データベース)」を参照してください。

Microsoft Azure SQL データベースでのログインとユーザーの管理には、制限があります。

  • サーバーレベル プリンシパル ログインには、次の制限が適用されます。

    • サーバーレベル プリンシパル ログインに対応する、master データベースのデータベース ユーザーは、変更または削除できません。

    • サーバーレベル プリンシパル ログインは、dbmanager データベースの 2 つのデータベース ロール loginmanager および master のメンバーではありませんが、この 2 つのロールに許可されているすべての権限を持っています。

noteメモ
このログインは、サーバーの準備中に作成され、SQL Server のインスタンスの sa ログインと似ています。サーバーの準備の詳細については、「Server Provisioning Model (SQL Data Services)」を参照してください。

すべてのログインに、次の制限が適用されます。

  • 既定の言語は US-English です。

  • master データベースにアクセスするには、各ログインは master データベースのユーザー アカウントにマップされている必要があります。

  • 接続文字列でデータベースを指定しない場合は、既定で master データベースに接続されます。

  • CREATE/ALTER/DROP LOGIN および CREATE/ALTER/DROP DATABASE ステートメントを実行する場合は、master データベースに接続する必要があります。

  • ADO.NET アプリケーションで CREATE/ALTER/DROP LOGIN および CREATE/ALTER/DROP DATABASE ステートメントを実行する場合、パラメーター化コマンドは使用できません。詳細については、「コマンドとパラメーター (ADO.NET)」を参照してください。

  • CREATE/ALTER/DROP DATABASE および CREATE/ALTER/DROP LOGIN ステートメントを実行する場合、これらの各ステートメントは、Transact-SQL バッチ内の唯一のステートメントである必要があります。そうでない場合、エラーが発生します。たとえば、以下の Transact-SQL は、データベースが存在するかどうかを確認します。存在する場合は、DROP DATABASE ステートメントが呼び出され、データベースが削除されます。DROP DATABASE ステートメントはバッチ内の唯一のステートメントではないので、これを実行すると Transact-SQL はエラーになります。

IF EXISTS (SELECT [name]
           FROM   [sys].[databases]
           WHERE  [name] = N'database_name')
     DROP DATABASE [database_name];
go
  • CREATE USER ステートメントを FOR/FROM LOGIN オプションと共に実行する場合、これが Transact-SQL バッチ内の唯一のステートメントである必要があります。

  • ALTER USER ステートメントを WITH LOGIN オプションと共に実行する場合、これが Transact-SQL バッチ内の唯一のステートメントである必要があります。

  • サーバーレベル プリンシパル ログインと、dbmanager データベースの master データベース ロールのメンバーにのみ、CREATE DATABASE および DROP DATABASE ステートメントを実行する権限があります。

  • サーバーレベル プリンシパル ログインと、loginmanager データベースの master データベース ロールのメンバーにのみ、CREATE LOGINALTER LOGIN、および DROP LOGIN ステートメントを実行する権限があります。

  • データベース ロールの所有者が、そのデータベース ロールに対して他のデータベース ユーザーの追加または削除を行おうとすると、"User or role 'Name' does not exist in this database" というエラーが発生する場合があります。このエラーは、所有者からはユーザーが見えないために発生します。この問題を解決するには、そのユーザーに対する VIEW DEFINITION 権限をロールの所有者に許可します。

Azure SQL データベース アプリケーションのセキュリティの脅威に対する脆弱性を低くするには、以下の点を考慮します。

  • 常に最新の更新プログラムを使用します。Azure SQL データベース に接続するときには、セキュリティの脆弱性を防ぐために、常に最新バージョンのツールとライブラリを使用します。どのツールとライブラリがサポートされているかの詳細については、「Azure SQL データベースの一般的なガイドラインと制限事項」を参照してください。

  • TCP ポート 1433 への着信接続をブロックします。Microsoft Azure SQL データベースと通信するアプリケーションで必要なのは、TCP ポート 1433 上の発信接続のみです。そのコンピューターの他のアプリケーションも着信通信を必要としない場合は、ファイアウォールが TCP ポート 1433 の着信接続のブロックを続けることを確認してください。

  • インジェクションに対する脆弱性を防ぎます。アプリケーションに SQL インジェクションに対する脆弱性がないようにするには、できる限りパラメーター化クエリを使用します。また、コードを徹底的に見直し、アプリケーションを配置する前に侵入テストを実行します。

関連項目

表示:
© 2014 Microsoft