次の方法で共有


CREATE LOGIN (Transact-SQL)

SQL Server、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics、または Analytics Platform System データベースのログインを作成します。 特定のバージョンの構文、引数、解説、アクセス許可、および例については、次のいずれかのタブを選択します。

CREATE LOGIN はトランザクションに参加します。 CREATE LOGIN がトランザクション内で実行されており、トランザクションがロールバックされると、ログインの作成がロールバックされます。 トランザクション内で実行された場合、作成されたログインは、トランザクションがコミットされるまで使用できません。

Note

Microsoft Entra ID の、旧称は Azure Active Directory(Azure AD)です。

構文表記規則の詳細については、「Transact-SQL 構文表記規則」を参照してください。

製品を選択する

次の行で、興味のある製品の名前を選択すると、その製品の情報のみが表示されます。

* SQL Server *  

 

SQL Server

構文

-- Syntax for SQL Server
CREATE LOGIN login_name { WITH <option_list1> | FROM <sources> }

<option_list1> ::=
    PASSWORD = { 'password' | hashed_password HASHED } [ MUST_CHANGE ]
    [ , <option_list2> [ ,... ] ]

<option_list2> ::=
    SID = sid
    | DEFAULT_DATABASE = database
    | DEFAULT_LANGUAGE = language
    | CHECK_EXPIRATION = { ON | OFF}
    | CHECK_POLICY = { ON | OFF}
    | CREDENTIAL = credential_name

<sources> ::=
    WINDOWS [ WITH <windows_options>[ ,... ] ]
    | EXTERNAL PROVIDER
    | CERTIFICATE certname
    | ASYMMETRIC KEY asym_key_name

<windows_options> ::=
    DEFAULT_DATABASE = database
    | DEFAULT_LANGUAGE = language

引数

login_name

作成するログインの名前を指定します。 ログインには、SQL Server ログイン、Windows ログイン、Microsoft Entra ログイン、証明書マップ ログイン、非対称キー マップ ログインの 5 種類があります。

Windows ドメイン アカウントからマップされたログインを作成する場合は、ログオン名を [<domainName>\<login_name>] の形式で使用する必要があります。 login_name@DomainName 形式の UPN は使用できません。 例については、この記事で後述 サンプル E を参照してください。 認証ログインは sysname 型であり、 Identifiers の規則に準拠する必要がありバックスラッシュ () を含めることはできません。 Windows ログインには " \ " を含めることができます。 Active Directory ユーザーに基づくログインは、21 文字未満の名前に制限されます。

FROM EXTERNAL PROVIDER 句を使用する場合、ログイン名は、SQL インスタンスが Arc 対応になっているのと同じテナント内の既存の Microsoft Entra プリンシパルの表示名と一致する必要があります。 Microsoft Entra のユーザー、グループ、アプリケーションを使用してログインを作成できます。

PASSWORD ='password'

SQL Server ログインにのみ適用されます。 作成するログインのパスワードを指定します。 強力なパスワードを使用してください。 詳細については、「強力なパスワード」と「パスワード ポリシー」を参照してください。 SQL Server 2012 (11.x) 以降では、保存されたパスワード情報は salt 化パスワードの SHA-512 を使用して計算されます。

パスワードでは大文字と小文字が区別されます。 パスワードは常に 8 文字以上にする必要があり、128 文字を超えることはできません。 パスワードには、a-z、A-Z、0-9 およびほとんどの英数字以外の文字を含めることができます。 パスワードには、単一引用符や login_nameを含めることはできません。

PASSWORD = hashed_password

ハッシュされたキーワードのみに当てはまります。 作成するログインのパスワードのハッシュ値を指定します。

HASHED

SQL Server ログインにのみ適用されます。 PASSWORD 引数の後に入力されたパスワードが、ハッシュ済みであることを示します。 このオプションが選択されていない場合、パスワードとして入力された文字列は、データベースに格納される前にハッシュされます。 このオプションは、あるサーバーから別のサーバーにデータベースを移行する場合にのみ使用してください。 HASHED オプションを使用して新しいログインを作成しないでください。 HASHED オプションは、SQL 7 以前で作成されたハッシュでは使用できません。

MUST_CHANGE

SQL Server ログインにのみ適用されます。 このオプションが含まれている場合、SQL Server では、新しいログインが最初に使用されたときに、ユーザーに新しいパスワードの入力が求められます。

CREDENTIAL =credential_name

新しい SQL Server ログインにマップする資格情報の名前。 この資格情報は、サーバー内に既に存在している必要があります。 現在このオプションは、資格情報をログインに関連付けるだけです。 資格情報をシステム管理者 (sa) ログインにマップすることはできません。

SID = sid

ログインの再作成に使用されます。 Windows 認証ログインではなく、SQL Server 認証ログインにのみ適用されます。 新しい SQL Server 認証ログインの SID を指定します。 このオプションが使用されていない場合、SQL Server で自動的に SID が割り当てられます。 SID 構造体は、SQL Server のバージョンに依存します。 SQL Server ログイン SID: GUID に基づく 16 バイト (binary (16) ) のリテラル値。 たとえば、SID = 0x14585E90117152449347750164BA00A7 のようにします。

DEFAULT_DATABASE =database

ログインに割り当てる既定のデータベースを指定します。 このオプションが含まれていない場合、既定のデータベースは masterに設定されます。

DEFAULT_LANGUAGE =language

ログインに割り当てる既定の言語を指定します。 このオプションが含まれていない場合、既定の言語はサーバーの現在の既定の言語に設定されます。 サーバーの既定の言語が将来変更されても、ログインの既定の言語は変更されません。

CHECK_EXPIRATION = { ON | OFF }

SQL Server ログインにのみ適用されます。 このログインに、パスワードの有効期限ポリシーを適用するかどうかを指定します。 既定値は OFF です。

CHECK_POLICY = { ON |OFF }

SQL Server ログインにのみ適用されます。 SQL Server を実行しているコンピューターの Windows パスワード ポリシーをこのログインに適用するかどうかを指定します。 既定値は ON です。

Windows のポリシーで強力なパスワードが求められる場合は、次の 4 つの特性のうちの少なくとも 3 つをパスワードに含める必要があります。

  • 大文字 (A-Z)。
  • 小文字 (a-z)。
  • 数字 (0-9)。
  • 空白、_、@、*、^、%、!、$、#、> などの英数字以外の文字の 1 つ。

WINDOWS

ログインを Windows ログインにマップするよう指定します。

FROM EXTERNAL PROVIDER

ログインが Microsoft Entra プリンシパルにマップされることを指定します。 このオプションは、Arc 対応 SQL Server 2022 以降のバージョンで使用できます。 詳細については、「 Microsoft Entra authentication for SQL Server(SQL Server の Microsoft Entra 認証)」を参照してください。

CERTIFICATE certname

ログインに関連付ける証明書の名前を指定します。 この証明書は、 master データベースに既に存在している必要があります。

ASYMMETRIC KEY asym_key_name

このログインに関連付ける非対称キーの名前を指定します。 このキーは、 master データベースに既に存在している必要があります。

解説

  • パスワードでは大文字と小文字が区別されます。
  • パスワードの事前ハッシュは、SQL Server ログインを作成する場合にのみサポートされます。
  • MUST_CHANGEを指定する場合は、CHECK_EXPIRATIONとCHECK_POLICYをONに設定する必要があります。 ON に設定しない場合、ステートメントは失敗します。
  • CHECK_POLICY = OFFCHECK_EXPIRATION = ONの組み合わせはサポートされていません。
  • CHECK_POLICYが OFFに設定されている場合、 lockout_time はリセットされ、 CHECK_EXPIRATIONOFFに設定されます。

重要

CHECK_EXPIRATIONとCHECK_POLICYは、Windows Server 2003 以降のバージョンでのみ適用されます。 詳細については、「 Password Policy」をご参照ください。

  • 証明書または非対称キーから作成されたログインはコード署名用にのみ使用されます。 SQL Server への接続には使用できません。 証明書または非対称キーが既に masterに存在する場合にのみ、証明書または非対称キーからログインを作成できます。
  • スクリプトでログインを転送する場合は、「SQL Server 2005 のインスタンス間でログインおよびパスワードを転送する方法」を参照してください。
  • ログインを作成すると、自動的に新しいログインが有効になり、ログインにサーバー レベルの CONNECT SQL 権限が与えられます。
  • アクセスを許可するにはサーバーの認証モードがログインの種類に一致する必要があります。
  • 権限システムの設計の詳細については、「 データベース エンジンの権限の概要」を参照してください。

アクセス許可

  • ログインを作成できるのは、サーバーに対する ALTER ANY LOGIN 権限、または securityadmin 固定サーバー ロールのメンバーシップを持つユーザーのみとなります。 詳細については、サーバー レベルのロールALTER SERVER ROLE に関するページを参照してください。
  • CREDENTIAL オプションを使用する場合は、サーバーに対する ALTER ANY CREDENTIAL 権限も必要です。

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

##MS_LoginManager##固定サーバー ロールのサーバーまたはメンバーシップに対する CREATE LOGIN 権限が必要です。

ログインを作成した後

ログインが作成されたら、ログインは SQL Server に接続できますが、public ロールに与えられた権限しか持ちません。 次の操作のいくつかを実行することを検討してください。

  • データベースに接続するには、ログイン用のデータベース ユーザーを作成する必要があります。 詳細については、「CREATE USER」を参照してください。
  • CREATE SERVER ROLE を使用して、ユーザー定義サーバー ロールを作成します。 ALTER SERVER ROLE ... ADD MEMBERを使用して、ユーザー定義サーバー ロールに新しいログインを追加します。 詳細については、CREATE SERVER ROLEALTER SERVER ROLE に関するページを参照してください。
  • sp_addsrvrolememberを使用して、固定サーバー ロールにログインを追加します。 詳細については、「サーバー レベルのロール」と「sp_addsrvrolemember」を参照してください。
  • 新しいログインまたはログインを含むロールにサーバー レベルの権限を許可するには、GRANT ステートメントを使用します。 詳細については、「GRANT」を参照してください。

A. パスワードを使用してログインを作成する

次の例では、特定のユーザーのログインを作成し、パスワードを割り当てます。

CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
GO

B. パスワードを変更する必要があるログインを作成する

次の例では、特定のユーザーのログインを作成し、パスワードを割り当てます。 MUST_CHANGE オプションが指定されているため、ユーザーは、最初にサーバーに接続するときにこのパスワードを変更する必要があります。

適用対象: SQL Server 2008 (10.0.x) 以降のバージョン。

CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>'
    MUST_CHANGE, CHECK_EXPIRATION = ON;
GO

Note

CHECK_EXPIRATION が OFF のとき、MUST_CHANGE オプションは使用できません。

C: 資格情報にマップされたログインを作成する

次の例では、ユーザーを使用して、特定のユーザーのログインを作成します。 このログインは資格情報にマップされます。

適用対象: SQL Server 2008 (10.0.x) 以降のバージョン。

CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>',
    CREDENTIAL = <credentialName>;
GO

D. 証明書からログインを作成する

次の例では、 masterの証明書から特定のユーザーのログインを作成します。

適用対象: SQL Server 2008 (10.0.x) 以降のバージョン。

USE MASTER;
CREATE CERTIFICATE <certificateName>
    WITH SUBJECT = '<login_name> certificate in master database',
    EXPIRY_DATE = '12/05/2025';
GO
CREATE LOGIN <login_name> FROM CERTIFICATE <certificateName>;
GO

E. Windows ドメイン アカウントからログインを作成する

次の例では、Windows ドメイン アカウントからログインを作成します。

適用対象: SQL Server 2008 (10.0.x) 以降のバージョン。

CREATE LOGIN [<domainName>\<login_name>] FROM WINDOWS;
GO

F. SID からログインを作成する

次の例では、まず、SQL Server 認証のログインを作成し、ログインの SID を調べています。

CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&';
SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin';
GO

このクエリは、SID として 0x241C11948AEEB749B0D22646DB1A19F2 を返します。 皆さんがクエリを実行すると、これとは異なる値が返されます。 次のステートメントは、ログインを削除し、ログインを作成し直します。 前のクエリの SID を使用します。

DROP LOGIN TestLogin;
GO

CREATE LOGIN TestLogin
WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2;

SELECT * FROM sys.sql_logins WHERE name = 'TestLogin';
GO

G. 複数の引数を持つログインを作成する

次の例では、各引数の間にコンマを使用して、複数の引数を連結する方法を示します。

CREATE LOGIN [MyUser]
WITH PASSWORD = 'MyPassword',
DEFAULT_DATABASE = MyDatabase,
CHECK_POLICY = OFF,
CHECK_EXPIRATION = OFF ;

H. ハッシュされたパスワードを使用して SQL ログインを作成する

次の例は、移行シナリオで行ったように、既存のログインと同じパスワードで SQL ログインを作成する方法を示しています。 最初の手順は、ソース データベース サーバー上の既存のログインからパスワード ハッシュを取得することです。 次に、同じハッシュを使用して、新しいデータベース サーバー上にログインを作成します。 これにより、新しいログインのパスワードは古いサーバー上のものと同じになります。

-- run this to retrieve the password hash for an individual Login:
SELECT LOGINPROPERTY('Andreas','PASSWORDHASH') AS password_hash;
-- as an alternative, the catalog view sys.sql_logins can be used to retrieve the password hashes for multiple accounts at once. (This could be used to create a dynamic sql statement from the result set
SELECT name, password_hash
FROM sys.sql_logins
  WHERE
    principal_id > 1    -- excluding sa
    AND
    name NOT LIKE '##MS_%##' -- excluding special MS system accounts
-- create the new SQL Login on the new database server using the hash of the source server
CREATE LOGIN Andreas
  WITH PASSWORD = 0x02000A1A89CD6C6E4C8B30A282354C8EA0860719D5D3AD05E0CAE1952A1C6107A4ED26BEBA2A13B12FAB5093B3CC2A1055910CC0F4B9686A358604E99BB9933C75B4EA48FDEA HASHED;

I. Microsoft Entra ユーザーのログインを作成する

次の例では、contoso という名前の Microsoft Entra テナントに存在する Microsoft Entra アカウント joe@contoso.onmicrosoft.comのログインを作成します。

CREATE LOGIN [joe@contoso.onmicrosoft.com] FROM EXTERNAL PROVIDER

GO

J. フェデレーション Microsoft Entra アカウントのログインを作成する

次の例では、contoso というテナントに存在するフェデレーション Microsoft Entra アカウント bob@contoso.comのログインを作成します。 ユーザー bob はゲスト ユーザーである可能性もあります。

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

K. Microsoft Entra グループのログインを作成する

次の例では、テナント contosoに存在する Microsoft Entra グループ mygroup のログインを作成します。

CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER
GO

L. Microsoft Entra アプリケーションのログインを作成する

次の例では、テナント contosoに存在する Microsoft Entra アプリケーション myapp のログインを作成します。

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER

* Azure SQL Database *  

 

SQL Database

Azure SQL Database への接続と承認の詳細については、次を参照してください。

構文

-- Syntax for Azure SQL Database
CREATE LOGIN login_name
  { 
    FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid'] 
    | WITH <option_list> [,..] 
  }

<option_list> ::=
    PASSWORD = { 'password' }
    [ , SID = sid ]

引数

login_name

Note

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

FROM EXTERNAL PROVIDER 句と共に使用すると、ログインで Microsoft Entra プリンシパル (Microsoft Entra ユーザー、グループ、またはアプリケーション) が指定されます。 それ以外の場合、ログインは作成された SQL ログインの名前を示します。

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

FROM EXTERNAL PROVIDER

ログインが Microsoft Entra 認証用であることを指定します。

WITH OBJECT_ID = 'objectid'

Microsoft Entra オブジェクト ID を指定します。 OBJECT_IDが指定されている場合、login_nameは Microsoft Entra の表示名と一致する必要はありません。 login_nameは、 sys.server_principals ビューの一意の名前であり、他のすべての sysname 制限に従う必要があります。 WITH OBJECT_ID オプションの使用方法の詳細については、「Microsoft Entra ログインと一等でない表示名を持つユーザーを参照してください。

Note

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

PASSWORD ='password'

作成する SQL ログインのパスワードを指定します。 強力なパスワードを使用してください。 詳細については、「強力なパスワード」と「パスワード ポリシー」を参照してください。 SQL Server 2012 (11.x) 以降では、保存されたパスワード情報は salt 化パスワードの SHA-512 を使用して計算されます。

パスワードでは大文字と小文字が区別されます。 パスワードは常に 8 文字以上にする必要があり、128 文字を超えることはできません。 パスワードには、a-z、A-Z、0-9 およびほとんどの英数字以外の文字を含めることができます。 パスワードには、単一引用符や login_nameを含めることはできません。

SID = sid

ログインの再作成に使用されます。 Windows 認証ログインではなく、SQL Server 認証ログインにのみ適用されます。 新しい SQL Server 認証ログインの SID を指定します。 このオプションを使用しない場合、SQL Server によって SID が自動的に割り当てられます。 SID 構造体は、SQL Server のバージョンに依存します。 SQL Database の場合、これは、0x01060000000000640000000000000000 と、GUID を表す 16 バイトで構成される 32 バイト (binary(32) ) のリテラルです。 たとえば、「 SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7 」のように入力します。

解説

  • パスワードでは大文字と小文字が区別されます。
  • ログインを作成すると、自動的に新しいログインが有効になり、ログインにサーバー レベルの CONNECT SQL 権限が与えられます。

重要

Azure SQL Database でログインとユーザーを操作する方法の詳細については、Azure SQL Database でのログインの管理に関する記事を参照してください。

ログイン

SQL Database ログイン

CREATE LOGIN ステートメントはバッチ内の唯一のステートメントである必要があります。

sqlcmd などの SQL Database に接続するいくつかのメソッドでは、<login>@<server> の表記法を使用して、接続文字列のログイン名に SQL Database サーバー名を追加する必要があります。 たとえば、ログインが login1 で、SQL Database サーバーの完全修飾名が servername.database.windows.net である場合、接続文字列の username パラメーターは login1@servername となる必要があります。 の合計の長さ、 username パラメーターには、128 文字まで login_name サーバー名の長さマイナス 127 文字に制限されます。 この例では、login_name が 10 文字であるため、servername には 117 文字までしか指定できません。

SQL Database では、ログインを作成するための適切なアクセス許可を持つ master データベースに接続されている必要があります。 詳細については、「追加のログインと管理アクセス許可を持つユーザーを作成する」を参照してください。

SQL Server ルールを使用すると、sql Server 認証ログインを <loginname>@<servername> 形式で作成できます。 SQL Database server が myazureserver で、ログインが myemail@contoso.com である場合、myemail@contoso.com@myazureserver としてログインを指定する必要があります。

SQL Database では、接続の認証に必要なログイン データおよびサーバー レベルのファイアウォール規則は、各データベースで一時的にキャッシュされます。 このキャッシュは定期的に更新されます。 認証キャッシュを強制的に更新し、データベースに最新バージョンのログイン テーブルがあることを確認するには、DBCC FLUSHAUTHCACHE を実行します。

アクセス許可

新しいログインを作成できるのは、サーバー レベルのプリンシパル ログイン (プロビジョニング プロセスによって作成) またはmaster データベースのloginmanager データベース ロールのメンバーだけです。 詳細については、「追加のログインと管理アクセス許可を持つユーザーを作成する」を参照してください。

A. パスワードを使用してログインを作成する

次の例では、特定のユーザーのログインを作成し、パスワードを割り当てます。 master データベースに接続し、次のコード サンプルを使用します。

CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
GO

B. SID からログインを作成する

次の例では、まず、SQL Server 認証のログインを作成し、ログインの SID を調べています。 master データベースに接続し、次のコード サンプルを使用します。

CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&';

SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin';
GO

このクエリは、SID として 0x241C11948AEEB749B0D22646DB1A19F2 を返します。 皆さんがクエリを実行すると、これとは異なる値が返されます。 次のステートメントは、ログインを削除し、ログインを作成し直します。 前のクエリの SID を使用します。

DROP LOGIN TestLogin;
GO

CREATE LOGIN TestLogin
WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2;

SELECT * FROM sys.sql_logins WHERE name = 'TestLogin';
GO

C: Microsoft Entra アカウントを使用してログインを作成する

この例では、contosoという Microsoft Entra ドメインに存在するユーザー bob@contoso.comの資格情報を使用して、Azure SQL 論理サーバーにログインを作成します。 master データベースに接続し、次のコード サンプルを使用します。

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

D. オブジェクト ID を使用してエイリアスを持つログインを作成する

Microsoft Entra サービス プリンシパルまたはグループのオブジェクト ID を指定することで、 login_name のエイリアスを作成できます。 master データベースに接続し、次のコード サンプルを使用します。

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID='aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb';

サービス プリンシパルのオブジェクト ID の取得の詳細については、「Microsoft Entra ID のサービス プリンシパル オブジェクトを参照してください。

* Azure SQL
Managed Instance *

 

Azure SQL Managed Instance

構文

-- Syntax for Azure SQL Managed Instance
CREATE LOGIN login_name [FROM EXTERNAL PROVIDER [WITH OBJECT_ID = 'objectid'] ] { WITH <option_list> [,..]}

<option_list> ::=
    PASSWORD = {'password'}
    | SID = sid
    | DEFAULT_DATABASE = database
    | DEFAULT_LANGUAGE = language

引数

login_name

FROM EXTERNAL PROVIDER 句と共に使用すると、ログインで Microsoft Entra プリンシパル (Microsoft Entra ユーザー、グループ、またはアプリケーション) が指定されます。 それ以外の場合、ログインは作成された SQL ログインの名前を示します。

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

FROM EXTERNAL PROVIDER

ログインが Microsoft Entra 認証用であることを指定します。

WITH OBJECT_ID = 'objectid'

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

Note

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

PASSWORD = 'password'

作成する SQL ログインのパスワードを指定します。 強力なパスワードを使用してください。 詳細については、「強力なパスワード」と「パスワード ポリシー」を参照してください。 SQL Server 2012 (11.x) 以降では、保存されたパスワード情報は salt 化パスワードの SHA-512 を使用して計算されます。

パスワードでは大文字と小文字が区別されます。 パスワードは常に 10 文字以上にする必要があり、128 文字を超えることはできません。 パスワードには、a-z、A-Z、0-9 およびほとんどの英数字以外の文字を含めることができます。 パスワードには、単一引用符や login_nameを含めることはできません。

SID = sid

ログインの再作成に使用されます。 SQL Server 認証ログインにのみ適用されます。 新しい SQL Server 認証ログインの SID を指定します。 このオプションを使用しない場合、SQL Server によって SID が自動的に割り当てられます。 SID 構造体は、SQL Server のバージョンに依存します。 SQL Database の場合、これは、0x01060000000000640000000000000000 と、GUID を表す 16 バイトで構成される 32 バイト (binary(32) ) のリテラルです。 たとえば、「 SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7 」のように入力します。

解説

  • FROM EXTERNAL PROVIDER構文では、Microsoft Entra アカウントにマップされたサーバー レベルのプリンシパルが作成されます

  • FROM EXTERNAL PROVIDERが指定されている場合:

    • login_nameは、現在の Azure SQL Managed Instance によって Microsoft Entra ID でアクセスできる既存の Microsoft Entra アカウント (ユーザー、グループ、またはアプリケーション) を表す必要があります。 Microsoft Entra プリンシパルの場合、CREATE LOGIN 構文には次のものが必要です。

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

      • Microsoft Entra グループおよびアプリケーションの Microsoft Entra オブジェクトの DisplayName。

    • PASSWORD オプションは使用できません。

  • 既定では、 FROM EXTERNAL PROVIDER 句を省略すると、通常の SQL ログインが作成されます。

  • Microsoft Entra ログインは、sys.server_principalsに表示され、型列の値が E に設定され、Microsoft Entra ユーザーにマップされたログインのEXTERNAL_LOGINに設定type_desc、または列の値を X に設定し、type_desc値を Microsoft Entra グループにマップされたログインのEXTERNAL_GROUPに設定します。

  • スクリプトでログインを転送する場合は、「SQL Server 2005 のインスタンス間でログインおよびパスワードを転送する方法」を参照してください。

  • ログインを作成すると、自動的に新しいログインが有効になり、ログインにサーバー レベルの CONNECT SQL 権限が与えられます。

重要

Azure SQL Database でログインとユーザーを操作する方法の詳細については、Azure SQL Database でのログインの管理に関する記事を参照してください。

ログインとアクセス許可

新しいログインを作成できるのは、(プロビジョニング プロセスによって作成された) サーバー レベルのプリンシパル ログイン、またはmaster データベースのsecurityadminまたはsysadmin データベース ロールのメンバーだけです。 詳細については、サーバー レベルのロールALTER SERVER ROLE に関するページを参照してください。

既定では、 master で新しく作成された Microsoft Entra ログインに付与される標準のアクセス許可は、 CONNECT SQL および VIEW ANY DATABASE です。

SQL Managed Instance ログイン

  • サーバーに対する ALTER ANY LOGIN アクセス許可、または固定サーバー ロール securityadmin または sysadmin のいずれかのメンバーシップが必要です。 サーバーまたはこれらのロールのいずれかのメンバーシップに対する ALTER ANY LOGIN アクセス許可を持つ Microsoft Entra アカウントのみが作成コマンドを実行できます。

  • ログインが SQL プリンシパルの場合、 sysadmin ロールの一部であるログインのみが create コマンドを使用して Microsoft Entra アカウントのログインを作成できます。

  • Azure SQL Managed Instance と同じ Microsoft Entra テナントのメンバーである必要があります。

ログインを作成した後

ログインが作成されたら、ログインはマネージド インスタンスに接続できますが、public ロールに与えられた権限しか持ちません。 次の操作のいくつかを実行することを検討してください。

  • Microsoft Entra ログインからユーザーを作成するには、 CREATE USERを参照してください。

  • データベース内のユーザーにアクセス許可を付与するには、 ALTER SERVER ROLE ... ADD MEMBER ステートメントを使用して、組み込みのデータベース ロールまたはカスタム ロールのいずれかにユーザーを追加するか、 GRANT ステートメントを使用して直接ユーザーにアクセス許可を付与します。 詳細については、管理者以外のロール追加のサーバー レベルの管理者ロールALTER SERVER ROLE、および GRANT ステートメントに関するページを参照してください。

  • サーバー全体のアクセス許可を付与するには、 master データベースにデータベース ユーザーを作成し、 ALTER SERVER ROLE ... ADD MEMBER ステートメントを使用して、管理サーバー ロールのいずれかにユーザーを追加します。 詳細については、サーバー レベルのロールALTER SERVER ROLE、およびサーバー ロールに関するページを参照してください。

    • 次のコマンドを使用して、 sysadmin ロールを Microsoft Entra ログインに追加します。 ALTER SERVER ROLE sysadmin ADD MEMBER [MS_Entra_login]
  • 新しいログインまたはログインを含むロールにサーバー レベルの権限を許可するには、GRANT ステートメントを使用します。 詳細については、「GRANT」を参照してください。

制限事項

  • データベース所有者として Microsoft Entra グループにマップされた Microsoft Entra ログインの設定はサポートされていません。

  • EXECUTE AS 句など、他の Microsoft Entra プリンシパルを使用した Microsoft Entra ログインの偽装がサポートされています。

  • Microsoft Entra プリンシパルを対象とする次の操作を実行できるのは、 sysadmin ロールの一部であるサーバー プリンシパル (ログイン) のみです。

    • EXECUTE AS USER
    • EXECUTE AS LOGIN
  • 別の Microsoft Entra ディレクトリからインポートされた外部 (ゲスト) ユーザーは、Azure portal を使用して SQL Managed Instance の Microsoft Entra 管理者として直接構成することはできません。 代わりに、外部ユーザーを ロール割り当て可能なグループに参加させ インスタンス管理者としてグループを構成します。 PowerShell または Azure CLI を使用して、個々のゲスト ユーザーをインスタンス管理者として設定できます。

  • ログインは、フェールオーバー グループ内のセカンダリ インスタンスにレプリケートされません。 ログインはシステム データベースである master データベースに保存されるため、geo レプリケートされません。 これを解決するには、セカンダリ インスタンスで同じ SID を使用してログインを作成する必要があります。

-- Code to create login on the secondary instance
CREATE LOGIN foo WITH PASSWORD = '<enterStrongPasswordHere>', SID = <login_sid>;

A. パスワードを使用してログインを作成する

次の例では、特定のユーザーのログインを作成し、パスワードを割り当てます。

CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
GO

B. SID からログインを作成する

次の例では、まず、SQL Server 認証のログインを作成し、ログインの SID を調べています。

CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&';

SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin';
GO

このクエリは、SID として 0x241C11948AEEB749B0D22646DB1A19F2 を返します。 皆さんがクエリを実行すると、これとは異なる値が返されます。 次のステートメントは、ログインを削除し、ログインを作成し直します。 前のクエリの SID を使用します。

DROP LOGIN TestLogin;
GO

CREATE LOGIN TestLogin
WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2;

SELECT * FROM sys.sql_logins WHERE name = 'TestLogin';
GO

C: Microsoft Entra ユーザーのログインを作成する

次の例では、contoso という名前のテナントに存在する Microsoft Entra アカウント joe@contoso.onmicrosoft.comのログインを作成します。

CREATE LOGIN [joe@contoso.onmicrosoft.com] FROM EXTERNAL PROVIDER

GO

D. フェデレーション Microsoft Entra アカウントのログインを作成する

次の例では、contoso というテナントに存在するフェデレーション Microsoft Entra アカウント bob@contoso.comのログインを作成します。 ユーザー bob はゲスト ユーザーである可能性もあります。

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

E. Microsoft Entra グループのログインを作成する

次の例では、テナント contosoに存在する Microsoft Entra グループ mygroup のログインを作成します。

CREATE LOGIN [mygroup] FROM EXTERNAL PROVIDER
GO

F. Microsoft Entra アプリケーションのログインを作成する

次の例では、テナント contosoに存在する Microsoft Entra アプリケーション myapp のログインを作成します。

CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER

G. 新しく追加されたログインを確認する

新しく追加されたログインを確認するには、次の T-SQL コマンドを実行します。

SELECT *
FROM sys.server_principals;
GO

* Azure Synapse
Analytics *

 

Azure Synapse Analytics

構文

-- Syntax for Azure Synapse Analytics
CREATE LOGIN login_name
  { 
    FROM EXTERNAL PROVIDER
    | WITH <option_list> [,..] 
  }

<option_list> ::=
    PASSWORD = { 'password' }
    [ , SID = sid ]

引数

Note

Microsoft Entra サーバー プリンシパル (ログイン) は現在プレビュー段階です。

FROM EXTERNAL PROVIDER 句と共に使用すると、ログインで Microsoft Entra プリンシパル (Microsoft Entra ユーザー、グループ、またはアプリケーション) が指定されます。 それ以外の場合、ログインは作成された SQL ログインの名前を示します。

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

FROM EXTERNAL PROVIDER

ログインが Microsoft Entra 認証用であることを指定します。

login_name

作成するログインの名前を指定します。 Azure Synapse の SQL Analytics では SQL ログインのみサポートされています。 Microsoft Entra ユーザーのアカウントを作成するには、 CREATE USER ステートメントを使用します。

PASSWORD ='password'

作成する SQL ログインのパスワードを指定します。 強力なパスワードを使用してください。 詳細については、「強力なパスワード」と「パスワード ポリシー」を参照してください。 SQL Server 2012 (11.x) 以降では、保存されたパスワード情報は salt 化パスワードの SHA-512 を使用して計算されます。

パスワードでは大文字と小文字が区別されます。 パスワードは常に 8 文字以上にする必要があり、128 文字を超えることはできません。 パスワードには、a-z、A-Z、0-9 およびほとんどの英数字以外の文字を含めることができます。 パスワードには、単一引用符や login_nameを含めることはできません。

SID = sid

ログインの再作成に使用されます。 Windows 認証ログインではなく、SQL Server 認証ログインにのみ適用されます。 新しい SQL Server 認証ログインの SID を指定します。 このオプションを使用しない場合、SQL Server によって SID が自動的に割り当てられます。 SID 構造体は、SQL Server のバージョンに依存します。 SQL Analytics の場合、これは、0x01060000000000640000000000000000 と、GUID を表す 16 バイトで構成される 32 バイト (binary(32) ) のリテラルです。 たとえば、「 SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7 」のように入力します。

解説

Login

CREATE LOGIN ステートメントはバッチ内の唯一のステートメントである必要があります。

sqlcmd などのツールを利用して Azure Synapse に接続する場合、<login>@<server> の表記法を使用して、接続文字列のログイン名に SQL Analytics サーバー名を追加する必要があります。 たとえば、ログインが login1 で、SQL Analytics サーバーの完全修飾名が servername.database.windows.net である場合、接続文字列の username パラメーターは login1@servername となる必要があります。 の合計の長さ、 username パラメーターには、128 文字まで login_name サーバー名の長さマイナス 127 文字に制限されます。 この例では、login_name が 10 文字であるため、servername には 117 文字までしか指定できません。

ログインを作成するには、 master データベースに接続されている必要があります。

SQL Server ルールを使用すると、sql Server 認証ログインを <loginname>@<servername> 形式で作成できます。 SQL Database server が myazureserver で、ログインが myemail@contoso.com である場合、myemail@contoso.com@myazureserver としてログインを指定する必要があります。

接続の認証に必要なログイン データおよびサーバーレベルのファイアウォール規則は、各データベースで一時的にキャッシュされます。 このキャッシュは定期的に更新されます。 認証キャッシュを強制的に更新し、データベースに最新バージョンのログイン テーブルがあることを確認するには、DBCC FLUSHAUTHCACHE を実行します。

ログインの詳細については、「データベースとログインの管理」を参照してください。

アクセス許可

新しいログインを作成できるのは、サーバー レベルのプリンシパル ログイン (プロビジョニング プロセスによって作成) またはmaster データベースのloginmanager データベース ロールのメンバーだけです。 詳細については、サーバー レベルのロールALTER SERVER ROLE に関するページを参照してください。

ログインを作成した後

ログインを作成すると、そのログインで Azure Synapse に接続できますが、public ロールに付与される権限しか与えられません。 次の操作のいくつかを実行することを検討してください。

  • データベースに接続するには、ログイン用のデータベース ユーザーを作成する必要があります。 詳細については、「CREATE USER」を参照してください。

  • データベース内のユーザーにアクセス許可を付与するには、 ALTER SERVER ROLE ... ADD MEMBER ステートメントを使用して、組み込みのデータベース ロールまたはカスタム ロールのいずれかにユーザーを追加するか、 GRANT ステートメントを使用して直接ユーザーにアクセス許可を付与します。 詳細については、管理者以外のロール追加のサーバー レベルの管理者ロールALTER SERVER ROLE、および GRANT ステートメントに関するページを参照してください。

  • サーバー全体のアクセス許可を付与するには、 master データベースにデータベース ユーザーを作成し、 ALTER SERVER ROLE ... ADD MEMBER ステートメントを使用して、管理サーバー ロールのいずれかにユーザーを追加します。 詳細については、サーバー レベルのロールALTER SERVER ROLE、およびサーバー ロールに関するページを参照してください。

  • 新しいログインまたはログインを含むロールにサーバー レベルの権限を許可するには、GRANT ステートメントを使用します。 詳細については、「GRANT」を参照してください。

A. パスワードを使用してログインを作成する

次の例では、特定のユーザーのログインを作成し、パスワードを割り当てます。

CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
GO

B. SID からログインを作成する

次の例では、まず、SQL Server 認証のログインを作成し、ログインの SID を調べています。

CREATE LOGIN TestLogin WITH PASSWORD = 'SuperSecret52&&';

SELECT name, sid FROM sys.sql_logins WHERE name = 'TestLogin';
GO

このクエリは、SID として 0x241C11948AEEB749B0D22646DB1A19F2 を返します。 皆さんがクエリを実行すると、これとは異なる値が返されます。 次のステートメントは、ログインを削除し、ログインを作成し直します。 前のクエリの SID を使用します。

DROP LOGIN TestLogin;
GO

CREATE LOGIN TestLogin
WITH PASSWORD = 'SuperSecret52&&', SID = 0x241C11948AEEB749B0D22646DB1A19F2;

SELECT * FROM sys.sql_logins WHERE name = 'TestLogin';
GO

* Analytics
Platform System (PDW) *

 

分析プラットフォーム システム

構文

-- Syntax for Analytics Platform System
CREATE LOGIN loginName { WITH <option_list1> | FROM WINDOWS }

<option_list1> ::=
    PASSWORD = { 'password' } [ MUST_CHANGE ]
    [ , <option_list> [ ,... ] ]

<option_list> ::=
      CHECK_EXPIRATION = { ON | OFF}
    | CHECK_POLICY = { ON | OFF}

引数

login_name

作成するログインの名前を指定します。 ログインには 4 つの種類があります。SQL Server ログイン、Windows ログイン、証明書マッピング ログイン、非対称キー マッピング ログインです。 Windows ドメイン アカウントからマップされたログインを作成する場合は、Windows 2000 より前のユーザー ログオン名を [<domainName>\<login_name>] の形式で使用する必要があります。 login_name@DomainName形式で UPN を使用することはできません。 例については、この記事の後半の例 D を参照してください。 認証ログインは sysname 型であり、 Identifiers の規則に準拠している必要があり '\' を含めることはできません。 Windows ログインには " \ " を含めることができます。 Active Directory ユーザーに基づくログインは、21 文字未満の名前に制限されます。

PASSWORD ='password'

SQL Server ログインにのみ適用されます。 作成するログインのパスワードを指定します。 強力なパスワードを使用してください。 詳細については、「強力なパスワード」と「パスワード ポリシー」を参照してください。 SQL Server 2012 (11.x) 以降では、保存されたパスワード情報は salt 化パスワードの SHA-512 を使用して計算されます。

パスワードでは大文字と小文字が区別されます。 パスワードは常に 8 文字以上にする必要があり、128 文字を超えることはできません。 パスワードには、a-z、A-Z、0-9 およびほとんどの英数字以外の文字を含めることができます。 パスワードには、単一引用符や login_nameを含めることはできません。

MUST_CHANGE

SQL Server ログインにのみ適用されます。 このオプションが含まれている場合、SQL Server では、新しいログインが最初に使用されたときに、ユーザーに新しいパスワードの入力が求められます。

CHECK_EXPIRATION = { ON | OFF }

SQL Server ログインにのみ適用されます。 このログインに、パスワードの有効期限ポリシーを適用するかどうかを指定します。 既定値は OFF です。

CHECK_POLICY = { ON |OFF }

SQL Server ログインにのみ適用されます。 SQL Server を実行しているコンピューターの Windows パスワード ポリシーをこのログインに適用するかどうかを指定します。 既定値は ON です。

Windows のポリシーで強力なパスワードが求められる場合は、次の 4 つの特性のうちの少なくとも 3 つをパスワードに含める必要があります。

  • 大文字 (A-Z)。
  • 小文字 (a-z)。
  • 数字 (0-9)。
  • 空白、_、@、*、^、%、!、$、#、> などの英数字以外の文字の 1 つ。

WINDOWS

ログインを Windows ログインにマップするよう指定します。

解説

  • パスワードでは大文字と小文字が区別されます。
  • MUST_CHANGE が指定された場合、CHECK_EXPIRATION および CHECK_POLICY は ON に設定されなければなりません。 ON に設定しない場合、ステートメントは失敗します。
  • CHECK_POLICY = OFF と CHECK_EXPIRATION = ON の組み合わせはサポートされていません。
  • CHECK_POLICY を OFF に設定すると、lockout_time はリセットされ、CHECK_EXPIRATION は OFF に設定されます。

重要

CHECK_EXPIRATIONとCHECK_POLICYは、Windows Server 2003 以降のバージョンでのみ適用されます。 詳細については、「 Password Policy」をご参照ください。

アクセス許可

ログインを作成できるのは、サーバーに対する ALTER ANY LOGIN 権限、または securityadmin 固定サーバー ロールのメンバーシップを持つユーザーのみとなります。 詳細については、サーバー レベルのロールALTER SERVER ROLE に関するページを参照してください。

ログインを作成した後

ログインを作成すると、そのログインで Azure Synapse Analytics に接続できますが、public ロールに付与される権限しか与えられません。 次の操作のいくつかを実行することを検討してください。

  • データベースに接続するには、ログイン用のデータベース ユーザーを作成する必要があります。 詳細については、「CREATE USER」を参照してください。
  • CREATE SERVER ROLE を使用して、ユーザー定義サーバー ロールを作成します。 ALTER SERVER ROLE ... ADD MEMBERを使用して、ユーザー定義サーバー ロールに新しいログインを追加します。 詳細については、CREATE SERVER ROLEALTER SERVER ROLE に関するページを参照してください。
  • sp_addsrvrolememberを使用して、固定サーバー ロールにログインを追加します。 詳細については、「サーバー レベルのロール」と「sp_addsrvrolemember」を参照してください。
  • 新しいログインまたはログインを含むロールにサーバー レベルの権限を許可するには、GRANT ステートメントを使用します。 詳細については、「GRANT」を参照してください。

G. パスワードを使用して SQL Server 認証ログインを作成する

次の例では、パスワード A2c3456 のログイン Mary7を作成します。

CREATE LOGIN Mary7 WITH PASSWORD = 'A2c3456$#' ;

H. オプションの使用

次の例では、ログイン Mary8 をパスワードおよびいくつかのオプションの引数と共に作成します。

CREATE LOGIN Mary8 WITH PASSWORD = 'A2c3456$#' MUST_CHANGE,
CHECK_EXPIRATION = ON,
CHECK_POLICY = ON;

I. Windows ドメイン アカウントからログインを作成する

次の例では、Contoso ドメイン内の Mary という名前の Windows ドメイン アカウントからログインを作成します。

CREATE LOGIN [Contoso\Mary] FROM WINDOWS;
GO