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 = 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 ROLE と ALTER 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
」のように入力します。
解説
- パスワードでは大文字と小文字が区別されます。
- スクリプトでログインを転送する場合は、「SQL Server 2005 のインスタンス間でログインおよびパスワードを転送する方法」を参照してください。
- ログインを作成すると、自動的に新しいログインが有効になり、ログインにサーバー レベルの CONNECT SQL 権限が与えられます。
- アクセスを許可するにはサーバーの認証モードがログインの種類に一致する必要があります。
- 権限システムの設計の詳細については、「 データベース エンジンの権限の概要」を参照してください。
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」をご参照ください。
- スクリプトでログインを転送する場合は、「SQL Server 2005 のインスタンス間でログインおよびパスワードを転送する方法」を参照してください。
- ログインを作成すると、自動的に新しいログインが有効になり、ログインにサーバー レベルの CONNECT SQL 権限が与えられます。
- 権限システムの設計の詳細については、「 データベース エンジンの権限の概要」を参照してください。
アクセス許可
ログインを作成できるのは、サーバーに対する ALTER ANY LOGIN 権限、または securityadmin 固定サーバー ロールのメンバーシップを持つユーザーのみとなります。 詳細については、サーバー レベルのロールと ALTER SERVER ROLE に関するページを参照してください。
ログインを作成した後
ログインを作成すると、そのログインで Azure Synapse Analytics に接続できますが、public ロールに付与される権限しか与えられません。 次の操作のいくつかを実行することを検討してください。
- データベースに接続するには、ログイン用のデータベース ユーザーを作成する必要があります。 詳細については、「CREATE USER」を参照してください。
- CREATE SERVER ROLE を使用して、ユーザー定義サーバー ロールを作成します。
ALTER SERVER ROLE ... ADD MEMBER
を使用して、ユーザー定義サーバー ロールに新しいログインを追加します。 詳細については、CREATE SERVER ROLE と ALTER 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