6.3.8.6 Windows 네이티브 인증 플러그인
Windows 인증 플러그인은 상용 확장 기능입니다. 상용 제품 (MySQL Enterprise Edition)에 대해 자세히 학습하려면 http : //www.mysql.com/products/를 참조하십시오.
MySQL 5.6.10 시점에서 Windows 용 MySQL의 상용 배포는 Windows에서 외부 인증을 수행하는 인증 플러그인이 포함되어 있습니다. 이것을 사용하면 MySQL 서버가 기본 Windows 서비스를 사용하여 클라이언트 연결을 인증 할 수 있습니다. Windows에 로그인 한 사용자는 암호를 추가로 지정하지 않고 자신의 환경 정보에 따라 MySQL 클라이언트 프로그램에서 서버에 연결할 수 있습니다.
클라이언트와 서버는 인증 핸드 셰이크에서 데이터 패킷을 교환합니다. 이 교환의 결과로 서버는 Windows OS의 클라이언트의 아이덴티티를 나타내는 보안 컨텍스트 객체를 만듭니다. 이 아이덴티티 클라이언트 계정의 이름이 포함되어 있습니다. Windows 인증 플러그인은 클라이언트의 정체성을 사용하여 특정 계정이나 그룹의 멤버인지 여부를 확인합니다. 기본적으로 인증 협상 Kerberos가 사용됩니다. Kerberos를 사용할 수없는 경우 NTLM이 사용됩니다.
Windows 인증 플러그인은 다음과 같은 기능을 제공합니다.
외부 인증 :이 플러그인을 사용하면 MySQL 서버는 MySQL 부여 테이블의 외부에서 정의 된 사용자의 연결을 받아 들일 수 있습니다.
프록시 사용자 지원 :이 플러그인은 클라이언트 사용자와 다른 사용자 이름을 MySQL에 반환 할 수 있습니다. 즉,이 플러그인은 외부 Windows에서 인증 된 사용자가 가져야 할 권한을 정의하는 MySQL 사용자를 반환 할 수 있습니다. 예를 들어,
joe
라는 Windows 사용자는 연결하여developer
라는 MySQL 사용자 권한을 가질 수 있습니다.
다음 표는 플러그인 및 라이브러리 파일의 이름을 나타냅니다. 파일의 위치는 plugin_dir
시스템 변수에 지정된 디렉토리 여야합니다. 설치 정보는 섹션 6.3.8.6.1 "Windows 인증 플러그인 설치" 를 참조하십시오.
표 6.12 MySQL Windows 인증 플러그인
서버 측의 플러그인 이름 | authentication_windows |
클라이언트 플러그인 이름 | authentication_windows_client |
라이브러리 오브젝트 파일 이름 | authentication_windows.dll |
라이브러리 파일에는 서버 측 플러그인 만 포함되어 있습니다. 클라이언트 플러그인은 libmysqlclient
클라이언트 라이브러리에 포함되어 있습니다.
서버 측의 Windows 인증 플러그인은 상용 배포에만 포함되어 있습니다. MySQL 커뮤니티 배포판에는 포함되어 있지 않습니다. 클라이언트 플러그인은 커뮤니티 배포를 포함한 모든 메일에 포함되어 있습니다. 이렇게하면 모든 배포에서 서버 측의 플러그인이로드 된 서버에 연결할 수 클라이언트 허용됩니다.
Windows 인증 플러그인은 MySQL 5.6에서 지원되는 모든 버전의 Windows에서 지원됩니다 ( http://www.mysql.com/support/supportedplatforms/database.html 를 참조하십시오). 여기에는 MySQL Server 5.6.10 이상이 필요합니다.
MySQL의 플러그 인증에 대한 일반적인 정보는 섹션 6.3.7 "플러그 인증" 을 참조하십시오. 프록시 사용자 내용은 섹션 6.3.9 "프록시 사용자" 를 참조하십시오.
6.3.8.6.1 Windows 인증 플러그인 설치
Windows 인증 플러그인은 MySQL 플러그인 디렉토리 ( plugin_dir
시스템 변수로 지정된 디렉토리)에 설치해야합니다. 필요에 따라 서버를 시작할 때 플러그인 디렉토리 위치를 서버에 지시하는 plugin_dir
의 값을 설정합니다.
플러그인을 활성화하려면 --plugin-load
옵션을 사용하여 서버를 시작합니다. 예를 들어, my.ini
파일에 다음 행을 삽입합니다.
[mysqld] plugin-load = authentication_windows.dll
이 플러그인을 사용하여 인증 된 MySQL 계정에는 CREATE USER
또는 GRANT
문 IDENTIFIED WITH
절 플러그인 이름 authentication_windows
을 사용합니다.
플러그인의 설치를 확인하려면 INFORMATION_SCHEMA.PLUGINS
테이블을 조사하거나 SHOW PLUGINS
문을 사용합니다. 섹션 5.1.8.2 "서버 플러그인 정보 얻기" 를 참조하십시오.
6.3.8.6.2 Windows 인증 플러그인 사용
Windows 인증 플러그인은 Windows에 로그인 한 사용자가 추가 암호를 지정하지 않고, MySQL 서버에 연결할 수 있도록 MySQL 계정의 사용을 지원합니다. 서버 측의 플러그인이 활성화되어 있고 클라이언트 프로그램이 libmysqlclient
에 포함 된 클라이언트 측 플러그인을 추가하기 위해 충분히 새로운 버전임을 전제가되고 있습니다. DBA가 서버 측 플러그인을 사용하여 그것을 사용하도록 계정을 설정하면 클라이언트는 자신의 옆에 다른 설정을 할 필요없이 해당 계정을 사용하여 연결할 수 있습니다.
CREATE USER
또는 GRANT
문 IDENTIFIED WITH
절에서 Windows 인증 플러그인을 참조하려면 authentication_windows
라는 이름을 사용합니다. Rafal
와 Tasha
는 Windows 사용자 및 Administrators
또는 Power Users
그룹의 모든 사용자가 MySQL에 연결을 허용한다고 가정합니다. 이렇게 설정하려면 Windows 플러그인을 사용하여 인증하는 sql_admin
라는 MySQL 계정을 만듭니다.
CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal, Tasha, Administrators "Power Users"';
플러그인 이름은 authentication_windows
입니다. AS
키워드 다음에 오는 문자열은 인증 문자열입니다. Rafal
또는 Tasha
라는 Windows 사용자 및 Administrators
또는 Power Users
그룹의 모든 Windows 사용자가 MySQL 사용자 sql_admin
로 서버에 인증이 허용되도록 지정됩니다. 후자의 그룹 이름에 공백이 포함되어 있기 때문에 큰 따옴표로 묶어야합니다.
sql_admin
계정을 생성 한 후에는 Windows에 로그인 한 사용자는 계정을 사용하여 서버에 연결을 시도 할 수 있습니다.
C : \> mysql --user=sql_admin
여기에 암호가 필요하지 않습니다. authentication_windows
플러그인은 Windows 보안 API를 사용하여 연결된 Windows 사용자를 확인합니다. 사용자가 Rafal
또는 Tasha
라는이거나 Administrators
또는 Power Users
그룹에 속하는 경우, 서버는 액세스 권한을 부여하고 클라이언트는 sql_admin
로 인증되어 sql_admin
계정에 부여 된 모든 권한을가집니다. 그렇지 않으면 서버는 액세스를 거부합니다.
Windows 인증 플러그인 인증 문자열의 구문은 다음과 같은 규칙에 따릅니다.
문자열은 쉼표로 구분 된 하나 이상의 사용자 매핑으로 구성됩니다.
각 사용자 매핑은 Windows 사용자 또는 그룹 이름이 MySQL 사용자 이름에 연결됩니다.
win_user_or_group_name=sql_user_name
win_user_or_group_name
후자의 구문에
sql_user_name
값을 지정하지 않으면 값은 암시 적으로CREATE USER
문에서 생성 된 MySQL 사용자입니다. 따라서 다음 명령문은 동일합니다.CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal, Tasha, Administrators "Power Users"'; CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal = sql_admin, Tasha = sql_admin, Administrators = sql_admin, "Power Users"= sql_admin ';
MySQL의 문자열에서 백 슬래시 (
'\'
)는 이스케이프 문자이기 때문에 값의 각 백 슬래시는 이중으로 입력해야합니다.이중 인용되지 않은 선행 또는 후행 공백은 무시됩니다.
인용되지 않은
win_user_or_group_name
및sql_user_name
의 값은 등호 쉼표 또는 공백 문자를 제외한 모든 문자를 포함 할 수 있습니다.win_user_or_group_name
또는sql_user_name
값을 큰 따옴표로 묶으면 따옴표 사이의 모든 문자가 값의 일부입니다. 예를 들어, 이름에 공백이 포함되어있는 경우에는 이것이 필요합니다. 큰 따옴표와 백 슬래시를 제외한 따옴표 내의 모든 문자가 유효합니다. 어느 문자를 포함하려면 백 슬래시를 사용하여 이스케이프합니다.win_user_or_group_name
값은 Windows 주체 (로컬 또는 도메인)에 대한 기존의 구문이 사용됩니다. 예 (백 슬래시를 이중에 유의하십시오) :domain \\ user \\ user domain \\ group \\ group BUILTIN \\ WellKnownGroup
클라이언트를 인증하기 위해 서버에서 호출되면 플러그인은 인증 문자열을 왼쪽에서 오른쪽으로 스캔하여 Windows 사용자에게 사용자 나 그룹의 일치 여부를 확인합니다. 일치가있는 경우,이 플러그인은 해당 sql_user_name
을 MySQL 서버에 리턴합니다. 일치하는 경우는 인증에 실패합니다.
사용자 이름의 일치는 그룹 이름의 일치보다 우선합니다. win_user
라는 Windows 사용자가 win_group
의 멤버이며, 인증 문자열이 다음과 같다고 가정합니다.
'win_group = sql_user1, win_user = sql_user2'
win_user
이 MySQL 서버에 연결하면 win_group
과 win_user
모두에 일치합니다. 그룹이 인증 문자열의 처음에 나열되지만 더 구체적인 사용자의 일치가 그룹의 일치보다 우선되기 때문에 플러그인 sql_user2
으로 사용자를 인증합니다.
서버가 실행되는 것과 동일한 컴퓨터에서 연결은 Windows 인증은 항상 작동합니다. 컴퓨터 간의 연결은 두 컴퓨터를 Windows Active Directory에 등록해야합니다. 동일한 Windows 도메인에있는 경우 도메인 이름을 지정할 필요가 없습니다. 다음의 예와 같이 다른 도메인에서의 연결을 허용 할 수 있습니다.
CREATE USER sql_accounting IDENTIFIED WITH authentication_windows AS 'SomeDomain \\ Accounting';
여기에서 SomeDomain
은 다른 도메인의 이름입니다. 백 슬래시 문자는 문자열의 MySQL 이스케이프 문자이기 때문에 이중으로 입력되어 있습니다.
MySQL은 클라이언트가 하나의 계정을 사용하여 MySQL 서버에 접속하여 인증 할 수 있지만 연결되면 다른 계정의 권한을 가진다는 프록시 사용자의 개념을 지원하고 있습니다 ( 섹션 6.3.9 "프록시 사용자 " 를 참조하십시오). 다음과 같이 Windows 사용자는 단일 사용자 이름을 사용하여 연결할 수 있지만 Windows 사용자 및 그룹 이름에 따라 특정 MySQL 계정에 매핑된다고 가정합니다.
local_user
및MyDomain\domain_user
는 로컬 및 도메인의 Windows 사용자는local_wlad
MySQL 계정에 매핑해야합니다.MyDomain\Developers
도메인 그룹의 사용자는local_dev
MySQL 계정에 매핑해야합니다.로컬 컴퓨터의 관리자는
local_admin
MySQL 계정에 매핑해야합니다.
이렇게 설정하려면 연결된 Windows 사용자의 프록시 계정을 만들고 사용자와 그룹이 적절한 MySQL 계정 ( local_wlad
, local_dev
, local_admin
)에 매핑되도록이 계정을 구성합니다. 또한 실행해야하는 작업에 적합한 권한을 MySQL 계정에 부여합니다. 다음 단계에서는 프록시 계정으로 win_proxy
가 사용 된 프록시 대상 계정으로 local_wlad
, local_dev
및 local_admin
가 사용되고 있습니다.
프록시 MySQL 계정을 만듭니다.
CREATE USER win_proxy IDENTIFIED WITH authentication_windows AS 'local_user = local_wlad, MyDomain \\ domain_user = local_wlad, MyDomain \\ Developers = local_dev, BUILTIN \\ Administrators = local_admin ';
프록시가 작동하려면 프록시 대상 계정이 존재해야하기 때문에 다음과 같이 작성합니다.
CREATE USER local_wlad IDENTIFIED BY 'wlad_pass'; CREATE USER local_dev IDENTIFIED BY 'dev_pass'; CREATE USER local_admin IDENTIFIED BY 'admin_pass';
이 계정의 암호를 아무에게도 알리지 수없는 경우 다른 사용자는이 암호를 사용하여 MySQL 서버에 직접 연결할 수 없습니다.
또한 필요한 권한을 각 프록시 대상 계정에 부여
GRANT
문 (숨기기)도 발행하도록하십시오.프록시 계정은 프록시 대상 계정마다
PROXY
권한을 가지고 있어야합니다.GRANT PROXY ON local_wlad TO win_proxy; GRANT PROXY ON local_dev TO win_proxy; GRANT PROXY ON local_admin TO win_proxy;
이 시점에서 local_user
및 MyDomain\domain_user
는 Windows 사용자는 win_proxy
로 MySQL 서버에 연결하여 인증되면 인증 문자열 (이 경우 local_wlad
)에 지정된 계정의 권한을가집니다. win_proxy
로 연결하는 MyDomain\Developers
그룹의 사용자는 local_dev
계정의 권한을 가지고 있습니다. BUILTIN\Administrators
그룹의 사용자는 local_admin
계정의 권한을 가지고 있습니다.
자신의 MySQL 계정을 가지고 있지 않은 모든 Windows 사용자가 프록시 계정을 통과하도록 인증을 구성하려면 이전 단계에서 win_proxy
을 기본 프록시 사용자 ( ''@''
)로 바꾸십시오 . 기본 프록시 사용자 내용은 섹션 6.3.9 "프록시 사용자" 를 참조하십시오.
Connection / Net 6.4.4 이상에서 Connector / Net 연결 문자열과 함께 Windows 인증 플러그인을 사용하는 방법은 Using the Windows Native Authentication Plugin 을 참조하십시오.
authentication_windows_use_principal_name
및 authentication_windows_log_level
시스템 변수는 Windows 인증 플러그인에 추가 제어가 제공되고 있습니다. 섹션 5.1 "서버 시스템 변수" 를 참조하십시오.