다음을 통해 공유


프로그래밍 방식으로 SQL Server 네이티브 클라이언트 암호 변경

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

Important

SNAC(SQL Server Native Client)는 다음과 함께 제공되지 않습니다.

  • SQL Server 2022(16.x) 이상 버전
  • SQL Server Management Studio 19 이상 버전

SQLNCLI 또는 SQLNCLI11(SQL Server Native Client) 및 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새 애플리케이션 개발에 권장되지 않습니다.

새 프로젝트의 경우 다음 드라이버 중 하나를 사용합니다.

SQL Server 데이터베이스 엔진(버전 2012부터 2019까지)의 구성 요소로 제공되는 SQLNCLI의 경우 이 수명 주기 예외 지원을 참조하세요.

SQL Server 2005(9.x) 이전에는 사용자의 암호가 만료되면 관리자만 재설정할 수 있습니다. SQL Server 2005(9.x)부터 SQL Server Native Client는 SQL Server Native Client OLE DB 공급자와 SQL Server Native Client ODBC 드라이버 및 SQL Server 로그인 대화 상자의 변경 내용을 통해 프로그래밍 방식으로 암호 만료 처리를 지원합니다.

참고 항목

가능한 경우 런타임에 자격 증명을 입력하라는 메시지를 사용자에게 표시하고 해당 자격 증명을 지속형 형식으로 저장하지 마십시오. 자격 증명을 유지해야 하는 경우 Win32 암호화 API사용하여 암호화해야 합니다. 암호 사용에 대한 자세한 내용은 강력한 암호를 참조 하세요.

SQL Server 로그인 오류 코드

인증 문제로 인해 연결을 만들 수 없는 경우 애플리케이션에서 진단 및 복구를 지원하기 위해 다음 SQL Server 오류 코드 중 하나를 사용할 수 있습니다.

SQL Server 오류 코드 오류 메시지
15113 사용자 '%.*ls' 이유: 암호 유효성 검사에 실패했습니다. 계정이 잠겼습니다.
18463 사용자 '%.*ls'이(가) 로그인하지 못했습니다. 이유: 암호 변경에 실패했습니다. 지금은 암호를 사용할 수 없습니다.
18464 사용자 '%.*ls'이(가) 로그인하지 못했습니다. 이유: 암호 변경에 실패했습니다. 암호가 너무 짧아서 정책 요구 사항에 맞지 않습니다.
18465 사용자 '%.*ls'이(가) 로그인하지 못했습니다. 이유: 암호 변경에 실패했습니다. 암호가 너무 길어서 정책 요구 사항에 맞지 않습니다.
18466 사용자 '%.*ls'이(가) 로그인하지 못했습니다. 이유: 암호 변경에 실패했습니다. 암호가 복잡하지 않기 때문에 정책 요구 사항에 맞지 않습니다.
18467 사용자 '%.*ls'이(가) 로그인하지 못했습니다. 이유: 암호 변경에 실패했습니다. 암호가 암호 필터 DLL의 요구 사항에 맞지 않습니다.
18468 사용자 '%.*ls'이(가) 로그인하지 못했습니다. 이유: 암호 변경에 실패했습니다. 암호 유효성 검사 중에 예기치 않은 오류가 발생했습니다.
18487 사용자 '%.*ls'이(가) 로그인하지 못했습니다. 원인: 계정의 암호가 만료되었습니다.
18488 사용자 '%.*ls'이(가) 로그인하지 못했습니다. 이유: 계정의 암호를 변경해야 합니다.

SQL Server Native Client OLE DB 공급자

SQL Server Native Client OLE DB 공급자는 사용자 인터페이스를 통해 프로그래밍 방식으로 암호 만료를 지원합니다.

OLE DB 사용자 인터페이스 암호 만료

SQL Server Native Client OLE DB 공급자는 SQL Server 로그인 대화 상자의 변경 내용을 통해 암호 만료를 지원합니다. DBPROP_INIT_PROMPT 값을 DBPROMPT_NOPROMPT로 설정하면 암호가 만료할 경우 초기 연결 시도가 실패합니다.

DBPROP_INIT_PROMPT 다른 값 으로 설정된 경우 암호가 만료되었는지 여부에 관계없이 SQL Server 로그인 대화 상자가 표시됩니다. 사용자는 옵션 단추를 클릭하고 암호 변경을 선택하여 암호를 변경할 수 있습니다.

사용자가 확인을 클릭하고 암호가 만료된 경우 SQL Server는 SQL Server 암호 변경 대화 상자를 사용하여 새 암호를 입력하고 확인하라는 메시지를 표시합니다.

OLE DB 프롬프트 동작 및 잠긴 계정

계정이 잠겨 있어 연결 시도가 실패할 수 있습니다. SQL Server 로그인 대화 상자가 표시된 후 이 문제가 발생하면 서버 오류 메시지가 사용자에게 표시되고 연결 시도가 중단됩니다. 사용자가 이전 암호에 잘못된 값을 입력하면 SQL Server 암호 변경 대화 상자가 표시된 후에 발생할 수도 있습니다. 이 경우 동일한 오류 메시지가 표시되고 연결 시도가 중단됩니다.

OLE DB 연결 풀링, 암호 만료 및 잠긴 계정

연결 풀에서 연결이 활성화되어 있는 동안 계정이 잠기거나 해당 암호가 만료될 수 있습니다. 서버는 두 가지 경우에서 만료된 암호와 잠긴 계정을 확인합니다. 첫 번째는 연결이 처음 만들어지는 경우입니다. 두 번째 경우는 연결을 다시 설정하여 연결이 풀에서 제거될 때입니다.

다시 설정 시도가 실패하면 연결이 풀에서 제거되고 오류가 반환됩니다.

OLE DB 프로그래밍 방식 암호 만료

SQL Server Native Client OLE DB 공급자는 DBPROPSET_SQLSERVERDBINIT 속성 집합에 추가된 SSPROP_AUTH_OLD_PASSWORD(형식 VT_BSTR) 속성을 추가하여 암호 만료를 지원합니다.

기존 "Password" 속성은 DBPROP_AUTH_PASSWORD 참조하며 새 암호를 저장하는 데 사용됩니다.

참고 항목

연결 문자열에서 "이전 암호" 속성은 공급자 문자열 속성을 통해 사용할 수 없는 현재(만료된) 암호인 SSPROP_AUTH_OLD_PASSWORD를 설정합니다.

공급자는 이 속성의 값을 유지하지 않습니다. 이 속성을 설정하면 공급자는 새 연결이 발생하므로 첫 번째 연결에 연결 풀을 사용하지 않습니다. 암호 변경에 성공하면 현재 연결을 다시 사용할 수 없습니다. 암호 변경 후 유효하지 않은 이전 암호가 현재 연결에 포함되어 있기 때문입니다. 또한 로그인에 성공하면 공급자가 이 속성을 지웁니다. 이후 이전 암호 반환 VT_EMPTY 검색하려고 시도합니다.

참고 항목

암호가 만료된 경우에만 사용되므로 SSPROP_AUTH_OLD_PASSWORD 지속해서는 안 됩니다.

"이전 암호" 속성을 설정할 때마다 공급자는 Windows 인증도 지정되어 항상 우선 적용되지 않는 경우 암호 변경이 시도되고 있다고 가정합니다.

Windows 인증을 사용하는 경우 이전 암호를 지정하면 이전 암호가 각각 REQUIRED 또는 OPTIONAL으로 지정되었는지 여부에 따라 DB_E_ERRORSOCCURRED 또는 DB_S_ERRORSOCCURRED 발생하며, DBPROPSTATUS_CONFLICTINGBADVALUE 상태 값은 dwStatus에서 반환됩니다. 이 값은 IDBInitialize::Initialize를 호출할 때 검색됩니다.

암호를 변경하려는 시도가 예기치 않게 실패하면 서버는 오류 코드 18468을 반환합니다. 연결 시도에서 표준 OLEDB 오류가 반환됩니다.

DBPROPSET_SQLSERVERDBINIT 속성 집합에 대한 자세한 내용은 초기화 및 권한 부여 속성을 참조 하세요.

SQL Server Native Client ODBC 드라이버

SQL Server Native Client OLE DB 공급자는 사용자 인터페이스를 통해 프로그래밍 방식으로 암호 만료를 지원합니다.

ODBC 사용자 인터페이스 암호 만료

SQL Server Native Client ODBC 드라이버는 SQL Server 로그인 대화 상자를 변경하여 암호 만료를 지원합니다.

SQLDriverConnect가 호출되고 DriverCompletion이 SQL_DRIVER_NOPROMPT 설정되면 암호가 만료되면 초기 연결 시도가 실패합니다. SQLSTATE 값 28000 및 네이티브 오류 코드 값 18487은 SQLError 또는 SQLGetDiagRec에 대한 후속 호출에 의해 반환됩니다.

DriverCompletion이 다른 값으로 설정된 경우 암호가 만료되었는지 여부에 관계없이 SQL Server 로그인 대화 상자가 표시됩니다. 사용자는 옵션 단추를 클릭하고 암호 변경을 선택하여 암호를 변경할 수 있습니다.

사용자가 확인을 클릭하고 암호가 만료된 경우 SQL Server는 SQL Server 암호 변경 대화 상자를 사용하여 새 암호를 입력하고 확인하라는 메시지를 표시합니다.

ODBC 프롬프트 동작 및 잠긴 계정

계정이 잠겨 있어 연결 시도가 실패할 수 있습니다. SQL Server 로그인 대화 상자가 표시된 후 이 문제가 발생하면 서버 오류 메시지가 사용자에게 표시되고 연결 시도가 중단됩니다. 사용자가 이전 암호에 잘못된 값을 입력하면 SQL Server 암호 변경 대화 상자가 표시된 후에 발생할 수도 있습니다. 이 경우 동일한 오류 메시지가 표시되고 연결 시도가 중단됩니다.

ODBC 연결 풀링, 암호 만료 및 잠긴 계정

연결 풀에서 연결이 활성화되어 있는 동안 계정이 잠기거나 해당 암호가 만료될 수 있습니다. 서버는 두 가지 경우에서 만료된 암호와 잠긴 계정을 확인합니다. 첫 번째는 연결이 처음 만들어지는 경우입니다. 두 번째 경우는 연결을 다시 설정하여 연결이 풀에서 제거될 때입니다.

다시 설정 시도가 실패하면 연결이 풀에서 제거되고 오류가 반환됩니다.

ODBC 프로그래밍 방식 암호 만료

SQL Server Native Client ODBC 드라이버는 SQLSetConnectAttr 함수를 사용하여 서버에 연결하기 전에 설정된 SQL_COPT_SS_OLDPWD 특성을 추가하여 암호 만료를 지원합니다.

연결 핸들의 SQL_COPT_SS_OLDPWD 특성은 만료된 암호를 나타냅니다. 연결 풀링을 방해하므로 이 특성에 대한 연결 문자열 특성이 없습니다. 로그인에 성공하면 드라이버가 이 특성을 지웁니다.

SQL Server Native Client ODBC 드라이버는 암호 만료, 암호 정책 충돌, 계정 잠금 및 Windows 인증을 사용하는 동안 이전 암호 속성이 설정된 경우의 네 가지 경우에 SQL_ERROR 반환합니다. 드라이버는 SQLGetDiagField가 호출될 때 사용자에게 적절한 오류 메시지를 반환합니다.

참고 항목

SQL Server Native Client 기능