CREATE LOGIN (Transact-SQL)
为 数据库引擎 和 SQL Server 创建Azure SQL Database登录名。
适用范围:SQL Server(SQL Server 2008 到当前版本) Azure SQL Database。 |
语法
-- SQL Server Syntax
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>[ ,... ] ]
| CERTIFICATE certname
| ASYMMETRIC KEY asym_key_name<windows_options> ::=
DEFAULT_DATABASE =database
| DEFAULT_LANGUAGE =language
-- Syntax for Windows Azure SQL Database
CREATE LOGIN login_name
{ WITH <option_list3> }
<option_list3> ::=
PASSWORD = { 'password' }
[ SID = sid ]
参数
login_name
指定创建的登录名。有四种类型的登录名:SQL Server 登录名、Windows 登录名、证书映射登录名和非对称密钥映射登录名。在创建从 Windows 域帐户映射的登录名时,必须以 [<domainName>\<login_name>] 格式使用 Windows 2000 之前的用户登录名。UPN 不能采用 login_name@DomainName 格式。有关示例,请参阅本主题后面的示例 D。SQL Server 身份验证登录名的类型为 sysname,必须符合标识符的规则,且不能包含“\”。Windows 登录名可以包含“\”。PASSWORD ='password'
仅适用于 SQL Server 登录名。指定正在创建的登录名的密码。应使用强密码。有关详细信息,请参阅强密码和密码策略。密码是区分大小写的。密码应始终至少包含 8 个字符,并且不能超过 128 个字符。密码可以包含 a-z、A-Z、0-9 和大多数非字母数字字符。密码不能包含单引号或 login_name。
PASSWORD **=**hashed_password
适用范围:SQL Server 2008 到 SQL Server 2014。
仅适用于 HASHED 关键字。指定要创建的登录名的密码的哈希值。
HASHED
适用范围:SQL Server 2008 到 SQL Server 2014。
仅适用于 SQL Server 登录名。指定在 PASSWORD 参数后输入的密码已经过哈希运算。 如果未选择此选项,则在将作为密码输入的字符串存储到数据库中之前,对其进行哈希运算。此选项应仅用于在服务器之间迁移数据库。切勿使用 HASHED 选项创建新的登录名。HASHED 选项不能用于 SQL Server 7 或更早版本创建的哈希。
MUST_CHANGE
适用范围:SQL Server 2008 到 SQL Server 2014。
仅适用于 SQL Server 登录名。如果包括此选项,则 SQL Server 将在首次使用新登录名时提示用户输入新密码。
CREDENTIAL **=**credential_name
适用范围:SQL Server 2008 到 SQL Server 2014。
将映射到新 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。
SQL Database 登录名 SID:对 Azure SQL Database 有效的 SID 结构。通常,这是包含 0x01060000000000640000000000000000 的 32 字节 (binary(32)) 文本以及表示 GUID 的 16 个字节。例如 SID = 0x0106000000000064000000000000000014585E90117152449347750164BA00A7。
DEFAULT_DATABASE **=**database
适用范围:SQL Server 2008 到 SQL Server 2014。
指定将指派给登录名的默认数据库。如果未包括此选项,则默认数据库将设置为 master。
DEFAULT_LANGUAGE **=**language
适用范围:SQL Server 2008 到 SQL Server 2014。
指定将指派给登录名的默认语言。如果未包括此选项,则默认语言将设置为服务器的当前默认语言。即使将来服务器的默认语言发生更改,登录名的默认语言也仍保持不变。
CHECK_EXPIRATION = { ON | OFF }
适用范围:SQL Server 2008 到 SQL Server 2014。
仅适用于 SQL Server 登录名。指定是否应对此登录帐户强制实施密码过期策略。默认值为 OFF。
CHECK_POLICY = { ON | OFF }
适用范围:SQL Server 2008 到 SQL Server 2014。
仅适用于 SQL Server 登录名。指定应对此登录名强制实施运行 SQL Server 的计算机的 Windows 密码策略。默认值为 ON。
如果 Windows 策略要求强密码,密码必须至少包含以下四个特点中的三个:
大写字符 (A-Z)。
小写字符 (a-z)。
数字 (0-9)。
一个非字母数字字符,如空格、_、@、*、^、%、!、$、# 或 &。
WINDOWS
适用范围:SQL Server 2008 到 SQL Server 2014。
指定将登录名映射到 Windows 登录名。
证书 certname
适用范围:SQL Server 2008 到 SQL Server 2014。
指定将与此登录名关联的证书名称。此证书必须已存在于 master 数据库中。
ASYMMETRIC KEY asym_key_name
适用范围:SQL Server 2008 到 SQL Server 2014。
指定将与此登录名关联的非对称密钥的名称。此密钥必须已存在于 master 数据库中。
备注
密码是区分大小写的。
只有创建 SQL Server 登录名时,才支持对密码预先进行哈希运算。
如果同时指定了 HASHED 和 CHECK_POLICY = ON 参数,在下次更改密码之前,将不检查密码的复杂性。
如果指定 MUST_CHANGE,则 CHECK_EXPIRATION 和 CHECK_POLICY 必须设置为 ON。否则,该语句将失败。
不支持 CHECK_POLICY = OFF 和 CHECK_EXPIRATION = ON 的组合。
如果 CHECK_POLICY 设置为 OFF,将对 lockout_time 进行重置,并将 CHECK_EXPIRATION 设置为 OFF。
重要
只有在 Windows Server 2003 及更高版本上才会强制执行 CHECK_EXPIRATION 和 CHECK_POLICY。有关详细信息,请参阅密码策略。
从证书或非对称密钥创建的登录名仅用于代码签名。不能用于连接到 SQL Server。仅当 master 中已存在证书或非对称密钥时,才能从证书或非对称密钥创建登录名。
有关用于传输登录名的脚本,请参阅如何在 SQL Server 2005 和 SQL Server 2008 的实例之间传输登录名和密码。
自动创建登录名时,启用新的登录名并授予它服务器级 CONNECT SQL 权限。
Windows Azure SQL Database 登录名
在 SQL Database 中,CREATE LOGIN 语句必须是批处理中的唯一语句。
在 SQL Database 中,您必须连接到 master 数据库来创建登录名。
SQL Server 规则允许你创建 <loginname>@<servername> 格式的 SQL Server 身份验证登录名。如果你的 SQL Database 服务器是 myazureserver 且你的登录名是 myemail@live.com,则必须将你的登录名作为 myemail@live.com@myazureserver 提供。仅当你打算使用此凭据连接到一台服务器时,才使用此技术。当连接到 Azure SQL Database 时,某些较旧版本的 SQL 客户端库要求使用 <loginname>@<servername> 格式。
有关 SQL Database 登录名的详细信息,请参阅管理 Windows Azure SQL Database 中的数据库和登录名。
权限
在 SQL Server 中,需要对服务器的 ALTER ANY LOGIN 权限或 securityadmin 固定服务器角色的成员资格。
在 SQL Database 中,只有服务器级主体(由设置过程创建)或 master 数据库中的 loginmanager 数据库角色成员可以创建新登录名。
如果使用 CREDENTIAL 选项,还需要对服务器的 ALTER ANY CREDENTIAL 权限。
后续步骤
创建登录名后,登录名可以连接到数据库引擎或 SQL Database,但是只具有授予 public 角色的权限。考虑执行以下一些活动。
要连接到数据库,请创建登录名对应的数据库用户。有关详细信息,请参阅CREATE USER (Transact-SQL)。
使用 CREATE SERVER ROLE (Transact-SQL) 创建用户定义的服务器角色。使用 ALTER SERVER ROLE ...ADD MEMBER 将新的登录名添加到用户定义的服务器角色。有关详细信息,请参阅CREATE SERVER ROLE (Transact-SQL) 和ALTER SERVER ROLE (Transact-SQL)。
使用 sp_addsrvrolemember 将登录名添加到固定服务器角色。有关详细信息,请参阅服务器级别角色 和sp_addsrvrolemember (Transact-SQL)。
使用 GRANT 语句将服务器级权限授予新的登录名或包含该登录名的角色。有关详细信息,请参阅GRANT (Transact-SQL)。
示例
A.创建带密码的登录名
以下示例为特定用户创建登录名并分配密码。
CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
GO
B.创建带密码的登录名
以下示例为特定用户创建登录名并分配密码。MUST_CHANGE 选项要求用户在首次连接服务器时更改此密码。
适用范围:SQL Server 2008 到 SQL Server 2014。 |
CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>' MUST_CHANGE;
GO
C.创建映射到凭据的登录名
以下示例使用该用户为特定用户创建登录名。此登录名映射到凭据。
适用范围:SQL Server 2008 到 SQL Server 2014。 |
CREATE LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>',
CREDENTIAL = <credentialName>;
GO
D.从证书创建登录名
以下示例使用 master 中的证书为特定用户创建登录名。
适用范围:SQL Server 2008 到 SQL Server 2014。 |
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 到 SQL Server 2014。 |
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
请参阅
主体(数据库引擎)
密码策略
ALTER LOGIN (Transact-SQL)
DROP LOGIN (Transact-SQL)
EVENTDATA (Transact-SQL)
创建一个登录名