CREATE LOGIN (Transact-SQL)
为 SQL Server、Azure SQL 数据库、Azure SQL 托管实例、Azure Synapse Analytics 或 Analytics Platform System 数据库创建登录名。 为特定版本的语法、参数、备注、权限和示例选择以下选项卡之一。
CREATE LOGIN 参与事务。 如果在事务内执行 CREATE LOGIN 并且该事务回滚,则登录名创建也会回滚。 如果在事务内执行,则在事务提交之前无法使用创建的登录名。
注意
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 登录名、证书映射登录名和非对称密钥映射登录名。
创建从 Windows 域帐户映射的登录名时,必须使用 [<domainName>\<login_name>] 格式的登录名。 UPN 不能采用 login_name@DomainName 格式。 有关示例,请参阅 本文后面的示例 E 。 身份验证登录是类型 sysname,必须符合标识符的规则,并且不能包含反斜杠()。 Windows 登录名可以包含“\”。 基于 Active Directory 用户的登录名限制为少于 21 个字符的名称。
使用 FROM EXTERNAL PROVIDER 子句时,登录名必须与 SQL 实例启用 Arc 的同一租户中现有Microsoft Entra 主体的显示名称匹配。 Microsoft Entra 用户、组和应用程序可用于创建登录名。
PASSWORD ='password'
仅适用于 SQL Server 登录。 指定正在创建的登录名的密码。 请使用强密码。 有关详细信息,请参阅强密码和密码策略。 从 SQL Server 2012 (11.x) 开始,存储的密码信息使用 SHA-512 加盐密码进行计算。
密码是区分大小写的。 密码应始终长度至少为 8 个字符,不能超过 128 个字符。 密码可以包含 a-z、A-Z、0-9 和大多数非字母数字字符。 密码不能包含单引号或 login_name。
PASSWORD = hashed_password
仅适用于 HASHED 关键字。 指定要创建的登录名的密码的哈希值。
HASHED
仅适用于 SQL Server 登录。 指定在 PASSWORD 参数后输入的密码已经过哈希运算。 如果未选择此选项,则输入为密码的字符串将经过哈希处理,然后再将其存储在数据库中。 此选项应仅用于在服务器之间迁移数据库。 不要使用 HASHED 选项创建新的登录名。 HASHED 选项不能与 SQL 7 或更早版本创建的哈希一起使用。
MUST_CHANGE
仅适用于 SQL Server 登录。 如果包括此选项,则 SQL Server 将在首次使用新登录时提示用户输入新密码。
CREDENTIAL =credential_name
将映射到新 SQL Server 登录的凭据名称。 该凭据必须已存在于服务器中。 当前此选项只将凭据链接到登录名。 凭据无法映射到系统管理员(sa)登录名。
SID = sid
用于重新创建登录名。 仅适用于 SQL Server 身份验证登录,不适用于 Windows 身份验证登录。 指定新 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 策略要求强密码,密码必须至少包含以下四个特点中的三个:
- 大写字符 (A-Z)。
- 小写字符 (a-z)。
- 数字 (0-9)。
- 非字母数字字符之一,例如空格、_、@、*、^、%、!、$、#或 &。
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
。 否则,该语句将失败。 - 不支持组合
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 和 SQL Server 2008 的实例之间传输登录名和密码。
- 自动创建登录名将启用新的登录名,并授予它服务器级 CONNECT SQL 权限。
- 服务器的身份验证模式必须匹配登录名类型才能允许访问。
- 有关设计权限系统的信息,请参阅 Getting Started with Database Engine Permissions。
权限
- 只有具有针对服务器的 ALTER ANY LOGIN 权限或 securityadmin 固定服务器角色的成员身份的用户才可创建登录 。 有关详细信息,请参阅服务器级别角色和 ALTER SERVER ROLE。
- 如果使用 CREDENTIAL 选项,则还需要对此服务器的 ALTER ANY CREDENTIAL 权限 。
SQL Server 2022 及更高版本的权限
要求对服务器具有 CREATE LOGIN 权限或 ##MS_LoginManager## 固定服务器角色的成员身份。
创建登录后
创建登录后,该登录可以连接到 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
注意
当 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
我的查询返回 0x241C11948AEEB749B0D22646DB1A19F2 作为 SID。 你的查询将返回不同的值。 以下语句将删除登录名,然后重新创建登录名。 使用前面的查询中的 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 数据库 *
SQL 数据库
有关连接到Azure SQL 数据库和授权的详细信息,请参阅:
语法
-- 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
注意
Microsoft Entra 服务器主体(登录名)目前以公共预览版提供Azure SQL 数据库。
与 FROM EXTERNAL PROVIDER 子句一起使用时,登录名指定 Microsoft Entra 主体,它可以是 Microsoft Entra 用户、组或应用程序。 否则,登录名表示所创建 SQL 登录名的名称。
Microsoft 2048 Microsoft Entra 安全组的成员的 Entra 用户和服务主体不支持在 SQL 数据库、SQL 托管实例 或 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 登录名和具有非统一显示名称的用户。
注意
如果服务主体显示名称不是重复的名称,则应使用默认的 CREATE LOGIN
或 CREATE USER
语句。 扩展 WITH OBJECT_ID
是实现的故障排除修复项,用于非统一服务主体。 服务主体唯一时,不建议使用它。 将 WITH OBJECT_ID
扩展用于服务主体而不添加后缀将成功运行,但是为哪个服务主体创建登录名或用户并不明显。 建议使用后缀创建别名,以唯一标识服务主体。 SQL Server 不支持 WITH OBJECT_ID
扩展。
PASSWORD ='password'
指定正在创建的 SQL 登录的密码。 请使用强密码。 有关详细信息,请参阅强密码和密码策略。 从 SQL Server 2012 (11.x) 开始,存储的密码信息使用 SHA-512 加盐密码进行计算。
密码是区分大小写的。 密码应始终长度至少为 8 个字符,不能超过 128 个字符。 密码可以包含 a-z、A-Z、0-9 和大多数非字母数字字符。 密码不能包含单引号或 login_name。
SID = sid
用于重新创建登录名。 仅适用于 SQL Server 身份验证登录,不适用于 Windows 身份验证登录。 指定新 SQL Server 身份验证登录的 SID。 如果未使用此选项,SQL Server 会自动分配 SID。 SID 结构取决于 SQL Server 版本。 对于 SQL 数据库,这是包含 0x01060000000000640000000000000000
的 32 字节 (binary(32)) 文本以及表示 GUID 的 16 个字节。 例如,SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7
。
备注
- 密码是区分大小写的。
- 自动创建登录名将启用新的登录名,并授予它服务器级 CONNECT SQL 权限。
重要
有关在 Azure SQL 数据库中使用登录名和用户的信息,请参阅在 Azure SQL 数据库中管理登录名。
登录
SQL 数据库登录名
CREATE LOGIN 语句必须是批中的唯一语句。
在连接到 SQL 数据库的一些方法(如 sqlcmd)中,必须使用 <login>@<server> 符号将 SQL 数据库服务器名称追加到连接字符串中的登录名之后。 例如,如果登录为 login1
,SQL 数据库服务器的完全限定名称是 servername.database.windows.net
,则连接字符串的 username 参数应是 login1@servername
。 由于 username 参数的总长度为 128 个字符,因此,login_name 被限定为 127 个字符减去服务器名称的长度 。 在示例中,login_name
只能包含 117 个字符,因为 servername
包含 10 个字符。
在SQL 数据库中,必须使用适当的权限连接到master
数据库才能创建登录名。 有关详细信息,请参阅创建其他登录名和具有管理权限的用户。
SQL Server 规则允许以 loginname>@<servername> 格式<创建 SQL Server 身份验证登录名。 如果你的 SQL 数据库服务器是 myazureserver 并且登录名是 myemail@contoso.com,则必须提供 myemail@contoso.com@myazureserver 格式的登录名。
在 SQL 数据库中,对连接和服务器级别的防火墙规则进行身份验证时所需的登录数据会暂时缓存在每个数据库中。 此缓存定期刷新。 若要强制刷新身份验证缓存并确保数据库具有最新版本的登录表,请执行 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
我的查询返回 0x241C11948AEEB749B0D22646DB1A19F2 作为 SID。 你的查询将返回不同的值。 以下语句将删除登录名,然后重新创建登录名。 使用前面的查询中的 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 域中contoso
存在的用户的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
托管实例 *
Azure SQL 托管实例
语法
-- 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 登录名的名称。
不支持Microsoft属于 2048 Microsoft Entra 安全组的成员的 Entra 用户和服务主体登录到 Azure SQL 数据库、Azure SQL 托管实例 或 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 登录名和具有非统一显示名称的用户。
注意
如果服务主体显示名称不是重复的名称,则应使用默认的 CREATE LOGIN
或 CREATE USER
语句。 WITH OBJECT_ID
扩展为公共预览版,并且是一个故障排除修复项,用于非唯一服务主体。 不需要将其与唯一的服务主体一起使用。 将 WITH OBJECT_ID
扩展用于服务主体而不添加后缀将成功运行,但是为哪个服务主体创建登录名或用户并不明显。 建议使用后缀创建别名,以唯一标识服务主体。 SQL Server 不支持 WITH OBJECT_ID
扩展。
PASSWORD = 'password'
指定正在创建的 SQL 登录的密码。 请使用强密码。 有关详细信息,请参阅强密码和密码策略。 从 SQL Server 2012 (11.x) 开始,存储的密码信息使用 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 数据库,这是包含 0x01060000000000640000000000000000
的 32 字节 (binary(32)) 文本以及表示 GUID 的 16 个字节。 例如,SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7
。
注解
该
FROM EXTERNAL PROVIDER
语法创建映射到 Microsoft Entra 帐户的服务器级主体指定时间
FROM EXTERNAL PROVIDER
:login_name必须表示当前Azure SQL 托管实例在 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
,类型列值设置为type_desc
E
EXTERNAL_LOGIN,用于映射到 Microsoft Entra 用户的登录名,或者为映射到 Microsoft Entra 组的登录名设置为X
type_desc
EXTERNAL_GROUP类型列值。有关用于传输登录名的脚本,请参阅如何在 SQL Server 2005 和 SQL Server 2008 的实例之间传输登录名和密码。
自动创建登录名将启用新的登录名,并授予它服务器级 CONNECT SQL 权限。
重要
有关在 Azure SQL 数据库中使用登录名和用户的信息,请参阅在 Azure SQL 数据库中管理登录名。
登录名和权限
只有服务器级主体登录名(由预配过程创建)或数据库中或sysadmin
数据库角色master
的成员securityadmin
才能创建新的登录名。 有关详细信息,请参阅服务器级别角色和 ALTER SERVER ROLE。
默认情况下,授予新创建的Microsoft Entra 登录 master
名的标准权限为: CONNECT SQL 和 VIEW ANY DATABASE。
SQL 托管实例登录名
必须具有对服务器的 ALTER ANY LOGIN 权限或固定服务器角色(
securityadmin
和sysadmin
中的一个)的成员身份。 只有对服务器具有 ALTER ANY LOGIN 权限的 Microsoft Entra 帐户或其中一个角色的成员身份才能执行 create 命令。如果登录名是 SQL 主体,则只有属于角色的
sysadmin
登录名才能使用 create 命令为 Microsoft Entra 帐户创建登录名。必须是与Azure SQL 托管实例相同的 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 登录名设置为数据库所有者。
支持使用其他Microsoft Entra 主体模拟 Microsoft Entra 登录名,例如 EXECUTE AS 子句。
只有作为角色一
sysadmin
部分的服务器主体(登录名)才能执行以下针对Microsoft Entra 主体的操作:- EXECUTE AS USER
- EXECUTE AS LOGIN
从另一个Microsoft Entra 目录导入的外部(来宾)用户不能直接配置为使用 Azure 门户 的 SQL 托管实例 Microsoft Entra 管理员。 而是将外部用户加入 可分配角色的组 ,并将该组配置为实例管理员。 可使用 PowerShell 或 Azure CLI 将各来宾用户设置为实例管理员。
登录名不会复制到故障转移组中的辅助实例。 登录名保存在
master
数据库中,这是系统数据库,因此不会异地复制。 若要解决此问题,必须在辅助实例上使用相同的 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
我的查询返回 0x241C11948AEEB749B0D22646DB1A19F2 作为 SID。 你的查询将返回不同的值。 以下语句将删除登录名,然后重新创建登录名。 使用前面的查询中的 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 ]
参数
注意
Microsoft Entra 服务器主体(登录名) 目前为预览版。
与 FROM EXTERNAL PROVIDER 子句一起使用时,登录名指定 Microsoft Entra 主体,它可以是 Microsoft Entra 用户、组或应用程序。 否则,登录名表示所创建 SQL 登录名的名称。
Microsoft属于 2048 Microsoft Entra 安全组的成员的用户和服务主体(Microsoft Entra 应用程序)不支持在 SQL 数据库、SQL 托管实例 或 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) 开始,存储的密码信息使用 SHA-512 加盐密码进行计算。
密码是区分大小写的。 密码应始终长度至少为 8 个字符,不能超过 128 个字符。 密码可以包含 a-z、A-Z、0-9 和大多数非字母数字字符。 密码不能包含单引号或 login_name。
SID = sid
用于重新创建登录名。 仅适用于 SQL Server 身份验证登录,不适用于 Windows 身份验证登录。 指定新 SQL Server 身份验证登录的 SID。 如果未使用此选项,SQL Server 会自动分配 SID。 SID 结构取决于 SQL Server 版本。 对于 SQL Analytics,这是包含 0x01060000000000640000000000000000
的 32 字节 (binary(32)) 文本以及表示 GUID 的 16 个字节。 例如,SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7
。
备注
- 密码是区分大小写的。
- 有关用于传输登录名的脚本,请参阅如何在 SQL Server 2005 和 SQL Server 2008 的实例之间传输登录名和密码。
- 自动创建登录名将启用新的登录名,并授予它服务器级 CONNECT SQL 权限。
- 服务器的身份验证模式必须匹配登录名类型才能允许访问。
- 有关设计权限系统的信息,请参阅 Getting Started with Database Engine Permissions。
登录名
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
只能包含 117 个字符,因为 servername
包含 10 个字符。
若要创建登录名,必须连接到 master
数据库。
SQL Server 规则允许以 loginname>@<servername> 格式<创建 SQL Server 身份验证登录名。 如果你的 SQL 数据库服务器是 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
我的查询返回 0x241C11948AEEB749B0D22646DB1A19F2 作为 SID。 你的查询将返回不同的值。 以下语句将删除登录名,然后重新创建登录名。 使用前面的查询中的 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
指定创建的登录名。 有四种类型的登录名:SQL Server 登录名、Windows 登录名、证书映射登录名以及非对称密钥映射登录名。 创建从 Windows 域帐户映射的登录名时,必须使用采用 [<domainName>\<login_name>] 格式的 Windows 2000 用户登录名。 不能login_name@DomainName格式使用 UPN。 有关示例,请参阅本文后面的示例 D。 身份验证登录名是类型 sysname,必须符合标识符的规则,并且不能包含“\”。 Windows 登录名可以包含“\”。 基于 Active Directory 用户的登录名的名称限制为少于 21 个字符。
PASSWORD ='password'
仅适用于 SQL Server 登录。 指定正在创建的登录名的密码。 请使用强密码。 有关详细信息,请参阅强密码和密码策略。 从 SQL Server 2012 (11.x) 开始,存储的密码信息使用 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 策略要求强密码,密码必须至少包含以下四个特点中的三个:
- 大写字符 (A-Z)。
- 小写字符 (a-z)。
- 数字 (0-9)。
- 非字母数字字符之一,例如空格、_、@、*、^、%、!、$、#或 &。
WINDOWS
指定将登录名映射到 Windows 登录名。
备注
- 密码是区分大小写的。
- 如果指定 MUST_CHANGE,则 CHECK_EXPIRATION 和 CHECK_POLICY 必须设置为 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 和 SQL Server 2008 的实例之间传输登录名和密码。
- 自动创建登录名将启用新的登录名,并授予它服务器级 CONNECT SQL 权限。
- 有关设计权限系统的信息,请参阅 Getting Started with Database Engine Permissions。
权限
只有具有针对服务器的 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
域中使用 Windows 域帐户创建名为 Mary
的登录名。
CREATE LOGIN [Contoso\Mary] FROM WINDOWS;
GO