适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Microsoft Fabric 中的 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 登录名的密码策略设置的信息。 属性的名称不区分大小写,因此 BadPasswordCount 和 badpasswordcount 等属性名称是等效的。 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