LOGINPROPERTY (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsMicrosoft Fabric 中的 SQL 数据库

返回有关登录策略设置的信息。

Transact-SQL 语法约定

语法

LOGINPROPERTY ( 'login_name' , 'property_name' )

参数

login_name

将为其返回登录属性状态的 SQL Server 登录名的名称。

propertyname

一个表达式,其中包含要为登录名返回的属性信息。 propertyname 可以是下列值之一。

说明
BadPasswordCount 返回尝试以不正确密码连续登录的次数。
BadPasswordTime 返回上次尝试以不正确密码登录的时间。
DaysUntilExpiration 返回密码过期前的天数。
DefaultDatabase 返回存储在元数据中或 master 未指定任何数据库的 SQL Server 登录默认数据库。 为非 SQL Server 提供的用户(例如经过身份验证的 Windows 用户)返回 NULL。
DefaultLanguage 返回存储在元数据中的登录默认语言。 为非 SQL Server 提供的用户(例如经过身份验证的 Windows 用户)返回 NULL。
HistoryLength 返回使用密码策略强制机制跟踪登录名的密码数。 如果未强制实施密码策略,则为 0。 恢复密码策略实施将从 1 重新开始。
IsExpired 指示登录名的密码是否已过期。
IsLocked 指示登录名是否已锁定。
IsMustChange 指示登录名在下次连接时是否必须更改其密码。
LockoutTime 返回 SQL Server 登录名由于超过允许的失败登录尝试次数而被锁定的日期。
PasswordHash 返回密码的哈希。
PasswordLastSetTime 返回设置当前密码时的日期。
PasswordHashAlgorithm 返回用于对密码执行哈希操作的算法。 在 SQL Server 2022(16.x)和早期版本中,存储的密码信息是使用加盐密码的 SHA-512 计算的。 从 SQL Server 2025(17.x)开始,采用迭代哈希算法 RFC2898(PBKDF)。 哈希的第一个字节表示版本: 0x02 适用于版本2(SQL Server 2022(16.x)及更早版本),对于 0x03 版本3(SQL Server 2025(17.x)及更高版本)。

返回

数据类型取决于所请求的值。

IsLocked、IsExpired 和 IsMustChange 的类型为 int

  • 1(如果登录名处于指定状态)。

  • 如果登录名未处于指定状态,则为 0。

BadPasswordCount 和 HistoryLength 的类型为 int

BadPasswordTime、LockoutTime、PasswordLastSetTime 的类型为 datetime

PasswordHash 的类型为 varbinary

如果登录名不是有效的 SQL Server 登录名,则为 NULL。

DaysUntilExpiration 的数据类型为 int

  • 如果登录名已过期或者它将在查询的当日过期,则为 0。

  • 如果 Windows 中的本地安全策略使密码永不过期,则为 -1。

  • 如果登录名CHECK_POLICY或CHECK_EXPIRATION为 OFF,或者作系统不支持密码策略,则为 NULL。

PasswordHashAlgorithm 的数据类型为 int

  • 0(如果是 SQL7.0 哈希)

  • 1(如果是 SHA-1 哈希)

  • 2(如果是 SHA-2 哈希)

  • 如果登录名不是有效的 SQL Server 登录名,则为 NULL

备注

此内置函数返回有关 SQL Server 登录名的密码策略设置的信息。 属性的名称不区分大小写,因此 BadPasswordCountbadpasswordcount 等属性名称是等效的。 PasswordHash、PasswordHashAlgorithm 和 PasswordLastSetTime 属性值在所有支持的 SQL Server 配置中都可用,但仅当 SQL Server 在 Windows Server 2003 上运行并且同时启用了 CHECK_POLICY 和 CHECK_EXPIRATION 时,其他属性才可用。 有关详细信息,请参阅 Password Policy

权限

需要对登录名具有 VIEW 权限。 请求密码哈希时,还需要 CONTROL SERVER 权限。

示例

A. 检查登录名是否必须更改其密码

以下示例检查 SQL Server 登录名 John3 在下次连接到 SQL Server 实例时是否必须更改其密码。

SELECT LOGINPROPERTY('John3', 'IsMustChange');
GO

B. 检查登录名是否已锁定

以下示例检查 SQL Server 登录名 John3 是否已锁定。

SELECT LOGINPROPERTY('John3', 'IsLocked');
GO