암호 정책
적용 대상: SQL Server
SQL Server에서는 Windows 암호 정책 메커니즘을 사용할 수 있습니다. 암호 정책은 SQL Server 인증을 사용하는 로그인과 암호를 가진 포함된 데이터베이스 사용자에게 적용됩니다.
SQL 서버는 SQL Server 내부에 사용된 암호에 대해 Windows에 사용된 것과 동일한 복잡성 및 만료 정책을 적용할 수 있습니다. 이 기능은 NetValidatePasswordPolicy
API에 따라 달라집니다.
참고 항목
Azure SQL 데이터베이스는 암호 복잡성만 적용합니다. 암호 만료 및 정책 적용 섹션은 Azure SQL Database에 적용되지 않습니다.
Azure SQL Managed Instance의 암호 정책에 대한 자세한 내용은 SQL Managed Instance FAQ를 참조하세요.
암호 복잡성
암호 복잡성 정책은 가능한 암호의 수를 늘려 문자 조합을 이용한 공격(brute force attacks)을 방지하도록 설계되었습니다. 암호 복잡성 정책이 적용되는 경우 새 암호는 다음 지침을 충족해야 합니다.
암호에 사용자의 계정 이름이 포함되어 있지 않습니다.
암호는 8자 이상이어야 합니다.
암호는 다음 네 범주에 속하는 문자 중 세 자를 포함해야 합니다.
라틴어 대문자(A~Z)
라틴어 소문자(a - z)
기본 10자리(0~9)
느낌표(!), 달러 기호($), 숫자 기호(#) 또는 백분율(%)과 같은 숫자가 아닌 문자입니다.
암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.
암호 만료
암호 만료 정책을 사용하여 암호의 수명을 관리합니다. SQL Server에서 암호 만료 정책을 강제로 적용하면 사용자에게 기존 암호를 변경할 것과 암호가 만료되어 해당 계정을 사용할 수 없게 됨을 알려 줍니다.
정책 적용
암호 정책 적용은 각 SQL Server 로그인에 대해 별도로 구성할 수 있습니다. ALTER LOGIN(Transact-SQL)을 사용하여 SQL Server 로그인의 암호 정책 옵션을 구성합니다. 다음 규칙은 암호 정책 적용 구성에 적용됩니다.
CHECK_POLICY가 ON으로 변경되면 다음 동작이 수행됩니다.
CHECK_EXPIRATION 명시적으로 OFF로 설정되지 않는 한 ON으로 설정됩니다.
암호 기록이 현재 암호 해시 값으로 초기화됩니다.
계정 잠금 기간, 계정 잠금 임계값 및 다시 설정 후 계정 잠금 카운터도 사용하도록 설정됩니다.
CHECK_POLICY가 OFF로 변경되면 다음 동작이 수행됩니다.
CHECK_EXPIRATION도 OFF로 설정됩니다.
암호 기록이 삭제됩니다.
lockout_time
의 값이 초기화됩니다.
정책 옵션의 일부 조합은 지원되지 않습니다.
MUST_CHANGE를 지정한 경우에는 CHECK_EXPIRATION 및 CHECK_POLICY를 ON으로 설정해야 합니다. 그렇지 않으면 문이 실패합니다.
CHECK_POLICY를 OFF로 설정한 경우에는 CHECK_EXPIRATION을 ON으로 설정할 수 없습니다. 이 옵션 조합을 사용하면 ALTER LOGIN 문이 실패합니다.
CHECK_POLICY = ON을 설정하면 다음과 같은 암호의 생성을 방지합니다.
Null 또는 비어 있음
컴퓨터 또는 로그인의 이름과 동일
password
,admin
,administrator
,sa
,sysadmin
중 하나.
보안 정책은 Windows에서 설정될 수도 있고 도메인에서 받을 수도 있습니다. 컴퓨터에서 암호 정책을 보려면 로컬 보안 정책 MMC 스냅인(secpol.msc)을 사용합니다.
참고 항목
CHECK_POLICY 사용하도록 설정된 SQL Server 로그인의 경우 ALTER LOGIN을 실행하고 암호를 변경하는 명령에 OLD_PASSWORD 포함하지 않으면 암호 기록 적용이 무시됩니다. 이는 이전에 사용한 암호에도 불구하고 암호 재설정을 허용하는 기본 동작입니다. 길이 및 복잡성을 포함하여 CHECK_POLICY 관련된 다른 검사 OLD_PASSWORD 사용되는지 여부에 관계없이 검사.
SQL 사용자 암호 정책 정보 확인
다음 쿼리를 사용하여 SQL Server에서 SQL 사용자 암호 정책 및 만료 날짜를 확인할 수 있습니다. 다음 쿼리는 Azure SQL Database에서도 작동하지만 암호 복잡성만 Azure SQL Database에 적용됩니다.
SELECT name,
is_policy_checked,
is_expiration_checked,
LOGINPROPERTY(name, 'IsMustChange') AS IsMustChange,
LOGINPROPERTY(name, 'IsLocked') AS IsLocked,
LOGINPROPERTY(name, 'LockoutTime') AS LockoutTime,
LOGINPROPERTY(name, 'PasswordLastSetTime') AS PasswordLastSetTime,
LOGINPROPERTY(name, 'IsExpired') AS IsExpired,
LOGINPROPERTY(name, 'BadPasswordCount') AS BadPasswordCount,
LOGINPROPERTY(name, 'BadPasswordTime') AS BadPasswordTime,
LOGINPROPERTY(name, 'HistoryLength') AS HistoryLength,
modify_date
FROM sys.sql_logins;