6.3.7 플러그 인증
클라이언트가 MySQL 서버에 접속하면 서버는 클라이언트와 클라이언트 호스트에서 제공된 사용자 이름을 사용하여 mysql.user
테이블에서 적절한 계정 행을 선택합니다. 그 후, 서버는 인증 플러그인에서 클라이언트에 적용되는 계정 라인으로 결정하여 클라이언트를 인증합니다.
계정 행에 플러그인이 지정된 경우 서버는 그것을 호출하여 사용자를 인증합니다. 서버가 플러그인을 찾을 수없는 경우 오류가 발생합니다.
계정 행에 플러그인 이름이 지정되어 있지 않은 경우,
Password
컬럼의 암호 해시 값을 기본 해시 방식과 4.1 이전의 오래된 해시 방식 중 어느 쪽이 사용되고 있는지에 따라 서버는mysql_native_password
과mysql_old_password
중 하나의 플러그인을 사용하여 계정을 인증합니다. 클라이언트는 계정 행의Password
컬럼의 암호와 일치해야합니다.
사용자가 연결을 허용하는지 여부를 나타내는 표시등이 플러그인에서 서버에 반환됩니다.
플러그 인증을 사용하면 다음과 같은 두 가지 중요한 기능이 활성화됩니다.
외부 인증 : 플러그 인증을 사용하면
mysql.user
테이블에 저장되어있는 암호 기반 네이티브 이외의 인증 방식에 적합한 인증서를 사용하여 클라이언트가 MySQL 서버에 연결할 수 있습니다. 예를 들어, PAM, Windows의 로그인 ID, LDAP, Kerberos와 같은 외부 인증 방식을 사용하는 플러그인을 만들 수 있습니다.프록시 사용자 : 사용자가 연결을 허용하는 경우 연결된 사용자가 다른 사용자의 프록시임을 나타 내기 위해 인증 플러그인은 연결된 사용자의 이름과 다른 사용자 이름을 서버에 반환 수 있습니다. 연결이 존속하는 동안은 액세스 제어를 위해 프록시 사용자는 다른 사용자의 권한을 가지고있는 것으로 처리됩니다. 사실, 사용자는 다른 사용자를 가장합니다. 자세한 내용은 섹션 6.3.9 "프록시 사용자" 를 참조하십시오.
MySQL은 여러 인증 플러그 인이 사용 가능합니다.
계정 행의
Password
컬럼과 비교하여 암호를 일치시키는 기본 인증을 수행하는 플러그인.mysql_native_password
플러그인에는 기본 암호 해시 방식에 따라 인증이 구현되어 있습니다.mysql_old_password
플러그인은 이전 (4.1 이전) 패스워드 해시 방식 (현재는 비추천입니다)에 따라 기본 인증이 구현되어 있습니다. 섹션 6.3.8.1 "기본 인증 플러그인" 및 섹션 6.3.8.2 "오래된 원시 인증 플러그인" 을 참조하십시오. 서버 시작시--default-authentication-plugin
옵션이 설정되어있는 경우를 제외하고mysql_native_password
을 사용한 기본 인증이 새 계정의 기본입니다.SHA-256 암호 해시를 사용하여 인증을 수행하는 플러그인. 이 플러그인은 계정 행
authentication_string
컬럼과 비교하여 암호를 일치시킵니다. 이것은 기본 인증으로 실현할 수있는보다 강력한 암호화입니다. 섹션 6.3.8.4 "SHA-256 인증 플러그인" 을 참조하십시오.PAM (Pluggable Authentication Module)과 비교하여 외부 인증을 수행하는 플러그인. 이것을 사용하면 MySQL 서버가 PAM을 사용하여 MySQL 사용자를 인증 할 수 있습니다. 이 플러그인은 프록시 사용자도 지원되고 있습니다. 섹션 6.3.8.5 "PAM 인증 플러그인" 을 참조하십시오.
Windows에서 외부 인증을 수행하는 플러그인. 이것을 사용하면 MySQL 서버가 기본 Windows 서비스를 사용하여 클라이언트 연결을 인증 할 수 있습니다. Windows에 로그인 한 사용자는 암호를 추가로 지정하지 않고 자신의 환경 정보에 따라 MySQL 클라이언트 프로그램에서 서버에 연결할 수 있습니다. 이 플러그인은 프록시 사용자도 지원되고 있습니다. 섹션 6.3.8.6 "Windows 기본 인증 플러그인" 을 참조하십시오.
해시 또는 암호화하지 않고 서버에 암호를 보내는 클라이언트 플러그인. 이 플러그인은 클라이언트 사용자가 제공 한 것과 똑같은 비밀번호에 액세스해야하는 서버 측의 플러그인으로 사용할 수 있습니다. 섹션 6.3.8.7 "클라이언트 측의 일반 텍스트 인증 플러그인" 을 참조하십시오.
Unix 소켓 파일을 사용하여 로컬 호스트에서 연결하는 클라이언트를 인증하는 플러그인. 섹션 6.3.8.8 "소켓 피어 인증서 인증 플러그인" 을 참조하십시오.
MySQL의 기본 인증을 사용하여 인증하는 테스트 플러그인. 이 플러그인은 테스트 및 개발을 위해 인증 플러그인을 작성하는 방법을 예제로 사용됩니다. 섹션 6.3.8.9 "테스트 인증 플러그인" 을 참조하십시오.
플러그 인증 사용에 대한 현재의 제약 (어떤 커넥터가 어떤 플러그인을 지원하고 있는지 등) 내용은 섹션 D.9 "플러그 인증 제한 사항" 을 참조하십시오.
타사 커넥터 개발자는 커넥터 플러그 인증 기능을 활용할 수있는 범위와 더 준수하기 위해 수행 할 단계를 확인하기 위해 해당 섹션을 읽어 봐야한다.
자체 인증 플러그인을 작성하는 것에 관심이 있다면, 섹션 24.2.4.9 "인증 플러그인 만들기" 를 참조하십시오.
인증 플러그인 사용 방법
이 섹션에서는 인증 플러그인을 설치 및 사용하기위한 일반적인 단계를 보여줍니다.
일반적으로 플러그 인증은 서버 측과 클라이언트 측에서 지원하는 플러그인이 사용됩니다. 따라서 다음과 같은 특정 인증 방식을 사용합니다.
서버 호스트는 필요에 따라 적절한 서버 플러그인을 포함한 라이브러리를 설치합니다. 이렇게하면 서버는이를 사용하여 클라이언트 연결을 인증 할 수 있습니다. 마찬가지로 각 클라이언트 호스트에서 클라이언트 프로그램에서 사용되는 적절한 클라이언트 플러그인을 포함한 라이브러리를 설치합니다.
인증 용 플러그인의 사용을 지정하는 MySQL 계정을 만듭니다.
클라이언트가 연결되면 서버 플러그인에서 클라이언트 프로그램에 인증에 사용되는 클라이언트 플러그인이 지시됩니다.
여기에 표시된 지시는 MySQL 배포판에 포함 된 샘플 인증 플러그인을 사용하고 있습니다 ( 섹션 6.3.8.9 "테스트 인증 플러그인" 을 참조하십시오). 이 단계는 다른 인증 플러그인과 비슷합니다. 적절한 플러그인 및 파일 이름으로 대체하십시오.
샘플 인증 플러그인은 다음과 같은 특징이 있습니다.
서버 측의 플러그인 이름은
test_plugin_server
입니다.클라이언트 플러그인 이름은
auth_test_plugin
입니다.어떤 플러그인도 플러그인 디렉토리 (
plugin_dir
시스템 변수로 지정된 디렉토리)의auth_test_plugin.so
라는 공유 라이브러리 객체 파일에 배치되어 있습니다. 파일 이름 접미사는 시스템에 따라 다를 수 있습니다.
다음과 같이 샘플 인증 플러그인을 설치하고 사용합니다.
서버 호스트 및 클라이언트 호스트에 플러그인 라이브러리가 설치되어 있는지 확인합니다.
서버를 시작하거나 실행할 때 서버 측의 테스트 플러그인을 설치합니다.
시작시 플러그인을 설치하려면
--plugin-load
옵션을 사용합니다. 이 플러그인로드 방식은 서버를 시작할 때마다 옵션을 지정해야합니다. 예를 들어,my.cnf
옵션 파일에서 다음 줄을 사용합니다.[mysqld] plugin-load = test_plugin_server = auth_test_plugin.so
실행시 플러그인을 설치하려면
INSTALL PLUGIN
명령문을 사용합니다.mysql>
INSTALL PLUGIN test_plugin_server SONAME 'auth_test_plugin.so';
그러면 플러그인이 영구적으로 설치되므로 한 번만 실행해야합니다.
플러그인이 설치되어 있는지 확인합니다. 예를 들어,
SHOW PLUGINS
을 사용합니다.mysql>
SHOW PLUGINS\G
... *************************** 21. row ******************** ******* Name : test_plugin_server Status : ACTIVE Type : AUTHENTICATION Library : auth_test_plugin.so License : GPL플러그인을 체크하기위한 다른 방법은 섹션 5.1.8.2 "서버 플러그인 정보 얻기" 를 참조하십시오.
특정 서버 플러그인을 사용하여 MySQL 사용자를 인증해야 함을 지정하려면 사용자를 만들려면
CREATE USER
문IDENTIFIED WITH
절에 플러그인의 이름을 지정합니다.CREATE USER 'testuser'@ 'localhost'IDENTIFIED WITH test_plugin_server;
클라이언트 프로그램을 사용하여 서버에 연결합니다. 테스트 플러그인은 기본 MySQL 인증과 같은 방법으로 인증을 실행합니다. 따라서 서버에 연결하는 데 일반적으로 사용되는 일반
--user
및--password
옵션을 지정합니다. 예 :shell>
mysql --user=
your_name
--password=your_pass
testuser
에 의한 연결의 경우, 서버는test_plugin_server
라는 서버 측 플러그인을 사용하여 계정을 인증 할 필요가 있다는 것을 인식하고 클라이언트 플러그인 (이 경우auth_test_plugin
)을 사용할 필요가있다 클라이언트 프로그램과 통신합니다.계정이 서버 프로그램과 클라이언트 프로그램 모두 기본 인 인증 방식을 사용하는 경우 서버 플러그인을 사용하는 클라이언트와 통신 할 필요가없고 클라이언트와 서버의 협상 라운드 트립이 발생하는 것을 방지 할 수 합니다. 현재 이것은 기본 MySQL 인증 (
mysql_native_password
)를 사용하는 계정에 적용됩니다.mysql 명령 행에서
--default-auth=
옵션을 지정하면 프로그램에서 사용하도록 요구하는 클라이언트 측 플러그인을 명시 적으로 만들 수 있습니다. 그러나 사용자 계정이 다른 플러그인을 요구 한 경우,이 서버에 의해 무시됩니다.plugin_name
클라이언트 프로그램에서 플러그인을 찾을 수없는 경우, 플러그인이 배치되는 위치를 표시
--plugin-dir=
옵션을 지정합니다.dir_name
--skip-grant-tables
옵션으로 서버를 시작하면 서버는 클라이언트 인증을 실행하지 않고 모든 클라이언트가 연결하는 것을 허용하는 인증 플러그인은로드 된로도 사용되지 않습니다. 이것은 안전하지 않기 때문에 원격 클라이언트가 연결을 방지하기 위해, --skip-networking
과 함께 --skip-grant-tables
를 사용할 필요가있을 수도 있습니다.