包含データベース ユーザー - データベースの可搬性を確保するContained Database Users - Making Your Database Portable

適用対象: ○SQL Server ○Azure SQL Database ○Azure SQL Data Warehouse XParallel Data WarehouseAPPLIES TO: yesSQL Server yesAzure SQL Database yesAzure SQL Data Warehouse noParallel Data Warehouse

包含データベース ユーザーを使用して SQL ServerSQL ServerSQL DatabaseSQL Database のデータベース レベルでの接続が認証されます。Use contained database users to authenticate SQL ServerSQL Server and SQL DatabaseSQL Database connections at the database level. 包含データベースは、他のデータベース、およびデータベースをホストする SQL ServerSQL Server/ SQL DatabaseSQL Database (および master データベース) のインスタンスから分離されたデータベースです。A contained database is a database that is isolated from other databases and from the instance of SQL ServerSQL Server/ SQL DatabaseSQL Database (and the master database) that hosts the database. SQL ServerSQL Server では、Windows 認証と SQL ServerSQL Server 認証の両方で包含データベース ユーザーがサポートされます。supports contained database users for both Windows and SQL ServerSQL Server authentication. SQL DatabaseSQL Databaseを使用して、包含データベース ユーザーとデータベース レベルのファイアウォール規則を結合します。When using SQL DatabaseSQL Database, combine contained database users with database level firewall rules. このトピックでは、従来のログイン/ユーザー モデルおよび Windows またはサーバー レベルのファイアウォール規則と比較して、包含データベース モデルの相違点とこれを使用する利点について説明します。This topic reviews the differences and benefits of using the contained database model compared to traditional login/user model and Windows or server-level firewall rules. 特定のシナリオ、管理の容易性、アプリケーションのビジネス ロジックでは、従来のログイン / ユーザー モデルとサーバー レベルのファイアウォール規則を引き続き使用する必要があります。Specific scenarios, manageability or application business logic may still require use of traditional login/user model and server-level firewall rules.

注意

MicrosoftMicrosoftSQL DatabaseSQL Database サービスが向上し、SLA の保証が高度になると、包含データベース ユーザー モデルとデータベース用ファイアウォール規則に切り替え、特定のデータベースに対する SLA の可用性と最大ログイン レートをさらに高める必要があります。As MicrosoftMicrosoft evolves the SQL DatabaseSQL Database service and moves towards higher guaranteed SLAs you may be required to switch to the contained database user model and database-scoped firewall rules to attain the higher availability SLA and higher max login rates for a given database. MicrosoftMicrosoft は、今すぐこのような変化に対応することをお勧めします。encourage you to consider such changes today.

従来のログイン / ユーザー モデルTraditional Login and User Model

従来の接続モデルでは、Windows ユーザーまたは Windows グループのメンバーが データベース エンジンDatabase Engine に接続する際、Windows によって認証されているユーザーまたはグループの資格情報を指定します。In the traditional connection model, Windows users or members of Windows groups connect to the データベース エンジンDatabase Engine by providing user or group credentials authenticated by Windows. または、名前とパスワードの両方を指定でき、 SQL ServerSQL Server 認証を使用して接続します。Or you can provide both a name and password and connects by using SQL ServerSQL Server authentication. どちらの場合も、接続ユーザーの資格情報に対応するログインが master データベースに格納されている必要があります。In both cases, the master database must have a login that matches the connecting credentials. 通常、 データベース エンジンDatabase Engine で Windows 認証の資格情報が確認されるか、 SQL ServerSQL Server 認証の資格情報で本人性が確認されると、ユーザー データベースへの接続が試行されます。After the データベース エンジンDatabase Engine confirms the Windows authentication credentials or authenticates the SQL ServerSQL Server authentication credentials, the connection typically attempts to connect to a user database. ユーザー データベースに接続するには、そのデータベース内のユーザーに対してログインをマップ (関連付けることが) できなければなりません。To connect to a user database, the login must be able to be mapped to (that is, associated with) a database user in the user database. また、特定のデータベースへの接続を接続文字列で指定する方法もあります。この方法は、 SQL ServerSQL Server では任意ですが、 SQL DatabaseSQL Databaseでは必須です。The connection string may also specify connecting to a specific database which is optional in SQL ServerSQL Server but required in SQL DatabaseSQL Database.

重要なのは、(master データベース内の) ログインと (ユーザー データベース内の) ユーザーの両方が存在し、かつ相互に関連付けられていなければならない、ということです。The important principal is that both the login (in the master database) and the user (in the user database) must exist and be related to each other. これは、ユーザー データベースへの接続が、master データベース内のログインに依存していることを意味します。そのことが、データベースのホストを別の SQL ServerSQL ServerAzure SQL データベースAzure SQL Database サーバーに切り替えることを困難にしています。This means that the connection to the user database has a dependency upon the login in the master database, and this limits the ability of the database to be moved to a different hosting SQL ServerSQL Server or Azure SQL データベースAzure SQL Database server. また、なんらかの理由で、master データベースへの接続が利用できないと (フェールオーバーが進行中であるなど)、全体的な接続時間が増えたり、接続がタイムアウトしたりする可能性もあります。そのため、接続のスケーラビリティが低下します。And if, for any reason, a connection to the master database is not available (for example, a failover is in progress), the overall connection time will be increased or connection might time out. Consequently this may reduce connection scalability.

包含データベース ユーザー モデルContained Database User Model

包含データベース ユーザー モデルでは、ログインが master データベースには存在しません。In the contained database user model, the login in the master database is not present. 認証プロセスはユーザー データベースで実行されます。master データベースには、ユーザー データベース内のデータベース ユーザーに関連付けられたログインは存在しません。Instead, the authentication process occurs at the user database, and the database user in the user database does not have an associated login in the master database. 包含データベース ユーザー モデルは Windows 認証と SQL ServerSQL Server 認証の両方をサポートしており、 SQL ServerSQL ServerSQL DatabaseSQL Databaseの両方で使用できます。The contained database user model supports both Windows authentication and SQL ServerSQL Server authentication, and can be used in both SQL ServerSQL Server and SQL DatabaseSQL Database. 包含データベース ユーザーとして接続するには必ず、ユーザー データベースのパラメーターが接続文字列に含まれている必要があります。 データベース エンジンDatabase Engine はそれを基に、認証プロセスがどちらのデータベースで管理されるかを判別します。To connect as a contained database user, the connection string must always contain a parameter for the user database so that the データベース エンジンDatabase Engine knows which database is responsible for managing the authentication process. 包含データベース ユーザーのアクティビティは、そのユーザーを認証するデータベースに限定されます。そのため包含データベース ユーザーとして接続しているときは、そのユーザーが必要とする個々のデータベースに、ユーザー アカウントを別々に作成する必要があります。The activity of the contained database user is limited to the authenticating database, so when connecting as a contained database user, the database user account must be independently created in each database that the user will need. データベースを切り替えるには、 SQL DatabaseSQL Database ユーザー側で新しい接続を作成する必要があります。To change databases, SQL DatabaseSQL Database users must create a new connection. SQL ServerSQL Server 内の包含データベース ユーザーは、別のデータベースに同一ユーザーが存在する場合、データベースを切り替えることができます。Contained database users in SQL ServerSQL Server can change databases if an identical user is present in another database.

Azure: SQL データベースSQL DatabaseSQL データ ウェアハウスSQL Data Warehouse は、包含データベース ユーザーとしての Azure Active Directory ID をサポートします。Azure: SQL データベースSQL Database and SQL データ ウェアハウスSQL Data Warehouse support Azure Active Directory identities as contained database users. SQL DatabaseSQL Database では、 SQL ServerSQL Server 認証で包含データベース ユーザーがサポートされますが、 SQL データ ウェアハウスSQL Data Warehouse ではサポートされません。supports contained database users using SQL ServerSQL Server authentication, but SQL データ ウェアハウスSQL Data Warehouse does not. 詳細については、「 Azure Active Directory 認証を使用して SQL Database に接続する」を参照してください。For more information, see Connecting to SQL Database By Using Azure Active Directory Authentication. Azure Active Directory 認証を使用するとき、Active Directory ユニバーサル認証を使用し、SSMS から接続できます。When using Azure Active Directory authentication, connections from SSMS can be made using Active Directory Universal Authentication. 管理者は多要素認証を要求するようにユニバーサル認証を設定できます。多要素認証では、電話、テキスト メッセージ、PIN のあるスマート カード、モバイル アプリ通知を利用して ID を確認します。Administrators can configure Universal Authentication to require Multi-Factor Authentication, which verifies identity by using a phone call, text message, smart card with pin, or mobile app notification. 詳細については、「 SQL Database と SQL Data Warehouse での Azure AD MFA のための SSMS のサポート」をご覧ください。For more information, see SSMS support for Azure AD MFA with SQL Database and SQL Data Warehouse.

SQL DatabaseSQL DatabaseSQL データ ウェアハウスSQL Data Warehouseに関しては、接続文字列にはデータベース名が常に必要となるため、従来のモデルから包含データベース ユーザー モデルに切り替える際、接続文字列に対する変更は不要です。For SQL DatabaseSQL Database and SQL データ ウェアハウスSQL Data Warehouse, since the database name is always required in the connection string, no changes are required to the connection string when switching from the traditional model to the contained database user model. SQL ServerSQL Server 接続の場合は、データベースの名前を接続文字列に追加する必要があります (既に存在する場合は不要)。For SQL ServerSQL Server connections, the name of the database must be added to the connection string, if it is not already present.

重要

従来型のモデルを使用した場合、サーバー レベルのロールとサーバー レベルの権限ですべてのデータベースに対するアクセスを制限できます。When using the traditional model, the server level roles and server level permissions can limit access to all databases. 包含データベース モデルを使用した場合、データベース所有者と ALTER ANY USER 権限を持ったデータベース ユーザーとがデータベースに対するアクセス権を付与できます。When using the contained database model, database owners and database users with the ALTER ANY USER permission can grant access to the database. これにより高い権限を与えられたサーバー ログインのアクセス制御範囲は狭められ、高い権限を与えられたデータベース ユーザーのアクセス制御範囲は拡大します。This reduces the access control of high privileged server logins and expands the access control to include high privileged database users.

ファイアウォールFirewalls

SQL ServerSQL Server

Windows ファイアウォール ルールはすべての接続に適用され、ログイン (従来のモデルの接続) と包含データベース ユーザーに同じ影響を及ぼします。Windows firewall rules apply to all connections and have the same effects on logins (traditional model connections) and contained database users. Windows ファイアウォールの詳細については、「 データベース エンジン アクセスを有効にするための Windows ファイアウォールを構成する」を参照してください。For more information about the Windows firewall, see Configure a Windows Firewall for Database Engine Access.

SQL DatabaseSQL Database ファイアウォールFirewalls

SQL DatabaseSQL Database では、サーバー レベルの接続 (ログイン) 用とデータベース レベルの接続 (包含データベース ユーザー) 用にファイアウォール規則を切り離すことができます。allows separate firewall rules for server level connections (logins) and for database level connections (contained database users). ユーザー データベースに接続すると、最初にデータベースのファイアウォール規則がチェックされます。When connecting to a user database, first database firewall rules are checked. データベースへのアクセスを許可する規則が存在しない場合は、サーバー レベルのファイアウォール規則がチェックされます。これには、SQL Database サーバーのマスター データベースへのアクセスが必要です。If there is no rule that allows access to the database, the server level firewall rules are checked, which requires access to the SQL Database server master database. データベース レベルのファイアウォール規則と包含データベース ユーザーを組み合わせることで、接続中にサーバーのマスター データベースにアクセスする必要がなくなり、接続のスケーラビリティが向上します。Database level firewall rules combined with contained database users can eliminate necessity to access master database of the server during connection providing improved connection scalability.

SQL DatabaseSQL Database のファイアウォール規則の詳細については、次のトピックを参照してください。For more information about SQL DatabaseSQL Database firewall rules, see the following topics:

構文上の違いSyntax Differences

従来のモデルTraditional model 包含データベース ユーザー モデルContained database user model
master データベースに接続する場合:When connected to the master database:

CREATE LOGIN login_name WITH PASSWORD = 'strong_password';

次にユーザー データベースに接続する場合:Then when connected to a user database:

CREATE USER 'user_name' FOR LOGIN 'login_name';
ユーザー データベースにする場合:When connected to a user database:

CREATE USER user_name WITH PASSWORD = 'strong_password';
従来のモデルTraditional model 包含データベース ユーザー モデルContained database user model
master データベースのコンテキストでパスワードを変更するには:To change password, in context of master DB:

ALTER LOGIN login_name WITH PASSWORD = 'strong_password';
ユーザー データベースのコンテキストでパスワードを変更するには:To change password, in context of user DB:

ALTER USER user_name WITH PASSWORD = 'strong_password';

RemarksRemarks

  • SQL ServerSQL Serverでは、 SQL ServerSQL Serverのインスタンスに対して包含データベース ユーザーを有効にする必要があります。In SQL ServerSQL Server, contained database users must be enabled for the instance of SQL ServerSQL Server. 詳細については、「 contained database authentication Server Configuration Option」を参照してください。For more information, see contained database authentication Server Configuration Option.
  • 包含データベース ユーザーとログインの名前が重複しない場合は、アプリケーションで共存させることができます。Contained database users and logins with non-overlapping names can co-exist in your applications.
  • name1 という名前のログインが master データベースに存在し、なおかつ name1という名前の包含データベース ユーザーを作成した場合、接続文字列でデータベース名を指定すると、そのデータベースに接続するときのログイン コンテキストよりも、データベース ユーザーのコンテキストが優先されます。If there is a login in master database with the name name1 and you create a contained database user named name1, when a database name is provided in the connection string, the context of the database user will be picked over login context when connecting to the database. つまり、包含データベース ユーザーは、同じ名前のログインに優先します。That is, contained database user will take precedence over logins with the same name.
  • SQL DatabaseSQL Database では、包含データベース ユーザーの名前を、サーバーの管理者アカウントと同じ名前にすることはできません。In SQL DatabaseSQL Database the name of contained database user cannot be the same as the name of the server admin account.
  • SQL DatabaseSQL Database サーバーの管理者アカウントは、包含データベース ユーザーにできません。The SQL DatabaseSQL Database server admin account can never be a contained database user. サーバー管理者は、包含データベース ユーザーを作成し、管理するための十分な権限を持っています。The server admin has sufficient permissions to create and manage contained database users. サーバー管理者は、ユーザー データベースの包含データベース ユーザーに権限を付与できます。The server admin can grant permissions to contained database users on user databases.
  • 包含データベース ユーザーはデータベース レベル プリンシパルであるため、使用するすべてのデータベースで包含データベース ユーザーを作成する必要があります。Since contained database users are database level principals, you need to create contained database users in every database that you would use them. ID はデータベースに限定され、同じサーバー内の別のデータベースで同じ名前とパスワードを持つユーザーとは完全に独立しています。The identity is confined to the database and is independent in all aspects from a user with same name and same password in another database in the same server.
  • 通常のログインで使用するパスワードと同じ強度のパスワードを使用します。Use the same strength passwords that you would normally use for logins.

参照See Also

包含データベース Contained Databases
包含データベースでのセキュリティのベスト プラクティス Security Best Practices with Contained Databases
CREATE USER (Transact-SQL) CREATE USER (Transact-SQL)
Azure Active Directory 認証を使用して SQL Database に接続するConnecting to SQL Database By Using Azure Active Directory Authentication