CREATE LOGIN (Transact-SQL)
创建新的 SQL Server 登录名。
语法
CREATE LOGIN loginName { 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
参数
loginName
指定创建的登录名。有四种类型的登录名:SQL Server 身份验证登录名、Windows 登录名、证书映射的登录名和非对称密钥映射的登录名。在创建从 Windows 域帐户映射的登录名时,必须以 [<域名>\<登录名>] 格式使用 Windows 2000 之前的用户登录名。UPN 不能采用“登录名@域名”格式。有关示例,请参阅本主题后面的示例 D。SQL Server 身份验证登录名属于 sysname 类型,必须符合标识符的规则,不能包含“\”。Windows 登录名可以包含“\”。PASSWORD ='password'
仅适用于 SQL Server 登录名。指定正在创建的登录名的密码。应使用强密码。有关详细信息,请参阅 强密码。PASSWORD **=**hashed_password
仅适用于 HASHED 关键字。指定要创建的登录名的密码的哈希值。HASHED
仅适用于 SQL Server 登录名。指定在 PASSWORD 参数后输入的密码已经过哈希运算。如果未选择此选项,则在将作为密码输入的字符串存储到数据库中之前,对其进行哈希运算。此选项应仅用于在服务器之间迁移数据库。切勿使用 HASHED 选项创建新的登录名。MUST_CHANGE
仅适用于 SQL Server 登录名。如果包括此选项,则 SQL Server 将在首次使用新登录名时提示用户输入新密码。CREDENTIAL **=**credential_name
将映射到新 SQL Server 登录名的凭据的名称。该凭据必须已存在于服务器中。当前此选项只将凭据链接到登录名。凭据不能映射到 sa 登录名。SID = sid
仅适用于 SQL Server 登录名。指定新 SQL Server 登录名的 GUID。如果未选择此选项,则 SQL Server 自动指派 GUID。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
指定将登录名映射到 Windows 登录名。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。
重要提示 |
---|
只有在 Windows Server 2003 及更高版本上才会强制执行 CHECK_EXPIRATION 和 CHECK_POLICY。有关详细信息,请参阅密码策略。 |
从证书或非对称密钥创建的登录名仅用于代码签名。不能用于连接到 SQL Server。仅当 master 中已存在证书或非对称密钥时,才能从证书或非对称密钥创建登录名。
有关用于传输登录名的脚本,请参阅 How to transfer the logins and the passwords between instances of SQL Server 2005 and SQL Server 2008(如何在 SQL Server 2005 和 SQL Server 2008 的实例之间传输登录名和密码)。
权限
需要对服务器的 ALTER ANY LOGIN 权限或 securityadmin 固定服务器角色的成员资格。
如果使用 CREDENTIAL 选项,则还需要对此服务器的 ALTER ANY CREDENTIAL 权限。
示例
A. 创建带密码的登录名
下例为特定用户 ID 创建登录名并分配密码。MUST_CHANGE 选项要求用户在首次连接服务器时更改此密码。
CREATE LOGIN <loginName> WITH PASSWORD = '<enterStrongPasswordHere>' MUST_CHANGE;
GO
B. 创建映射到凭据的登录名
下例使用用户 ID 为特定用户创建登录名。此登录名映射到凭据。
CREATE LOGIN <loginName> WITH PASSWORD = '<enterStrongPasswordHere>',
CREDENTIAL = <credentialName>;
GO
C. 从证书创建登录名
下例用 master 中的证书为特定用户 ID 创建登录名。
USE MASTER;
CREATE CERTIFICATE <certificateName>
WITH SUBJECT = '<loginName> certificate in master database',
EXPIRY_DATE = '12/05/2025';
GO
CREATE LOGIN <loginName> FROM CERTIFICATE <certificateName>;
GO
D. 从 Windows 域帐户创建登录名
下例用 Windows 域帐户创建一个登录名。
CREATE LOGIN [<domainName>\<loginName>] FROM WINDOWS;
GO