PWDCOMPARE (Transact-SQL)

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例

对密码执行哈希操作并将该哈希与现有密码的哈希进行比较。 PWDCOMPARE 可用于搜索空的 SQL Server 登录密码或常见的弱密码。

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

语法

PWDCOMPARE ( 'clear_text_password'  
   , password_hash   
   [ , version ] )  

备注

若要查看 SQL Server 2014 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

' clear_text_password '
未加密的密码。 clear_text_password 是 sysname (nvarchar(128))。

password_hash
密码的加密哈希。 password_hash 是 varbinary(128)。

version
已过时参数;如果 password_hash 表示来自早于 SQL Server 2000 (8.x)(已迁移到 SQL Server 2005 (9.x) 或更高版本但从未转换为 SQL Server 2000 (8.x) 系统)的登录名的值,则该参数可设置为 1。 version 是 int。

注意

此参数用于向后兼容,但由于密码哈希 blob 现在包含自身的版本说明,因此忽略此参数。 后续版本的 Microsoft SQL Server 将删除该功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

返回类型

int

如果 clear_text_password 的哈希与 password_hash 相匹配,则返回 1;反之,则返回 0。

注解

PWDCOMPARE 函数不会威胁密码哈希的能力,因为可通过尝试使用作为第一个参数提供的密码登录,执行相同的测试。

PWDCOMPARE 不能与包含数据库用户的密码一起使用。 没有等效的包含数据库。

权限

PWDENCRYPT 向用户开放使用。

检查 sys.sql_logins 的 password_hash 列要求 CONTROL SERVER 权限。

示例

A. 标识没有密码的登录名

下面的示例标识没有密码的 SQL Server 登录名。

SELECT name FROM sys.sql_logins   
WHERE PWDCOMPARE('', password_hash) = 1 ;  

B. 搜索常见密码

为了搜索您要标识和更改的常见密码,请将密码指定为第一个参数。 例如,执行以下语句以便搜索指定为 password 的密码。

SELECT name FROM sys.sql_logins   
WHERE PWDCOMPARE('password', password_hash) = 1 ;  

另请参阅

PWDENCRYPT (Transact-SQL)
安全函数 (Transact-SQL)