CREATE USER (Transact-SQL)
現在のデータベースにユーザーを追加します。 ユーザーには、次の 11 種類があります。
master 内のログインに基づくユーザー : これは、最も一般的な種類のユーザーです。
Windows ユーザーに基づくログインに基づくユーザー。
Windows グループに基づくログインに基づくユーザー。
SQL Server 認証を使用したログインに基づくユーザー。
データベースで認証されるユーザー : 包含データベースでのみ許可されます。
ログインのない Windows ユーザーに基づくユーザー。
ログインのない Windows グループに基づくユーザー。
パスワードを持つ包含データベース ユーザー。
Windows グループ ログインを介して接続する Windows プリンシパルに基づくユーザー
ログインのない Windows ユーザーに基づくユーザーでありながら、Windows グループのメンバーシップを介してデータベース エンジンに接続できるユーザー。
ログインのない Windows グループに基づくユーザーでありながら、別の Windows グループのメンバーシップを介してデータベース エンジンに接続できるユーザー。
認証できないユーザー : これらのユーザーは、SQL Server にログインできません。
ログインのないユーザー。 ログインできませんが、権限の付与対象となります。
証明書に基づくユーザー。 ログインできませんが、権限の付与対象となり、モジュールに署名できます。
非対称キーに基づくユーザー。 ログインできませんが、権限の付与対象となり、モジュールに署名できます。
構文
Users based on logins in master
CREATE USER user_name
[
{ FOR | FROM } LOGIN login_name
]
[ WITH DEFAULT_SCHEMA = schema_name ]
[ ; ]
Users that authenticate at the database
CREATE USER
{
windows_principal [ WITH <options_list> [ ,... ] ]
| user_name WITH PASSWORD = 'password' [ , <options_list> [ ,... ]
}
[ ; ]
Users based on Windows principals that connect through Windows group logins
CREATE USER
{
windows_principal [ { FOR | FROM } LOGIN windows_principal ]
| user_name { FOR | FROM } LOGIN windows_principal
}
[ WITH DEFAULT_SCHEMA = schema_name ]
[ ; ]
Users that cannot authenticate
CREATE USER user_name
{
WITHOUT LOGIN [ WITH DEFAULT_SCHEMA = schema_name ]
| { FOR | FROM } CERTIFICATE cert_name
| { FOR | FROM } ASYMMETRIC KEY asym_key_name
}
[ ; ]
<options_list> ::=
DEFAULT_SCHEMA = schema_name
| DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
| SID = sid
引数
user_name
データベース内でユーザーを識別する名前を指定します。 user_name のデータ型は sysname です。 半角 128 文字まで指定できます。 Windows プリンシパルに基づいてユーザーを作成する場合、別のユーザー名を指定しないと、Windows プリンシパル名がユーザー名になります。LOGIN login_name
作成するデータベース ユーザーのログインを指定します。 login_name は、サーバー内で有効なログインにする必要があります。 Windows プリンシパルに基づくログイン (ユーザーまたはグループ) か、または SQL Server 認証を使用したログインを指定できます。 この SQL Server ログインをデータベースに対して入力すると、データベースでは、作成されるデータベース ユーザーの名前と ID が取得されます。 Windows プリンシパルからマップされたログインを作成する場合は、[<domainName>\<loginName>] という形式を使用します。 例については、「構文の概要」を参照してください。WITH DEFAULT_SCHEMA = schema_name
このデータベース ユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマを指定します。windows_principal'
データベース ユーザーを作成する Windows プリンシパルを指定します。 windows_principal には、Windows ユーザーまたは Windows グループを指定できます。 windows_principal がログインを持たない場合でも、ユーザーは作成されます。 SQL Server に接続するときに、windows_principal がログインを持たない場合、ログインを持つ Windows グループのメンバーシップを介してデータベース エンジンで Windows プリンシパルを認証するか、または接続文字列で包含データベースを初期カタログとして指定する必要があります。 Windows プリンシパルからユーザーを作成する場合は、[<domainName>\<loginName>] という形式を使用します。 例については、「構文の概要」を参照してください。WITH PASSWORD = 'password'
包含データベースでのみ使用できます。 作成するユーザーのパスワードを指定します。WITHOUT LOGIN
ユーザーを既存のログインにマップしません。CERTIFICATE cert_name
作成するデータベース ユーザーの証明書を指定します。ASYMMETRIC KEY asym_key_name
作成するデータベース ユーザーの非対称キーを指定します。DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
新しいユーザーの既定の言語を指定します。 ユーザーに対して既定の言語を指定した場合、データベースの既定の言語を後で変更しても、ユーザーの既定の言語は指定した言語のままになります。 既定の言語を指定しない場合、データベースの既定の言語がユーザーの既定の言語として使用されます。 ユーザーに対して既定の言語を指定しない場合、データベースの既定の言語を後で変更すると、ユーザーの既定の言語はデータベースの新しい既定の言語に変更されます。重要 DEFAULT_LANGUAGE は、包含データベース ユーザーに対してのみ使用します。
SID = sid
包含データベースにパスワード (SQL Server 認証) を持つユーザーに対してのみ適用されます。 新しいデータベース ユーザーの SID を指定します。 このオプションを選択しない場合は、SQL Server によって SID が自動的に割り当てられます。 複数のデータベースで同じ ID (SID) を持つユーザーを作成するには SID パラメーターを使用します。 これは、AlwaysOn フェールオーバーの準備のために複数のデータベースでユーザーを作成する場合に便利です。 ユーザーの SID を確認するには、sys.database_principals に対してクエリを実行します。
説明
FOR LOGIN を省略した場合、新しいデータベース ユーザーは同じユーザー名を持つ SQL Server ログインにマップされます。
既定のスキーマは、このデータベース ユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマになります。 特に指定しない限り、このデータベース ユーザーによって作成されたオブジェクトの所有者になるのは、既定のスキーマです。
ユーザーに既定のスキーマが設定されている場合は、その既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが所属しているグループに既定のスキーマが指定されている場合は、グループの既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが複数のグループに所属している場合、ユーザーの既定のスキーマは、最も小さい principle_id と明示的に設定された既定のスキーマを持つ Windows グループのスキーマになります。 利用可能な既定のスキーマのいずれかを、使用するスキーマとして明示的に選択することはできません。ユーザーに対する既定のスキーマを決定できない場合は、dbo スキーマが使用されます。
DEFAULT_SCHEMA は、このオプションが指すスキーマが作成されていなくても設定できます。
DEFAULT_SCHEMA は、証明書または非対称キーにマップされるユーザーを作成する場合には指定できません。
ユーザーが固定サーバー ロール sysadmin のメンバーである場合、DEFAULT_SCHEMA の値は無視されます。 固定サーバー ロール sysadmin のすべてのメンバーには、dbo の既定のスキーマが割り当てられます。
WITHOUT LOGIN 句でユーザーを作成する場合、ユーザーは SQL Server ログインにマップされず、 他のデータベースには guest として接続できます。 ログインのないこのユーザーには権限を割り当てることができます。セキュリティ コンテキストがログインのないユーザーに変更されると、元のユーザーはログインのないユーザーの権限を受け取ります。 例については、「D. ログインのないユーザーを作成して使用する」を参照してください。
Windows プリンシパルに割り当てられているユーザーにのみ、円記号 (\) を含めることができます。
guest ユーザーは各データベース内に既に存在しているため、CREATE USER を使用して guest ユーザーを作成することはできません。 guest ユーザーは、次のように CONNECT 権限を与えることで有効にできます。
GRANT CONNECT TO guest;
GO
データベース ユーザーに関する情報は、sys.database_principals カタログ ビューで確認できます。
構文の概要
master 内のログインに基づくユーザー
ログインに基づくユーザーに関して使用できる構文を次に示します。 既定のスキーマ オプションは除外しています。
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsGroupManagers]
CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]
CREATE USER SQLAUTHLOGIN
CREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGIN
CREATE USER SQLAUTHLOGIN FROM LOGIN SQLAUTHLOGIN
データベースで認証されるユーザー
包含データベースでのみ使用できるユーザーに関して使用できる構文を次に示します。 作成されるユーザーは、master データベース内のどのログインにも関連付けられません。 既定のスキーマおよび言語オプションは除外しています。
セキュリティに関する注意 |
---|
この構文では、データベースへのアクセス許可とデータベース エンジンへの新しいアクセス許可がユーザーに与えられます。 |
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsGroupManagers]
CREATE USER Barry WITH PASSWORD = 'sdjklalie8rew8337!$d'
master 内のログインのない Windows プリンシパルに基づくユーザー
Windows グループを介してデータベース エンジンにアクセスできる一方で master 内にログインを持たないユーザーに関して使用できる構文を次に示します。 この構文は、あらゆる種類のデータベースで使用できます。 既定のスキーマおよび言語オプションは除外しています。
この構文は master 内のログインに基づくユーザーの構文と似ていますが、このカテゴリのユーザーは master 内にログインを持ちません。 ユーザーは、Windows グループ ログインを介してデータベース エンジンにアクセスする許可が与えられている必要があります。
この構文は Windows プリンシパルに基づく包含データベース ユーザーの構文に似ていますが、このカテゴリのユーザーにはデータベース エンジンへの新しいアクセス許可は与えられません。
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsGroupManagers]
CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]
認証できないユーザー
SQL Server にログインできないユーザーに関して使用できる構文を次に示します。
CREATE USER RIGHTSHOLDER WITHOUT LOGIN
CREATE USER CERTUSER FOR CERTIFICATE SpecialCert
CREATE USER CERTUSER FROM CERTIFICATE SpecialCert
CREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKey
CREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey
セキュリティ
ユーザーを作成するとデータベースへのアクセス許可が与えられますが、データベース内のオブジェクトに対するアクセス許可は自動的には与えられません。 ユーザーを作成した後の一般的な操作として、データベース オブジェクトに対する権限を持つデータベース ロールにユーザーを追加するか、またはオブジェクト権限をユーザーに付与します。
包含データベースに関する注意事項
包含データベースに接続するときに、ユーザーが master データベース内にログインを持たない場合、接続文字列に包含データベース名を初期カタログとして含める必要があります。 初期カタログ パラメーターは、パスワードを持つ包含データベース ユーザーに対して常に必要になります。
包含データベースでは、ユーザーを作成することにより、データベースとデータベース エンジンのインスタンスとを分離して、データベースを SQL Server の別のインスタンスに簡単に移動できるようになります。 詳細については、「包含データベース」を参照してください。 SQL Server 認証ログインに基づくデータベース ユーザーを、パスワードを持つ包含データベース ユーザーに変更する方法については、「sp_migrate_user_to_contained (Transact-SQL)」を参照してください。
包含データベースでは、ユーザーは master データベース内にログインを持つ必要はありません。 データベース エンジン 管理者は、包含データベースに対するアクセス許可を データベース エンジン レベルではなくデータベース レベルで付与できることを理解する必要があります。 詳細については、「包含データベースでのセキュリティのベスト プラクティス」を参照してください。
権限
データベースに対する ALTER ANY USER 権限が必要です。
使用例
A. SQL Server ログインに基づくデータベース ユーザーを作成する
次の例では、最初に AbolrousHazem という SQL Server ログインを作成し、次に対応するデータベース ユーザー AbolrousHazem を AdventureWorks2012 に作成します。
CREATE LOGIN AbolrousHazem
WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2012;
GO
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO
B. 既定のスキーマでデータベース ユーザーを作成する
次の例では、まず WanidaBenshoof というサーバー ログインをパスワード付きで作成し、次に対応するデータベース ユーザー Wanida を既定のスキーマ Marketing で作成します。
CREATE LOGIN WanidaBenshoof
WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks2012;
CREATE USER Wanida FOR LOGIN WanidaBenshoof
WITH DEFAULT_SCHEMA = Marketing;
GO
C. 証明書からデータベース ユーザーを作成する
次の例では、証明書 CarnationProduction50 からデータベース ユーザー JinghaoLiu を作成します。
USE AdventureWorks2012;
CREATE CERTIFICATE CarnationProduction50
WITH SUBJECT = 'Carnation Production Facility Supervisors',
EXPIRY_DATE = '11/11/2011';
GO
CREATE USER JinghaoLiu FOR CERTIFICATE CarnationProduction50;
GO
D. ログインのないユーザーを作成して使用する
次の例では、SQL Server ログインにマップされないデータベース ユーザー CustomApp を作成します。 その後、ユーザー adventure-works\tengiz0 に、CustomApp ユーザーの権限を借用する権限を許可します。
USE AdventureWorks2012 ;
CREATE USER CustomApp WITHOUT LOGIN ;
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\tengiz0] ;
GO
ユーザー adventure-works\tengiz0 が CustomApp の資格情報を使用するには、次のステートメントを実行します。
EXECUTE AS USER = 'CustomApp' ;
GO
adventure-works\tengiz0 の資格情報に戻すには、次のステートメントを実行します。
REVERT ;
GO
E. パスワードを持つ包含データベース ユーザーを作成する
次の例では、パスワードを持つ包含データベース ユーザーを作成します。 この例は、包含データベースでのみ実行できます。
USE AdventureWorks2012 ;
GO
CREATE USER Carlo
WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*'
, DEFAULT_LANGUAGE=[Brazilian]
, DEFAULT_SCHEMA=[dbo]
GO
F. ドメイン ログインのための包含データベース ユーザーを作成する
次の例では、Contoso という名前のドメインの Fritz という名前のログインに対する包含データベース ユーザーを作成します。 この例は、包含データベースでのみ実行できます。
USE AdventureWorks2012 ;
GO
CREATE USER [Contoso\Fritz] ;
GO
G. 特定の SID を持つ包含データベース ユーザーを作成する
次の例では、CarmenW という名前の、SQL Server 認証を使用する包含データベース ユーザーを作成します。 この例は、包含データベースでのみ実行できます。
USE AdventureWorks2012 ;
GO
CREATE USER CarmenW WITH PASSWORD = 'a8ea v*(Rd##+'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;
関連項目
参照
sys.database_principals (Transact-SQL)