PWDCOMPARE (Transact-SQL)

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

适用范围:SQL Server(SQL Server 2008 到当前版本)。

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

语法

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

参数

  • ' clear_text_password '
    未加密的密码。 clear_text_password 的数据类型为 sysname (nvarchar(128))。

  • password_hash
    密码的加密哈希。 password_hash 的数据类型为 varbinary(128)。

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

    备注

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

返回类型

int

如果 clear_text_password 的哈希与 password_hash 参数匹配,则返回 1;否则返回 0。

注释

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

PWDCOMPARE 不能用于包含数据库用户的密码。 没有等效的包含数据库。

权限

PWDENCRYPT 可供 public 使用。

检查 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)