次の方法で共有


包含データベース ユーザー - データベースを移植可能にする

包含データベース ユーザーを使用して、データベース レベルで SQL Server と SQL Database の接続を認証します。 包含データベースは、他のデータベース、およびデータベースをホストする SQL Server/SQL Database (およびマスター データベース) のインスタンスから分離されたデータベースです。 SQL Server では、Windows 認証と SQL Server 認証の両方で包含データベース ユーザーがサポートされています。 SQL Database を使用する場合は、包含データベース ユーザーとデータベース レベルのファイアウォール規則を組み合わせます。 このトピックでは、従来のログイン/ユーザー モデルや Windows またはサーバー レベルのファイアウォール規則と比較して、包含データベース モデルを使用する場合の違いと利点について説明します。 特定のシナリオ、管理容易性、またはアプリケーション ビジネス ロジックでは、従来のログイン/ユーザー モデルとサーバー レベルのファイアウォール規則の使用が必要になる場合があります。

Microsoft が SQL Database サービスを進化させ、より高い保証された SLA に移行するにつれて、特定のデータベースに対する高可用性 SLA とより高い最大ログイン レートを実現するために、包含データベース ユーザー モデルとデータベース スコープのファイアウォール規則に切り替える必要がある場合があります。 Microsoft では、このような変更を今すぐ検討することをお勧めします。

従来のログインとユーザー モデル

従来の接続モデルでは、Windows ユーザーまたは Windows グループのメンバーは、Windows によって認証されたユーザーまたはグループの資格情報を提供することで、データベース エンジンに接続します。 または、接続は名前とパスワードの両方を提供し、SQL Server 認証を使用して接続します (これは、SQL Database に接続するときに唯一のオプションです)。 どちらの場合も、マスター データベースには接続資格情報と一致するログインが必要です。 データベース エンジンが Windows 認証資格情報を確認するか、SQL Server 認証資格情報を認証すると、通常、接続はユーザー データベースへの接続を試みます。 ユーザー データベースに接続するには、ログインをユーザー データベース内のデータベース ユーザーにマップ (つまり、関連付けられている) できる必要があります。 接続文字列では、SQL Server では省略可能ですが、SQL Database では必要な特定のデータベースへの接続を指定することもできます。

重要なプリンシパルは、ログイン (master データベース内) とユーザー (ユーザー データベース内) の両方が存在し、相互に関連付けられている必要があることです。 つまり、ユーザー データベースへの接続はマスター データベース内のログインに依存するため、データベースを別のホスティング SQL Server または Azure SQL Database サーバーに移動する機能が制限されます。 また、何らかの理由でマスター データベースへの接続が利用できない場合 (フェールオーバーが進行中など)、全体的な接続時間が長くなり、接続がタイムアウトする可能性があります。その結果、接続のスケーラビリティが低下する可能性があります。

コンテインド データベース ユーザー モデル

包含データベース ユーザー モデルでは、master データベースのログインは存在しません。 認証プロセスはユーザー データベースで実行されます。master データベースには、ユーザー データベース内のデータベース ユーザーに関連付けられたログインは存在しません。 包含データベース ユーザー モデルでは、Windows 認証 (SQL Server) と SQL Server 認証 (SQL Server と SQL Database の両方) の両方がサポートされます。 包含データベース ユーザーとして接続するには、データベース エンジンが認証プロセスの管理を担当するデータベースを認識できるように、接続文字列にユーザー データベースのパラメーターを常に含める必要があります。 包含データベース ユーザーのアクティビティは認証データベースに限定されるため、包含データベース ユーザーとして接続する場合は、ユーザーが必要とする各データベースにデータベース ユーザー アカウントを個別に作成する必要があります。 データベースを変更するには、SQL Database ユーザーが新しい接続を作成する必要があります。 SQL Server の包含データベース ユーザーは、同じユーザーが別のデータベースに存在する場合、データベースを変更できます。

SQL Database の場合、従来のモデルから包含データベース ユーザー モデルに切り替えるときに、接続文字列を変更する必要はありません。 SQL Server 接続の場合、データベースの名前がまだ存在しない場合は、接続文字列に追加する必要があります。

重要

従来のモデルを使用する場合、サーバー レベルのロールとサーバー レベルのアクセス許可によって、すべてのデータベースへのアクセスを制限できます。 包含データベース モデルを使用する場合、ALTER ANY USER 権限を持つデータベース所有者とデータベース ユーザーは、データベースへのアクセス権を付与できます。 これにより、高い特権を持つサーバー ログインのアクセス制御が減り、高い特権を持つデータベース ユーザーを含むようにアクセス制御が拡張されます。

ファイアウォール

SQL Server

Windows ファイアウォール規則はすべての接続に適用され、ログイン (従来のモデル接続) と包含データベース ユーザーに同じ影響を与えます。 Windows ファイアウォールの詳細については、「 データベース エンジン アクセス用の Windows ファイアウォールの構成」を参照してください。

SQL Database ファイアウォール

SQL Database では、サーバー レベルの接続 (ログイン) とデータベース レベルの接続 (包含データベース ユーザー) に対して個別のファイアウォール規則を使用できます。 ユーザー データベースに接続する場合は、最初にデータベース ファイアウォール規則がチェックされます。 データベースへのアクセスを許可する規則がない場合は、サーバー レベルのファイアウォール規則がチェックされ、論理サーバー マスター データベースへのアクセスが必要になります。 データベース レベルのファイアウォール規則と包含データベース ユーザーを組み合わせることで、接続中にサーバーのマスター データベースにアクセスする必要がなくなり、接続のスケーラビリティが向上します。

SQL Database ファイアウォール規則の詳細については、次のトピックを参照してください。

構文の違い

従来のモデル 包含データベース ユーザー モデル
master データベースに接続されている場合:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

次に、ユーザー データベースに接続する場合:

CREATE USER 'user_name' FOR LOGIN 'login_name';
ユーザー データベースに接続されている場合:

CREATE USER user_name WITH PASSWORD = 'strong_password';
従来のモデル 包含データベース ユーザー モデル
マスター DB のコンテキストでパスワードを変更するには:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
ユーザー DB のコンテキストでパスワードを変更するには:

ALTER USER user_name WITH PASSWORD = 'strong_password';

注釈

  • SQL Server では、SQL Server のインスタンスに対して包含データベース ユーザーを有効にする必要があります。 詳細については、「 包含データベース認証サーバー構成オプション」を参照してください。

  • 名前が重複しない包含データベース ユーザーとログインは、アプリケーションに共存できます。

  • name1 という名前のログインがマスター データベースに存在し、name1 という名前の包含データベース ユーザーを作成した場合、接続文字列でデータベース名が指定されると、データベースへの接続時に、データベース ユーザーのコンテキストがログイン コンテキストで選択されます。 つまり、包含データベース ユーザーは、同じ名前のログインよりも優先されます。

  • SQL Database では、包含データベース ユーザーの名前をサーバー管理者アカウントの名前と同じにすることはできません。

  • SQL Database サーバー管理者アカウントを包含データベース ユーザーにすることはできません。 サーバー管理者には、包含データベース ユーザーを作成および管理するための十分なアクセス許可があります。 サーバー管理者は、ユーザー データベースの包含データベース ユーザーにアクセス許可を付与できます。

  • 包含データベース ユーザーはデータベース レベルのプリンシパルであるため、使用するすべてのデータベースに包含データベース ユーザーを作成する必要があります。 ID はデータベースに限定され、同じサーバー内の別のデータベースで同じ名前と同じパスワードを持つユーザーからのすべての側面で独立しています。

  • ログインに通常使用するのと同じ強度のパスワードを使用します。

こちらもご覧ください

包含データベース
包含データベースでのセキュリティのベスト プラクティス
ユーザーを作成 (Transact-SQL)