次の方法で共有


CREATE USER (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric SQL Database

現在のデータベースにユーザーを追加します。 13 種類のユーザーが、最も基本的な構文のサンプルと共に一覧表示されます。

Note

Microsoft Entra ID はAzure Active Directory (Azure AD) の新しい名前ですが、既存の環境の中断を防ぐために、UI フィールド、接続プロバイダー、エラー コード、コマンドレットなど、ハードコーディングされた一部の要素でAzure AD が残ります。 この記事では、2 つの名前は交換可能です。

ログインに基づくユーザー master

  • Windows Active Directory アカウントに基づくログインに基づくユーザー。 CREATE USER [Contoso\Fritz];

  • Windows グループに基づくログインに基づくユーザー。 CREATE USER [Contoso\Sales];

  • SQL Server 認証を使用したログインに基づくユーザー。 CREATE USER Mary;

  • Microsoft Entra ログインに基づくユーザー。 CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]

    Note

    Microsoft Entra サーバー プリンシパル (ログイン) は、現在、Azure SQL Database のパブリック プレビュー段階にあります。

    Note

    ログイン、つまりログインに基づくユーザーは、Microsoft Fabric の SQL データベースではサポートされていません。

データベースで認証されるユーザー - データベースの移植性を高めるために推奨されます。
SQL Database で常に許可されます。 SQL Server の包含データベースでのみ許可されます。

  • ログインのない Windows ユーザーに基づくユーザー。 CREATE USER [Contoso\Fritz];

  • ログインのない Windows グループに基づくユーザー。 CREATE USER [Contoso\Sales];

  • Microsoft Entra ユーザーに基づく SQL Database または Azure Synapse Analytics のユーザー。 CREATE USER [Fritz@contoso.com] FROM EXTERNAL PROVIDER;

  • パスワードを持つ包含データベース ユーザー。 (Azure Synapse Analytics では使用できません。) CREATE USER Mary WITH PASSWORD = '********';

Windows グループ ログインを介して接続する Windows プリンシパルに基づくユーザー

  • ログインのない Windows ユーザーに基づくユーザーでありながら、Windows グループのメンバーシップを介してデータベース エンジンに接続できるユーザー。 CREATE USER [Contoso\Fritz];

  • ログインのない Windows グループに基づくユーザーでありながら、別の Windows グループのメンバーシップを介してデータベース エンジンに接続できるユーザー。 CREATE USER [Contoso\Fritz];

認証できないユーザー - これらのユーザーは SQL Server または SQL Database にログインできません。

  • ログインのないユーザー。 ログインできませんが、アクセス許可を付与できます。 CREATE USER CustomApp WITHOUT LOGIN;
  • 証明書に基づくユーザー。 ログインできませんが、アクセス許可を付与でき、モジュールに署名できます。 CREATE USER TestProcess FOR CERTIFICATE CarnationProduction50;
  • 非対称キーに基づくユーザー。 ログインできませんが、アクセス許可を付与でき、モジュールに署名できます。 CREATE User TestProcess FROM ASYMMETRIC KEY PacificSales09;

Transact-SQL 構文表記規則

構文

SQL Server、Azure SQL Database、Azure SQL Managed Instance の構文

-- Syntax Users based on logins in master  
CREATE USER user_name   
    [   
        { FOR | FROM } LOGIN login_name   
    ]  
    [ WITH <limited_options_list> [ ,... ] ]   
[ ; ]  
  
-- Users that authenticate at the database  
CREATE USER   
    {  
      windows_principal [ WITH <options_list> [ ,... ] ]  
  
    | user_name WITH PASSWORD = 'password' [ , <options_list> [ ,... ]   
    | Microsoft_Entra_principal FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid'] 
    }  
  
 [ ; ]  
  
-- 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 <limited_options_list> [ ,... ] ]   
[ ; ]  
  
-- Users that cannot authenticate   
CREATE USER user_name   
    {  
         WITHOUT LOGIN [ WITH <limited_options_list> [ ,... ] ]  
       | { 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   
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]  
  
<limited_options_list> ::=  
      DEFAULT_SCHEMA = schema_name ]   
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]  
  
-- SQL Database syntax when connected to a federation member  
CREATE USER user_name  
[;]

-- Syntax for users based on Microsoft Entra logins for Azure SQL Managed Instance
CREATE USER user_name   
    [   { FOR | FROM } LOGIN login_name  ]  
    | FROM EXTERNAL PROVIDER
    [ WITH <limited_options_list> [ ,... ] ]   
[ ; ]  


<limited_options_list> ::=  
      DEFAULT_SCHEMA = schema_name 
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }   
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ] 

Azure Synapse Analytics の構文

CREATE USER user_name   
    [ { { FOR | FROM } { LOGIN login_name }   
      | WITHOUT LOGIN  
    ]   
    [ WITH DEFAULT_SCHEMA = schema_name ]  
[;]

CREATE USER Microsoft_Entra_principal FROM EXTERNAL PROVIDER  
    [ WITH DEFAULT_SCHEMA = schema_name ]  
[;]

Microsoft Fabric の SQL データベースの構文

CREATE USER   
    {  
    Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH <limited_options_list> [ ,... ] ]    
    | Microsoft_Entra_principal WITH <options_list> [ ,... ] 
    }  
 [ ; ]  
  
-- 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   
    }  
 [ ; ]  
  
<limited_options_list> ::=  
      DEFAULT_SCHEMA = schema_name  
    | OBJECT_ID = 'objectid'

<options_list> ::=  
      DEFAULT_SCHEMA = schema_name  
    | SID = sid  
    | TYPE = { X | E }

並列データ ウェアハウスの構文

CREATE USER user_name   
    [ { { FOR | FROM }  
      {   
        LOGIN login_name   
      }   
      | WITHOUT LOGIN  
    ]   
    [ WITH DEFAULT_SCHEMA = schema_name ]  
[;]  

引数

user_name

データベース内でユーザーを識別する名前を指定します。 user_name は、sysname です。 半角 128 文字まで指定できます。 Windows プリンシパルに基づいてユーザーを作成する場合、別のユーザー名を指定しないと、Windows プリンシパル名がユーザー名になります。

LOGIN login_name

作成するデータベース ユーザーのログインを指定します。 login_name は、サーバーで有効なログインである必要があります。 Windows プリンシパル (ユーザーまたはグループ) に基づくログイン、SQL Server 認証を使用したログイン、または Microsoft Entra プリンシパル (ユーザー、グループ、またはアプリケーション) を使用したログインを指定できます。 この SQL Server ログインをデータベースに対して入力すると、データベースでは、作成されるデータベース ユーザーの名前と ID が取得されます。 Windows プリンシパルからマップされたログインを作成する場合は、[<domainName>\<loginName>] という形式を使用します。 例については、「構文の概要」を参照してください。

CREATE USER ステートメントが SQL のバッチ内の唯一のステートメントである場合、Azure SQL Database では WITH LOGIN 句がサポートされます。 CREATE USER ステートメントが SQL のバッチ内の唯一のステートメントではない場合、または動的 SQL 内で実行される場合、WITH LOGIN 句はサポートされません。

WITH DEFAULT_SCHEMA = schema_name

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

'windows_principal'

データベース ユーザーを作成する Windows プリンシパルを指定します。 windows_principal には、Windows ユーザーまたは Windows グループを指定できます。 windows_principal がログインを持たない場合でも、ユーザーは作成されます。 SQL Server に接続するときに、windows_principal がログインを持たない場合、ログインを持つ Windows グループのメンバーシップを介してデータベース エンジンで Windows プリンシパルを認証するか、または接続文字列で、包含データベースを初期カタログとして指定する必要があります。 Windows プリンシパルからユーザーを作成する場合は、[<domainName>\<loginName>] という形式を使用します。 例については、「構文の概要」を参照してください。 Active Directory ユーザーに基づくユーザーは、21 文字未満の名前に制限されます。

'Microsoft_Entra_principal'

適用対象: Microsoft Fabric の SQL Database、SQL Managed Instance、Azure Synapse Analytics、SQL データベース

データベース ユーザーが作成される Microsoft Entra プリンシパルを指定します。 Microsoft_Entra_principalには、Microsoft Entra ユーザー、Microsoft Entra グループ、または Microsoft Entra アプリケーションを指定できます。 (Microsoft Entra ユーザーは SQL Database に Windows 認証ログインを持つ必要はありません。データベース ユーザーのみ)。接続文字列は、包含データベースを初期カタログとして指定する必要があります。

Microsoft Entra プリンシパルの場合、CREATE USER 構文には次のものが必要です。

  • Microsoft Entra ユーザー用の Microsoft Entra オブジェクトの UserPrincipalName。

    • CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;
    • CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;
  • Microsoft Entra サーバー プリンシパル (ログイン) では、仮想 master データベースの Microsoft Entra ログインにマップされるユーザーの作成が導入されています。 たとえば、CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]; のように指定します。

  • 2048 を超える Microsoft Entra セキュリティ グループのメンバーである Microsoft Entra ユーザーとサービス プリンシパル (アプリケーション) は、Azure SQL Database、Azure SQL Managed Instance、または Azure Synapse のデータベースへのログインはサポートされていません。

  • Microsoft Entra グループおよび Microsoft Entra アプリケーションの Microsoft Entra オブジェクトの DisplayName。 "看護師" セキュリティ グループがあった場合は、次を使用します。

    • CREATE USER [Nurses] FROM EXTERNAL PROVIDER;

詳細については、「Microsoft Entra 認証を使用した SQL Database への接続」を参照してください。

WITH PASSWORD = 'password'

適用対象: SQL Server 2012 (11.x) 以降、SQL Database。

包含データベースでのみ使用できます。 作成するユーザーのパスワードを指定します。 SQL Server 2012 (11.x) 以降では、保存されたパスワード情報は salt 化パスワードの SHA-512 を使用して計算されます。

WITHOUT LOGIN

ユーザーを既存のログインにマップしてはいけないことを指定します。

CERTIFICATE cert_name

適用対象: SQL Server 2008 (10.0.x) 以降、SQL Database、Microsoft Fabric の SQL データベース

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

ASYMMETRIC KEY asym_key_name

適用対象: SQL Server 2008 (10.0.x) 以降、SQL Database、Microsoft Fabric の SQL データベース

作成するデータベース ユーザーの非対称キーを指定します。

DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language salias> }

適用対象: SQL Server 2012 (11.x) 以降、SQL Database

新しいユーザーの既定の言語を指定します。 ユーザーに対して既定の言語を指定した場合、データベースの既定の言語を後で変更しても、ユーザーの既定の言語は指定した言語のままになります。 既定の言語を指定しない場合、データベースの既定の言語がユーザーの既定の言語として使用されます。 ユーザーに対して既定の言語を指定しない場合、データベースの既定の言語を後で変更すると、ユーザーの既定の言語はデータベースの新しい既定の言語に変更されます。

重要

DEFAULT_LANGUAGE は包含データベース ユーザーにのみ使用します。

SID = sid

適用対象: SQL Server 2012 (11.x) 以降、および Microsoft Fabric の SQL データベース。

SQL Server 2012 (11.x) 以降では、包含データベース内のパスワード (SQL Server 認証) を持つユーザーにのみ適用されます。 新しいデータベース ユーザーの SID を指定します。 このオプションを選択しない場合は、SQL Server によって SID が自動的に割り当てられます。 複数のデータベースで同じ ID (SID) を持つユーザーを作成するには SID パラメーターを使用します。 これは、Always On フェールオーバーの準備のために、複数のデータベースにユーザーを作成する場合に役立ちます。 ユーザーの SID を特定するには、sys.database_principals でクエリを実行します。

Microsoft Fabric の SQL データベースでは、 sid は、指定された Microsoft Entra プリンシパルの有効な ID である必要があります。 プリンシパルがユーザーまたはグループの場合、ID はユーザー/グループの Microsoft Entra オブジェクト ID である必要があります。 Microsoft Entra プリンシパルがサービス プリンシパル (アプリケーションまたはマネージド ID) の場合、ID はアプリケーション ID (またはクライアント ID) である必要があります。 指定する ID は、 binary(16) 値である必要があります。 データベース エンジンは、Microsoft Entra で指定された ID を検証しません。 SIDの議論は、TYPEと一緒に使用する必要があります。

TYPE = [ E |X ]

適用対象: Microsoft Fabric の SQL データベース。

Microsoft Entra プリンシパルの種類を指定します。 E は、プリンシパルがユーザーまたはサービス プリンシパル (アプリケーションまたはマネージド ID) であることを示します。 X は、プリンシパルがグループであることを示します。

ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ]

適用対象: SQL Server 2016 (13.x) 以降、SQL Database。

一括コピー操作でのサーバーの暗号化メタデータ チェックを抑制します。 これによりユーザーは、データを暗号化解除することなく、テーブルまたはデータベース間で暗号化データを一括コピーできます。 既定値は OFF です。

警告

このオプションを不適切に使用すると、データが破損する場合があります。 詳細については、「Always Encrypted で保護された機微なデータの移行」を参照してください。

FROM EXTERNAL PROVIDER

適用対象: Microsoft Fabric の SQL Database、Azure SQL Managed Instance、SQL データベース

プリンシパルが Microsoft Entra 認証用であることを指定します。 SQL Server は、Microsoft Entra で指定されたプリンシパル名を自動的に検証します。

CREATE USERステートメントを発行するプリンシパルが Microsoft Entra ユーザー プリンシパルである場合、プリンシパル (またはプリンシパルのグループ) は Microsoft Entra の Directory Readers ロールに含まれている必要があります。

SQL Database と Azure SQL Managed Instance で、 CREATE USER ステートメントを発行するプリンシパルがサービス プリンシパルである場合、データベース サーバーまたはマネージド インスタンスの ID は、Microsoft Entra の Directory Reader ロール に存在する必要があります。

Microsoft Fabric の SQL データベースでは、CREATE USERを発行するプリンシパルが Microsoft Entra のサービス プリンシパルである場合、FROM EXTERNAL PROVIDERは許可されません。 サービス プリンシパルは、microsoft Entra プリンシパルのユーザーを作成するために、 TYPESID を使用する必要があります。

WITH OBJECT_ID = 'objectid'

適用対象: Microsoft Fabric の SQL Database、Azure SQL Managed Instance、SQL データベース

Microsoft Entra オブジェクト ID を指定します。 OBJECT_IDが指定されている場合、user_nameには、元のプリンシパル表示名から形成されたユーザー定義の別名を、サフィックスを付加した名前にすることができます。 user_nameは、 sys.database_principals ビュー内の一意の名前であり、他のすべての sysname 制限に従う必要があります。 WITH OBJECT_ID オプションの使用方法の詳細については、「Microsoft Entra ログインと一等でない表示名を持つユーザーを参照してください。

Note

サービス プリンシパルの表示名が重複していない場合は、既定の CREATE LOGIN または CREATE USER ステートメントを使用する必要があります。 WITH OBJECT_ID拡張機能は、一方的でないサービス プリンシパルで使用するために実装されたトラブルシューティング修復項目です。 一意のサービス プリンシパルで使用することはお勧めできません。 サフィックスを追加せずにサービス プリンシパルに WITH OBJECT_ID 拡張子を使用すると、正常に実行されますが、ログインまたはユーザーがどのサービス プリンシパルに対して作成されたかは明らかになりません。 サービス プリンシパルを一意に識別するには、サフィックスを使用してエイリアスを作成することをお勧めします。 WITH OBJECT_ID 拡張機能は、SQL Server ではサポートされていません。

解説

FOR LOGINを省略すると、新しいデータベース ユーザーは同じ名前で SQL Server ログインにマップされます。

既定のスキーマは、このデータベース ユーザー用のオブジェクトの名前を解決するときに、サーバーで最初に検索されるスキーマになります。 特に指定しない限り、このデータベース ユーザーによって作成されたオブジェクトの所有者になるのは、既定のスキーマです。

ユーザーに既定のスキーマが指定されている場合は、その既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが所属しているグループに既定のスキーマが指定されている場合は、グループの既定のスキーマが使用されます。 ユーザーに既定のスキーマが指定されておらず、そのユーザーが複数のグループに所属している場合、そのユーザーの既定のスキーマは、最も小さい principle_id と明示的に設定された既定のスキーマを持つ Windows グループのスキーマになります。 (利用可能な既定のスキーマのいずれかを、使用するスキーマとして明示的に選択することはできません)。ユーザーに対する既定のスキーマを決定できない場合は、dbo スキーマが使用されます。

DEFAULT_SCHEMA は、このオプションが指すスキーマが作成されていなくても設定できます。

DEFAULT_SCHEMA は、証明書または非対称キーにマップされるユーザーを作成する場合には指定できません。

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

WITHOUT LOGIN 句でユーザーを作成する場合、ユーザーは SQL Server ログインにマップされず、 他のデータベースには guest として接続できます。 ログインなしでこのユーザーにアクセス許可を割り当てることができ、セキュリティ コンテキストがログインなしでユーザーに変更されると、元のユーザーはログインなしでユーザーのアクセス許可を受け取ります。 例については、「D. ログインのないユーザーを作成して使用する」を参照してください。

Windows プリンシパルに割り当てられているユーザーにのみ、円記号 ( \ ) を含めることができます。

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

GRANT CONNECT TO guest; 
GO  

データベースのユーザーに関する情報については、sys.database_principals カタログ ビューを参照してください。

構文拡張機能 FROM EXTERNAL PROVIDER を使用して、Azure SQL Database と Azure SQL Managed Instance にサーバー レベルの Microsoft Entra ログインを作成します。 Microsoft Entra ログインを使用すると、データベース レベルの Microsoft Entra プリンシパルをサーバー レベルの Microsoft Entra ログインにマップできます。 Microsoft Entra ログインから Microsoft Entra ユーザーを作成するには、次の構文を使用します。

CREATE USER [Microsoft_Entra_principal] FROM LOGIN [Microsoft Entra login];

Azure SQL データベースでユーザーを作成する場合、 login_name は既存の Microsoft Entra ログインに対応している必要があります。そうしないと、 FROM EXTERNAL PROVIDER 句を使用すると、 master データベースにログインせずに Microsoft Entra ユーザーのみが作成されます。 たとえば、このコマンドでは、包含ユーザーが作成されます。

CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;

構文の概要

ログインに基づくユーザー 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 データベースにログインする必要はありません。 データベース エンジン 管理者は、包含データベースに対するアクセス許可を データベース エンジン レベルではなくデータベース レベルで付与できることを理解する必要があります。 詳細については、「 Security Best Practices with Contained Databases」を参照してください。

Azure SQL データベース で包含データベース ユーザーを使用する場合、サーバー レベルのファイアウォール ルールではなく、データベース レベルのファイアウォール ルールを使用してアクセスを構成します。 詳細については、「sp_set_database_firewall_rule (Azure SQL Database)」を参照してください。

SQL Server 2022 (16.x)、SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics 包含データベース ユーザーの場合、SSMS は多要素認証をサポートしています。 詳細については、「Microsoft Entra 多要素認証の使用」を参照してください。

アクセス許可

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

SQL Server 2022 以降でのアクセス許可

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

A. SQL Server ログインに基づくデータベース ユーザーを作成する

次の例では、最初に AbolrousHazem という SQL Server ログインを作成し、次に対応するデータベース ユーザー AbolrousHazemAdventureWorks2022 に作成します。

CREATE LOGIN AbolrousHazem   
    WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';  

ユーザー データベースに変更します。 たとえば、SQL Server では USE AdventureWorks2022 ステートメントを使用します。 Azure Synapse Analytics と Analytics Platform System (PDW) では、ユーザー データベースへの新しい接続を作成する必要があります。

CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;  
GO   

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

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

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

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

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

適用対象: SQL Server 2008 (10.0.x) 以降。

USE AdventureWorks2022;  
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 AdventureWorks2022;  
CREATE USER CustomApp WITHOUT LOGIN ;  
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\tengiz0] ;  
GO   

ユーザー CustomAppadventure-works\tengiz0 の資格情報を使用するには、次のステートメントを実行します。

EXECUTE AS USER = 'CustomApp' ;  
GO  

adventure-works\tengiz0 の資格情報に戻すには、次のステートメントを実行します。

REVERT ;  
GO  

E. パスワードを持つ包含データベース ユーザーを作成する

次の例では、パスワードを持つ包含データベース ユーザーを作成します。 この例は、包含データベースでのみ実行できます。

適用対象: SQL Server 2012 (11.x) 以降。 この例は DEFAULT_LANGUAGE が削除された場合に SQL Database で機能します。

USE AdventureWorks2022;  
GO  
CREATE USER Carlo  
WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*'  
    , DEFAULT_LANGUAGE=[Brazilian]  
    , DEFAULT_SCHEMA=[dbo]  
GO   

F. ドメイン ログインのための包含データベース ユーザーを作成する

次の例では、Contoso という名前のドメインの Fritz という名前のログインに対する包含データベース ユーザーを作成します。 この例は、包含データベースでのみ実行できます。

適用対象: SQL Server 2012 (11.x) 以降。

USE AdventureWorks2022;  
GO  
CREATE USER [Contoso\Fritz] ;  
GO   

G. 特定の SID を持つ包含データベース ユーザーを作成する

次の例では、CarmenW という名前の、SQL Server 認証を使用する包含データベース ユーザーを作成します。 この例は、包含データベースでのみ実行できます。

適用対象: SQL Server 2012 (11.x) 以降。

USE AdventureWorks2022;  
GO  
CREATE USER CarmenW WITH PASSWORD = 'a8ea v*(Rd##+'  
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;

H. 暗号化されたデータをコピーするためのユーザーを作成する

以下の例では、Always Encrypted 機能によって保護されたデータを、暗号化された列を含む一連のテーブルから、(同じまたは異なるデータベースに) 暗号化された列を持つ別の一連のテーブルにコピーできるユーザーを作成します。 詳細については、「Always Encrypted で保護された機微なデータの移行」を参照してください。

適用対象: SQL Server 2016 (13.x) 以降、SQL Database。

CREATE USER [Chin]   
WITH   
      DEFAULT_SCHEMA = dbo  
    , ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON ;  

I. Azure SQL で Microsoft Entra ログインから Microsoft Entra ユーザーを作成する

Microsoft Entra ログインから Microsoft Entra ユーザーを作成するには、次の構文を使用します。

Microsoft Entra ログインを使用して、Azure または SQL Managed Instance の logical サーバーにサインインし、SQL Managed Instance でsysadminロールを付与するか、SQL Database でロールをloginmanagerします。 次の T-SQL スクリプトは、ログイン bob@contoso.comから Microsoft Entra ユーザー bob@contoso.comを作成します。 このログインは CREATE LOGIN 例で作成されました。

CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com];
GO

重要

Microsoft Entra ログインからUSERを作成する場合は、LOGINと同じlogin_nameとしてuser_nameを指定します。

グループである Microsoft Entra ログインからグループとして Microsoft Entra ユーザーを作成することがサポートされています。

CREATE USER [MS Entra group] FROM LOGIN [MS Entra group];

GO

グループである Microsoft Entra ログインから Microsoft Entra ユーザーを作成することもできます。

CREATE USER [bob@contoso.com] FROM LOGIN [MS Entra group];

GO

J. Microsoft Entra プリンシパルから包含データベース ユーザーを作成する

次の構文では、masterに関連付けられたログインがないデータベースに、Microsoft Entra ユーザー bob@contoso.comが作成されます。 データベース エンジンは、指定したユーザーが Microsoft Entra に存在するかどうかを検証します。

CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER;
GO

K. 検証なしで Microsoft Entra プリンシパルから包含データベース ユーザーを作成する

適用対象: Microsoft Fabric の SQL データベース

このセクションの例では、Microsoft Entra のプリンシパル名を検証せずに、Microsoft Entra プリンシパルのデータベース ユーザーを作成します。

次の T-SQL の例では、 bob@contoso.comという名前の Microsoft Entra ユーザーのデータベース ユーザーを作成します。 <unique identifier sid>を新しいユーザーの SID に置き換えて、Microsoft Entra ユーザーのオブジェクト ID に置き換えます。

DECLARE @principal_name SYSNAME = 'bob@contoso.com';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- user's object ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = E;'
EXEC (@cmd);

次の例では、 HRAppという名前の Microsoft Entra サービス プリンシパルのデータベース ユーザーを作成します。 <unique identifier sid>を新しいユーザーの SID に置き換えて、Microsoft Entra のサービス プリンシパルのクライアント ID に置き換えます。

DECLARE @principal_name SYSNAME = 'HRApp';
DECLARE @clientId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's client ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castClientId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @clientId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castClientId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castClientId + ', TYPE = E;'
EXEC (@cmd);

次の例では、 HRという名前の Microsoft Entra グループのデータベース ユーザーを作成します。 <unique identifier sid>を新しいユーザーの SID に置き換えて、グループのオブジェクト ID に置き換えます。

DECLARE @group_name SYSNAME = 'HR';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's object ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);

-- Construct command: CREATE USER [@groupName] WITH SID = @castObjectId, TYPE = X;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = X;'
EXEC (@cmd);

次のステップ

ユーザーを作成したら、ALTER ROLE ステートメントを使用して、ユーザーをデータベース ロールに追加することを検討します。
ロールに GRANT (オブジェクト権限の許可) を適用して、テーブルにアクセスできるようにすることもできます。 SQL Server セキュリティ モデルの概要については、権限に関するページを参照してください。