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 doメイン アカウントからマップされたログインを作成する場合は、ログオン名を [<doメインName>\<login_name>] の形式で使用する必要があります。 login_name@DomainName 形式の UPN は使用できません。 例については、この記事で後述する E の例を参照してください。 認証ログインは sysnameであり、識別子の規則に準拠している必要があり、バックスラッシュ () を含めることはできません。 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 ログインにマップする資格情報の名前。 この資格情報は、サーバー内に既に存在している必要があります。 現在このオプションは、資格情報をログインに関連付けるだけです。 資格情報を System 管理istrator (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 = "言語"

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

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 以降で使用できます。 詳細については、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 = OFF と CHECK_EXPIRATION = ON の組み合わせはサポートされていません。
  • CHECK_POLICY を OFF に設定すると、lockout_time はリセットされ、CHECK_EXPIRATION は OFF に設定されます。

重要

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

注意

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 statemnt 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

構文

-- 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 場合、microsoft Entra の表示名と一致する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 を使用して計算されます。

パスワードでは大文字と小文字が区別されます。 パスワードは常に 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 データベース ログイン

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

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

アクセス許可

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

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 アカウントを使用してログインを作成する

この例では、Microsoft Entra doメイン にcontoso存在するユーザーbob@contoso.comの資格情報を使用して、Azure SQL 論理サーバーにログインを作成します。

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

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

Microsoft Entra サービス プリンシパルまたはグループのオブジェクト ID を指定することで、login_nameのエイリアスを作成できます。

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID='4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 

サービス プリンシパルのオブジェクト 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 に設定され、type_descは Microsoft Entra ユーザーにマップされたログインの場合はEXTERNAL_LOGINに設定され、列の値は X設定され、type_desc値は Microsoft Entra グループにマップされたログインに対してEXTERNAL_GROUP設定されます。

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

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

重要

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

ログインとアクセス許可

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

既定では、マスターで新しく作成された Microsoft Entra ログインに付与される標準のアクセス許可は、CONNECT SQLVIEW ANY DATABA ですStandard Edition

SQL Managed Instance ログイン

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

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

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

ログインを作成した後

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

  • Microsoft Entra ログインからユーザーを作成するには、「CREATE U Standard Edition R」を参照してください

  • データベースのユーザーに権限を付与するには、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 ログインの偽装がサポートされています。

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

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

  • ログインは、フェールオーバー グループ内のセカンダリ インスタンスにレプリケートされません。 ログインはマスター データベース (システム データベース) に保存されるため、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 U Standard Edition R ステートメントを使用します。

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 ルールを使用すると、<loginname>@<servername> 形式の SQL Server 認証ログインを作成できます。 SQL Database server が myazureserver で、ログインが myemail@live.com である場合、myemail@live.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 doメイン アカウントからマップされたログインを作成する場合は、Windows 2000 より前のユーザー ログオン名を [<doメインName>\<login_name>] の形式で使用する必要があります。 UPN を login_name@DoメインName 形式で使用することはできません。 例については、この記事の後半の例 D を参照してください。 認証ログインは sysnameであり、識別子の規則に準拠している必要があり、'' を\含めることはできません。 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