ALTER LOGIN (Transact-SQL)

更改 SQL Server 登录帐户的属性。

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

-- SQL Server Syntax
ALTER LOGIN login_name 
    { 
    <status_option> 
    | WITH <set_option> [ ,... ]
    | <cryptographic_credential_option>
    } 
[;]

<status_option> ::= 
        ENABLE | DISABLE

<set_option> ::=            
    PASSWORD = 'password' | hashed_password HASHED
    [ 
      OLD_PASSWORD = 'oldpassword'
      | <password_option> [<password_option> ] 
    ]
    | DEFAULT_DATABASE = database
    | DEFAULT_LANGUAGE = language
    | NAME = login_name
    | CHECK_POLICY = { ON | OFF }
    | CHECK_EXPIRATION = { ON | OFF }
    | CREDENTIAL = credential_name
    | NO CREDENTIAL
 
<password_option> ::= 
    MUST_CHANGE | UNLOCK

<cryptographic_credentials_option> ::= 
    ADD CREDENTIAL credential_name
  | DROP CREDENTIAL credential_name

-- Windows Azure SQL Database

ALTER LOGIN login_name 
  { 
      <status_option> 
    | WITH <set_option> [ ,.. .n ] 
  } 
[;]

<status_option> ::=
    ENABLE | DISABLE

<set_option> ::= 
    PASSWORD ='password' 
    [
      OLD_PASSWORD ='oldpassword'
    ] 
    | NAME = login_name

参数

  • login_name
    指定正在更改的 SQL Server 登录名的名称。 域登录名必须用方括号括起来,其格式为 [domain\user]。

  • ENABLE | DISABLE
    启用或禁用此登录名。 禁用登录名不会影响已连接登录名的行为。 禁用的登录名将保留它们的权限,且仍然可以模拟。

  • PASSWORD ='password'
    仅适用于 SQL Server 登录名。 指定正在更改的登录名的密码。 密码是区分大小写的。

  • PASSWORD **=**hashed_password

    适用范围:SQL Server 2008 到 SQL Server 2014。

    仅适用于 HASHED 关键字。 指定要创建的登录名的密码的哈希值。

    安全说明安全说明

    当一个登录名(或包含的数据库用户)进行连接并经过身份验证后,该连接缓存有关该登录名的标识信息。对于 Windows 身份验证登录,此标识信息包含有关 Windows 组中的成员身份的信息。只要保持连接,该登录名的标识就保持已经过身份验证的状态。若要在标识中强制进行更改(例如,重置密码或更改 Windows 组成员身份),则必须从身份验证机构(Windows 或 SQL Server)注销,然后再次登录。sysadmin 固定服务器角色的成员或任何使用 ALTER ANY CONNECTION 权限的登录名都可以使用 KILL 命令结束连接,并强制登录名重新连接。SQL Server Management Studio 可以在打开与对象资源管理器和查询编辑器窗口之间的多个连接时重用连接信息。关闭所有连接可强制重新连接。

  • HASHED

    适用范围:SQL Server 2008 到 SQL Server 2014。

    仅适用于 SQL Server 登录名。 指定在 PASSWORD 参数后输入的密码已经过哈希运算。 如果未选择此选项,则在将密码存储到数据库之前,对其进行哈希运算。此选项只能用于在两台服务器之间同步登录名。 切勿使用 HASHED 选项定期更改密码。

  • OLD_PASSWORD ='oldpassword'
    仅适用于 SQL Server 登录名。 要指派新密码的登录的当前密码。 密码是区分大小写的。

  • MUST_CHANGE

    适用范围:SQL Server 2008 到 SQL Server 2014。

    仅适用于 SQL Server 登录名。 如果包括此选项,则 SQL Server 将在首次使用已更改的登录名时提示输入更新的密码。

  • DEFAULT_DATABASE **=**database

    适用范围:SQL Server 2008 到 SQL Server 2014。

    指定将指派给登录名的默认数据库。

  • DEFAULT_LANGUAGE **=**language

    适用范围:SQL Server 2008 到 SQL Server 2014。

    指定将指派给登录名的默认语言。

  • NAME = login_name
    正在重命名的登录的新名称。 如果是 Windows 登录,则与新名称对应的 Windows 主体的 SID 必须匹配与 SQL Server 中的登录相关联的 SID。 SQL Server 登录的新名称不能包含反斜杠字符 (\)。

  • 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。

  • CREDENTIAL = credential_name

    适用范围:SQL Server 2008 到 SQL Server 2014。

    将映射到 SQL Server 登录的凭据的名称。 该凭据必须已存在于服务器中。 有关详细信息,请参阅 凭据(数据库引擎)。 凭据不能映射到 sa 登录名。

  • NO CREDENTIAL

    适用范围:SQL Server 2008 到 SQL Server 2014。

    删除登录到服务器凭据的当前所有映射。 有关详细信息,请参阅凭据(数据库引擎)

  • UNLOCK

    适用范围:SQL Server 2008 到 SQL Server 2014。

    仅适用于 SQL Server 登录名。 指定应解锁被锁定的登录名。

  • ADD CREDENTIAL

    适用范围:SQL Server 2008 到 SQL Server 2014。

    将可扩展的密钥管理 (EKM) 提供程序凭据添加到登录名。 有关详细信息,请参阅可扩展的密钥管理 (EKM)

  • DROP CREDENTIAL

    适用范围:SQL Server 2008 到 SQL Server 2014。

    删除登录名的可扩展密钥管理 (EKM) 提供程序凭据。 有关详细信息,请参阅可扩展的密钥管理 (EKM)

注释

如果 CHECK_POLICY 设置为 ON,则无法使用 HASHED 参数。

如果 CHECK_POLICY 更改为 ON,则将出现以下行为:

  • 用当前的密码哈希值初始化密码历史记录。

如果 CHECK_POLICY 更改为 OFF,则将出现以下行为:

  • CHECK_EXPIRATION 也设置为 OFF。

  • 清除密码历史记录。

  • lockout_time 的值被重置。

如果指定 MUST_CHANGE,则 CHECK_EXPIRATION 和 CHECK_POLICY 必须设置为 ON。 否则,该语句将失败。

如果 CHECK_POLICY 设置为 OFF,则 CHECK_EXPIRATION 不能设置为 ON。 包含此选项组合的 ALTER LOGIN 语句将失败。

不能使用带 DISABLE 参数的 ALTER_LOGIN 来拒绝对 Windows 组的访问。 例如,ALTER_LOGIN [domain\group] DISABLE 将返回以下错误消息:

“消息 15151,级别 16,状态 1,第 1 行”

“无法对登录名‘Domain\Group' 执行更改,因为它不存在,或者您没有所需的权限。”

这是默认设置。

权限

需要 ALTER ANY LOGIN 权限。

如果使用 CREDENTIAL 选项,则还需要 ALTER ANY CREDENTIAL 权限。

如果正在更改的登录名是 sysadmin 固定服务器角色的成员或 CONTROL SERVER 权限的被授权者,则进行以下更改时还需要 CONTROL SERVER 权限:

  • 在不提供旧密码的情况下重置密码。

  • 启用 MUST_CHANGE、CHECK_POLICY 或 CHECK_EXPIRATION。

  • 更改登录名。

  • 启用或禁用登录名。

  • 将登录名映射到其他凭据。

主体可更改用于自身登录的密码、默认语言以及默认数据库。

示例

A.启用已禁用的登录名

以下示例将启用 Mary5 登录名。

ALTER LOGIN Mary5 ENABLE;

B.更改登录密码

以下示例将登录名 Mary5 的密码更改为强密码。

ALTER LOGIN Mary5 WITH PASSWORD = '<enterStrongPasswordHere>';

C.更改登录名称

以下示例将 Mary5 登录名称更改为 John2。

ALTER LOGIN Mary5 WITH NAME = John2;

D.将登录名映射到凭据

以下示例将登录名 John2 映射到凭据 Custodian04。

ALTER LOGIN John2 WITH CREDENTIAL = Custodian04;

E.将登录名映射到可扩展密钥管理凭据

以下示例将登录名 Mary5 映射到 EKM 凭据 EKMProvider1。

适用范围:SQL Server 2008 到 SQL Server 2014。

ALTER LOGIN Mary5
ADD CREDENTIAL EKMProvider1;
GO

F.解除锁定登录名

若要解除锁定 SQL Server 登录名,请执行以下语句,并将 **** 替换为所需帐户密码。

适用范围:SQL Server 2008 到 SQL Server 2014。

ALTER LOGIN [Mary5] WITH PASSWORD = '****' UNLOCK ;
GO

若要在不更改密码的情况下解除锁定登录名,请关闭检查策略,然后再打开此检查策略。

ALTER LOGIN [Mary5] WITH CHECK_POLICY = OFF;
ALTER LOGIN [Mary5] WITH CHECK_POLICY = ON;
GO

G.使用 HASHED 更改登录名的密码

以下示例将 TestUser 登录名的密码更改为已经过哈希运算的值。

适用范围:SQL Server 2008 到 SQL Server 2014。

ALTER LOGIN TestUser WITH 
PASSWORD = 0x01000CF35567C60BFB41EBDE4CF700A985A13D773D6B45B90900 HASHED ;
GO

请参阅

参考

CREATE LOGIN (Transact-SQL)

DROP LOGIN (Transact-SQL)

CREATE CREDENTIAL (Transact-SQL)

EVENTDATA (Transact-SQL)

概念

凭据(数据库引擎)

可扩展的密钥管理 (EKM)