CREATE USER (Transact-SQL)

現在のデータベースにユーザーを追加します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

CREATE USER user_name 
    [ { { FOR | FROM }
      { 
        LOGIN login_name 
        | CERTIFICATE cert_name 
        | ASYMMETRIC KEY asym_key_name
      } 
      | WITHOUT LOGIN
    ] 
    [ WITH DEFAULT_SCHEMA = schema_name ]

引数

  • user_name
    データベース内でユーザーを識別する名前を指定します。user_name のデータ型は sysname です。半角 128 文字まで指定できます。

  • LOGIN login_name
    作成されるデータベース ユーザーの SQL Server ログインを指定します。login_name は、サーバー内で有効なログインにする必要があります。この SQL Server ログインをデータベースに対して入力すると、データベースでは、作成されたデータベース ユーザーの名前と ID が取得されます。

  • CERTIFICATE cert_name
    作成されるデータベース ユーザーの証明書を指定します。

  • ASYMMETRIC KEY asym_key_name
    作成されるデータベース ユーザーの非対称キーを指定します。

  • WITH DEFAULT_SCHEMA **=**schema_name
    このデータベース ユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマを指定します。

  • WITHOUT LOGIN
    ユーザーを既存のログインにマップしません。

説明

FOR LOGIN を省略した場合、新しいデータベース ユーザーは同じユーザー名を持つ SQL Server ログインにマップされます。

DEFAULT_SCHEMA が定義されていない場合、データベース ユーザーには既定のスキーマ dbo が使用されます。DEFAULT_SCHEMA には、データベースに現在存在しないスキーマも設定できます。DEFAULT_SCHEMA は、このオプションが指すスキーマが作成されていなくても設定できます。DEFAULT_SCHEMA は、Windows グループ、証明書、または非対称キーにマップされるユーザーを作成する場合には指定できません。

重要な注意事項重要

ユーザーが固定サーバー ロール sysadmin のメンバーである場合、DEFAULT_SCHEMA の値は無視されます。固定サーバー ロール sysadmin のすべてのメンバーには、dbo の既定のスキーマが割り当てられます。

WITHOUT LOGIN 句でユーザーを作成する場合、ユーザーは SQL Server ログインにマップされず、他のデータベースには guest として接続できます。

SQL Server ログイン、証明書、非対称キーにマップされるユーザーの名前には、円記号 (\) を使用できません。

guest ユーザーは各データベース内に既に存在しているため、CREATE USER を使用して guest ユーザーを作成することはできません。guest ユーザーは、次のように CONNECT 権限を与えることで有効にできます。

GRANT CONNECT TO guest;
GO

データベース ユーザーに関する情報は、sys.database_principals カタログ ビューで確認できます。

注記注意

SQL Server 2005 からスキーマの動作が変更されました。その結果、スキーマがデータベース ユーザーと同じであると想定しているコードでは、正しい結果が返されない場合があります。CREATE SCHEMA、ALTER SCHEMA、DROP SCHEMA、CREATE USER、ALTER USER、DROP USER、CREATE ROLE、ALTER ROLE、DROP ROLE、CREATE APPROLE、ALTER APPROLE、DROP APPROLE、ALTER AUTHORIZATION のいずれかの DDL ステートメントが使用されたことのあるデータベースでは、sysobjects などの古いカタログ ビューを使用しないでください。そのようなデータベースでは、代わりに新しいカタログ ビューを使用してください。新しいカタログ ビューでは、SQL Server 2005 で導入されたプリンシパルとスキーマの分離が考慮されます。カタログ ビューの詳細については、「カタログ ビュー (Transact-SQL)」を参照してください。

権限

データベースに対する ALTER ANY USER 権限が必要です。

A. データベース ユーザーを作成する

次の例では、まず AbolrousHazem というサーバー ログインをパスワード付きで作成し、次に対応するデータベース ユーザー AbolrousHazem を AdventureWorks2008R2 に作成します。

CREATE LOGIN AbolrousHazem 
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2008R2;
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO 

B. 既定のスキーマでデータベース ユーザーを作成する

次の例では、まず WanidaBenshoof というサーバー ログインをパスワード付きで作成し、次に対応するデータベース ユーザー Wanida を既定のスキーマ Marketing で作成します。

CREATE LOGIN WanidaBenshoof 
    WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks2008R2;
CREATE USER Wanida FOR LOGIN WanidaBenshoof 
    WITH DEFAULT_SCHEMA = Marketing;
GO

C. 証明書からデータベース ユーザーを作成する

次の例では、証明書 CarnationProduction50 からデータベース ユーザー JinghaoLiu を作成します。

USE AdventureWorks2008R2;
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 AdventureWorks2008R2 ;
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