Loading...
MySQL 9.5 Reference Manual 9.5의 8.2.18 Multifactor Authentication의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Authentication은 한 당사자가 다른 당사자를 만족시킬 수 있을 정도로 자신의 신원을 입증하는 과정을 의미합니다. Multifactor authentication (MFA)는 authentication 과정 동안 여러 개의 authentication 값(또는 “factor”)을 사용하는 것을 말합니다. MFA는 하나의 authentication 방법(예: password)만 사용하는 one-factor/single-factor authentication (1FA/SFA)보다 더 높은 보안을 제공합니다. MFA는 여러 개의 password를 사용한 authentication, 또는 smart card, security key, biometric reader와 같은 장치를 사용하는 authentication과 같은 추가적인 authentication 방법을 가능하게 합니다.
MySQL은 multifactor authentication을 지원합니다. 이 기능에는 최대 세 개의 authentication 값이 필요한 형태의 MFA가 포함됩니다. 즉, MySQL 계정 관리에서는 기존의 1FA 지원에 더해 2FA 또는 3FA를 사용하는 계정도 지원합니다.
client가 single-factor 계정을 사용하여 MySQL server에 연결을 시도할 때, server는 계정 정의에 의해 지정된 authentication plugin을 호출하고, plugin이 성공 또는 실패를 보고하는지에 따라 연결을 허용하거나 거부합니다.
여러 authentication factor를 가진 계정의 경우에도 과정은 유사합니다. server는 계정 정의에 나열된 순서대로 authentication plugin을 호출합니다. plugin이 성공을 보고하면, 그 plugin이 마지막인 경우에는 server가 연결을 허용하고, 남아 있는 plugin이 있으면 다음 plugin을 호출합니다. 어느 plugin이라도 실패를 보고하면 server는 연결을 거부합니다.
다음 절에서는 MySQL에서의 multifactor authentication을 더 자세히 다룹니다.
Authentication factor에는 일반적으로 다음과 같은 유형의 정보가 포함됩니다:
비밀 password나 passphrase와 같이, 당신이 알고 있는 것.
security key나 smart card와 같이, 당신이 가지고 있는 것.
fingerprint나 얼굴 스캔과 같은 biometric 특성, 즉 당신이 어떤 사람인지에 대한 것.
“당신이 알고 있는 것” factor 유형은 authentication 과정 양쪽에서 모두 비밀로 유지되는 정보에 의존합니다. 하지만 비밀은 노출될 수 있습니다. 누군가가 당신이 password를 입력하는 것을 볼 수도 있고, phishing 공격으로 당신을 속일 수도 있으며, server 측에 저장된 password가 보안 침해로 인해 노출될 수도 있습니다. 여러 개의 password를 사용하면 보안을 향상시킬 수 있지만, 각각은 여전히 노출 위험에 노출됩니다. 다른 factor 유형을 사용하면, 노출 위험을 줄이면서 보안을 개선할 수 있습니다.
MySQL의 multifactor authentication 구현은 다음 요소로 구성됩니다:
authentication_policy
system variable은 사용할 수 있는 authentication factor의 수와 각 factor에 허용되는 authentication 유형을 제어합니다. 즉, multifactor authentication과 관련하여
CREATE USER 및
ALTER USER 구문에 제약을 가합니다.
CREATE USER 및
ALTER USER는 새 계정에 대해 여러 authentication method를 지정하거나, 기존 계정의 authentication method를 추가, 수정, 삭제할 수 있는 구문을 제공합니다. 계정이 2FA 또는 3FA를 사용하는 경우, mysql.user system table은 추가 authentication factor에 대한 정보를 User_attributes column에 저장합니다.
여러 개의 password가 필요한 계정을 사용하여 MySQL server에 authentication할 수 있도록, client 프로그램은 최대 세 개의 password를 지정할 수 있게 해 주는
--password1,
--password2,
--password3 옵션을 가집니다. C API를 사용하는 애플리케이션의 경우,
MYSQL_OPT_USER_PASSWORD 옵션을
mysql_options4() C API 함수에서 사용하여 동일한 기능을 사용할 수 있습니다.
server-side authentication_webauthn
plugin은 장치를 사용한 authentication을 가능하게 합니다. 이 server-side, 장치 기반 authentication plugin은 MySQL Enterprise Edition 배포판에만 포함됩니다. MySQL community 배포판에는 포함되지 않습니다. 그러나 client-side
authentication_webauthn_client plugin은 community 배포판을 포함한 모든 배포판에 포함됩니다. 이를 통해 어떤 배포판의 client라도
authentication_webauthn을 사용하여 authentication하는, 해당 plugin이 로드된 server의 계정에 연결할 수 있습니다. 자세한 내용은
Section 8.4.1.11, “WebAuthn Pluggable Authentication”을 참조하십시오.
authentication_webauthn은 계정에서 사용되는 유일한 authentication plugin인 경우 passwordless authentication도 가능하게 합니다. 자세한 내용은
WebAuthn Passwordless Authentication을 참조하십시오.
Multifactor authentication은 WebAuthn이 아닌 MySQL authentication method, WebAuthn authentication method, 또는 이 둘의 조합을 사용할 수 있습니다.
다음 privilege는 사용자가 특정 제한된 multifactor authentication 관련 작업을 수행할 수 있도록 허용합니다:
AUTHENTICATION_POLICY_ADMIN
privilege를 가진 사용자는
authentication_policy
system variable이 부과하는 제약을 받지 않습니다. (그렇지 않으면 허용되지 않았을 구문에 대해서는 경고가 발생합니다.)
PASSWORDLESS_USER_ADMIN
privilege는 passwordless-authentication 계정의 생성과 해당 계정에 대한 작업의 복제를 가능하게 합니다.
authentication_policy
system variable은 multifactor authentication policy를 정의합니다. 구체적으로, 계정이 가질 수 있는(또는 가져야 하는) authentication factor의 수와 각 factor에 사용할 수 있는 authentication method를 정의합니다.
authentication_policy의 값은 1, 2, 또는 3개의 comma로 구분된 element 목록입니다. 목록의 각 element는 authentication factor에 대응하며, authentication plugin 이름, asterisk(*), 빈 값, 또는 생략된 값일 수 있습니다. (예외: element 1은 비어 있거나 생략될 수 없습니다.) 전체 목록은 single quote로 둘러싸여 있습니다. 예를 들어, 다음
authentication_policy 값에는 asterisk, authentication plugin 이름, 빈 element가 포함됩니다:
1authentication_policy = '*,authentication_webauthn,'
Asterisk(*)는 authentication method가 필요하지만 어떤 method든 허용됨을 나타냅니다. 빈 element는 authentication method가 선택 사항이며 어떤 method든 허용됨을 나타냅니다. 생략된 element(asterisk, 빈 element, authentication plugin 이름이 없음)는 authentication method가 허용되지 않음을 나타냅니다. plugin 이름이 지정된 경우, 계정을 생성하거나 수정할 때 해당 factor에 대해 그 authentication method가 필요합니다.
기본
authentication_policy 값은
'*,,'(asterisk와 두 개의 빈 element)이며, 이는 첫 번째 factor는 필수이고, 두 번째와 세 번째 factor는 선택적으로 허용한다는 의미입니다. 기본
authentication_policy 값은 따라서 기존 1FA 계정과의 하위 호환성을 유지하면서, 2FA 또는 3FA를 사용하는 계정의 생성 또는 수정을 허용합니다.
AUTHENTICATION_POLICY_ADMIN
privilege를 가진 사용자는
authentication_policy 설정이 부과하는 제약을 받지 않습니다. (그렇지 않으면 허용되지 않았을 구문에 대해서는 경고가 발생합니다.)
authentication_policy 값은 option file에 정의하거나
SET GLOBAL 구문을 사용하여 지정할 수 있습니다:
1SET GLOBAL authentication_policy='*,*,';
authentication_policy 값이 어떻게 정의될 수 있는지에 대해서는 여러 규칙이 있습니다.
authentication_policy system variable 설명을 참조하여 이러한 규칙에 대한 전체 설명을 확인하십시오. 다음 표는 몇 가지
authentication_policy 예제 값과 각 값이 설정하는 policy를 보여줍니다.
Table 8.11 Example authentication_policy Values
| authentication_policy Value | Effective Policy |
|---|---|
'*' | 하나의 factor를 가진 계정만 생성 또는 변경을 허용합니다. |
'*,*' | 두 개의 factor를 가진 계정만 생성 또는 변경을 허용합니다. |
'*,*,*' | 세 개의 factor를 가진 계정만 생성 또는 변경을 허용합니다. |
'*,' | 하나 또는 두 개의 factor를 가진 계정 생성 또는 변경을 허용합니다. |
'*,,' | 하나, 둘, 또는 세 개의 factor를 가진 계정 생성 또는 변경을 허용합니다. |
'*,*,' | 두 개 또는 세 개의 factor를 가진 계정 생성 또는 변경을 허용합니다. |
'*,auth_plugin' | 두 개의 factor를 가진 계정 생성 또는 변경을 허용하며, 첫 번째 factor는 어떤 authentication method든 사용할 수 있고, 두 번째 factor는 지정된 plugin을 사용해야 합니다. |
'auth_plugin,*,' | 두 개 또는 세 개의 factor를 가진 계정 생성 또는 변경을 허용하며, 첫 번째 factor는 지정된 plugin을 사용해야 합니다. |
'auth_plugin,' | 하나 또는 두 개의 factor를 가진 계정 생성 또는 변경을 허용하며, 첫 번째 factor는 지정된 plugin을 사용해야 합니다. |
'auth_plugin,auth_plugin,auth_plugin' | 세 개의 factor를 가진 계정 생성 또는 변경을 허용하며, 각 factor는 지정된 plugin을 사용해야 합니다. |
| authentication_policy Value | Effective Policy |
|---|
기본적으로, MySQL은 첫 번째 factor에 대해 어떤 authentication plugin이든 허용하고, 두 번째 및 세 번째 authentication factor는 선택적으로 허용하는 multifactor authentication policy를 사용합니다. 이 policy는 구성 가능합니다. 자세한 내용은 Configuring the Multifactor Authentication Policy를 참조하십시오.
참고
caching_sha2_password와 같은 어떤 internal credential storage plugin도 factor 2 또는 3에 사용하는 것은 허용되지 않습니다.
먼저 caching_sha2_password plugin을 사용하여 계정을 authentication하고, 그 다음 authentication_ldap_sasl SASL LDAP plugin을 사용하여 authentication하도록 계정을 구성하려 한다고 가정해 봅시다. (이는 LDAP authentication이
Section 8.4.1.6, “LDAP Pluggable Authentication”에 설명된 대로 이미 설정되어 있고, 사용자가 예제에 표시된 authentication string에 해당하는 LDAP directory entry를 가지고 있다고 가정합니다.) 다음과 같은 구문으로 계정을 생성합니다:
1CREATE USER 'alice'@'localhost' 2 IDENTIFIED WITH caching_sha2_password 3 BY 'sha2_password' 4 AND IDENTIFIED WITH authentication_ldap_sasl 5 AS 'uid=u1_ldap,ou=People,dc=example,dc=com';
연결하려면 사용자가 두 개의 password를 제공해야 합니다. 여러 개의 password가 필요한 계정을 사용하여 MySQL server에 authentication할 수 있도록, client 프로그램은 최대 세 개의 password를 지정할 수 있게 해 주는
--password1,
--password2,
--password3 옵션을 가집니다. 이 옵션은
--password 옵션과 유사하여, command line에서 옵션 뒤에 password 값을 지정할 수 있습니다(이는 안전하지 않습니다). 또는 password 값을 지정하지 않고 옵션만 제공하면 사용자에게 password 입력을 요구합니다. 방금 생성한 계정의 경우 factor 1과 factor 2는 password를 사용하므로,
mysql client를
--password1,
--password2 옵션과 함께 실행합니다.
mysql은 각 password를 차례로 입력하도록 프롬프트를 표시합니다:
1$> mysql --user=alice --password1 --password2 2Enter password: (enter factor 1 password) 3Enter password: (enter factor 2 password)
세 번째 authentication factor를 추가하고자 한다고 가정해 봅시다. 이는 사용자를 drop하고 세 번째 factor를 포함해 다시 생성하거나,
ALTER USER user ADD factor 구문을 사용하여 달성할 수 있습니다. 두 방법 모두 아래에 나와 있습니다:
1DROP USER 'alice'@'localhost'; 2 3CREATE USER 'alice'@'localhost' 4 IDENTIFIED WITH caching_sha2_password 5 BY 'sha2_password' 6 AND IDENTIFIED WITH authentication_ldap_sasl 7 AS 'uid=u1_ldap,ou=People,dc=example,dc=com' 8 AND IDENTIFIED WITH authentication_webauthn;
ADD factor 구문에는 factor 번호와 FACTOR
키워드가 포함됩니다:
1ALTER USER 'alice'@'localhost' ADD 3 FACTOR IDENTIFIED WITH authentication_webauthn;
ALTER USER user DROP factor 구문을 사용하면 factor를 drop할 수 있습니다. 다음 예제는 앞의 예제에서 추가했던 세 번째 factor
(authentication_webauthn)를 drop합니다:
1ALTER USER 'alice'@'localhost' DROP 3 FACTOR;
ALTER USER user MODIFY factor 구문을 사용하면, 해당 factor가 존재하는 경우 특정 factor에 대한 plugin 또는 authentication string을 변경할 수 있습니다. 다음 예제는 두 번째 factor를 수정하여 authentication method를
authentication_ldap_sasl에서
authentication_webauthn으로 변경합니다:
1ALTER USER 'alice'@'localhost' MODIFY 2 FACTOR IDENTIFIED WITH authentication_webauthn;
[SHOW CREATE USER](https://dev.mysql.com/doc/refman/9.5/en/show-create-user.html "15.7.7.14 SHOW CREATE USER Statement)를 사용하여 계정에 대해 정의된 authentication method를 확인하십시오:
1SHOW CREATE USER 'u1'@'localhost'\G 2*************************** 1. row *************************** 3CREATE USER for u1@localhost: CREATE USER `u1`@`localhost` 4IDENTIFIED WITH 'caching_sha2_password' AS 'sha2_password' 5AND IDENTIFIED WITH 'authentication_authn' REQUIRE NONE 6PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY 7DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE 8CURRENT DEFAULT
8.2.17 Pluggable Authentication
8.2.19 Proxy Users