PWDCOMPARE(Transact-SQL)

암호를 해시하고 해당 해시를 기존 암호의 해시와 비교합니다. PWDCOMPARE를 사용하여 빈 SQL Server 로그인 암호 또는 일반적인 약한 암호를 검색할 수 있습니다.

항목 링크 아이콘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 2005 또는 SQL Server 2008로 마이그레이션되었지만 SQL Server 2000 시스템으로 변환되지 않은 SQL Server 2000 이전의 로그인 값을 나타내는 경우 1로 설정할 수 있는 선택적 매개 변수입니다. version은 int입니다.

    중요 정보중요

    이 매개 변수는 더 이상 사용되지 않으며 SQL Server 이후 릴리스에서는 제거될 예정입니다.

반환 형식

int

clear_text_password의 해시가 password_hash 매개 변수와 일치하면 1을 반환하고, 그렇지 않으면 0을 반환합니다.

주의

SQL Server 7.0의 인스턴스를 SQL Server 2000 이상 버전으로 마이그레이션하는 경우 암호 해시는 변경되지 않으며 암호를 테스트하기 위해 version 매개 변수를 사용해야 합니다. 마이그레이션을 수행한 후 로그인을 처음 사용할 때 암호 해시는 SQL Server 2000에서 처음 사용되었던 형식으로 업데이트됩니다. 이때부터 PWDCOMPARE에는 해당 로그인에 대해 version 매개 변수가 필요하지 않습니다.

암호를 첫 번째 매개 변수로 지정하여 로그인을 시도함으로써 동일한 테스트를 수행할 수 있으므로 PWDCOMPARE 함수는 암호 해시의 강력함에 대한 위협이 되지 않습니다.

사용 권한

PWDENCRYPT는 누구나 사용할 수 있습니다.

sys.sql_logins의 password_hash 열을 검사하려면 CONTROL SERVER 권한이 있어야 합니다.

1. SQL Server 2005 또는 SQL Server 2008에서 암호가 없는 로그인 식별

다음 예에서는 암호가 없는 SQL Server 로그인을 식별합니다. 첫 번째 WHERE 절은 SQL Server 2000 이상 버전에서 사용하는 형식으로 저장된 값에 대한 암호 해시를 확인합니다. 두 번째 WHERE 절은 SQL Server 2000보다 낮은 SQL Server 버전에서 사용하는 형식으로 저장되어 있는 값에 대한 암호 해시를 확인하는 version 매개 변수를 포함합니다.

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

2. SQL Server 2000에서 암호가 없는 로그인 식별

SQL Server 2000에는 sys.sql_logins 테이블이 없습니다. 다음 문을 SQL Server 2000 인스턴스에 대해 실행하여 암호가 없는 SQL Server 로그인을 식별할 수 있습니다.

SELECT name FROM syslogins 
WHERE PWDCOMPARE ('', password) = 1 
OR PWDCOMPARE('', password, 1) = 1  ;

3. 일반적인 암호 검색

식별하여 변경할 일반적인 암호를 검색하려면 암호를 첫 번째 매개 변수로 지정합니다. 예를 들어 password로 지정된 암호를 검색하려면 다음 문을 실행합니다.

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