6.3.8.5 PAM 인증 플러그인
PAM 인증 플러그인은 상용 확장 기능입니다. 상용 제품 (MySQL Enterprise Edition)에 대해 자세히 학습하려면 http : //www.mysql.com/products/를 참조하십시오.
MySQL 5.6.10 시점에서 MySQL의 상용 배포는 MySQL 서버가 PAM (Pluggable Authentication Module)을 사용하여 MySQL 사용자를 인증 할 인증 플러그인이 포함되어 있습니다. PAM을 사용하면 시스템은 표준 인터페이스를 사용하여 다양한 종류의 인증 방식 (Unix 암호 및 LDAP 디렉토리 등)에 액세스 할 수 있습니다.
PAM 플러그인은 MySQL 서버로 전달되는 정보 (사용자 이름, 호스트 이름, 암호 인증 문자열 등) 이외에, PAM 검색에서 사용 가능한 임의의 방법이 사용됩니다. 이 플러그인은 PAM과 비교하여 사용자 자격 증명을 확인하고 「Authentication succeeded, Username is
또는 user_name
」「Authentication failed」
를 반환합니다.
PAM 인증 플러그인은 다음과 같은 기능을 제공합니다.
외부 인증 :이 플러그인을 사용하면 MySQL 서버는 MySQL 부여 테이블의 외부에서 정의 된 사용자의 연결을 받아 들일 수 있습니다.
프록시 사용자 지원 :이 플러그인은 외부 사용자가 속한 그룹 및 지정된 인증 문자열에 따라 로그인 사용자와 다른 사용자 이름을 MySQL에 반환 할 수 있습니다. 즉,이 플러그인은 외부 PAM 인증 된 사용자가 가져야 할 권한을 정의하는 MySQL 사용자를 반환 할 수 있습니다. 예를 들어,
joe
라는 PAM 사용자는 연결하여developer
라는 MySQL 사용자 권한을 가질 수 있습니다.
다음 표는 플러그인 및 라이브러리 파일의 이름을 나타냅니다. 파일 이름 접미사는 시스템에 따라 다를 수 있습니다. 파일의 위치는 plugin_dir
시스템 변수에 지정된 디렉토리 여야합니다. 설치 내용은 섹션 6.3.8.5.1 "PAM 인증 플러그인 설치" 를 참조하십시오.
표 6.11 MySQL PAM 인증 플러그인
서버 측의 플러그인 이름 | authentication_pam |
클라이언트 플러그인 이름 | mysql_clear_password |
라이브러리 오브젝트 파일 이름 | authentication_pam.so |
라이브러리 파일에는 서버 측 플러그인 만 포함되어 있습니다. 클라이언트 플러그인은 libmysqlclient
클라이언트 라이브러리에 포함되어 있습니다. 섹션 6.3.8.7 "클라이언트 측의 일반 텍스트 인증 플러그인" 을 참조하십시오.
서버 측의 PAM 인증 플러그인은 상용 배포에만 포함되어 있습니다. MySQL 커뮤니티 배포판에는 포함되어 있지 않습니다. 서버 측의 플러그인과 통신하는 클라이언트의 일반 텍스트 플러그인은 MySQL 클라이언트 라이브러리에 내장 된 커뮤니티 배포를 포함한 모든 메일에 포함되어 있습니다. 그러면 5.6.10 이후의 임의의 배포에서 서버 측의 플러그인이로드 된 서버에 연결할 수 클라이언트 허용됩니다.
PAM 인증 플러그인은 Linux 및 Mac OS X에서 테스트되고 있습니다. 여기에는 MySQL Server 5.6.10 이상이 필요합니다.
MySQL의 플러그 인증에 대한 일반적인 정보는 섹션 6.3.7 "플러그 인증" 을 참조하십시오. 프록시 사용자 내용은 섹션 6.3.9 "프록시 사용자" 를 참조하십시오.
6.3.8.5.1 PAM 인증 플러그인 설치
PAM 인증 플러그인은 MySQL 플러그인 디렉토리 ( plugin_dir
시스템 변수로 지정된 디렉토리)에 배치해야합니다. 필요에 따라 서버를 시작할 때 플러그인 디렉토리 위치를 서버에 지시하는 plugin_dir
의 값을 설정합니다.
플러그인을 활성화하려면 --plugin-load
옵션을 사용하여 서버를 시작합니다. 예를 들어, my.cnf
파일에 다음 행을 삽입합니다. 오브젝트 파일의 접미사가 시스템에서 .so
과 다를 올바른 접미사로 바꾸십시오.
[mysqld] plugin-load = authentication_pam.so
이 플러그인을 사용하여 인증해야 MySQL 계정에는 CREATE USER
또는 GRANT
문 IDENTIFIED WITH
절 authentication_pam
라는 플러그인 이름을 사용합니다.
플러그인의 설치를 확인하려면 INFORMATION_SCHEMA.PLUGINS
테이블을 조사하거나 SHOW PLUGINS
문을 사용합니다. 섹션 5.1.8.2 "서버 플러그인 정보 얻기" 를 참조하십시오.
6.3.8.5.2 PAM 인증 플러그인 사용
이 섹션에서는 PAM 인증 플러그인을 사용하여 MySQL 클라이언트 프로그램에서 서버에 연결하는 방법을 설명합니다. 서버 측의 플러그인이 활성화되어 있고 클라이언트 플러그인을 추가하기에 충분한 새로운 클라이언트 프로그램 인 것이 전제가되고 있습니다.
PAM 플러그인의 통신 상대 인 클라이언트 플러그인은 PAM에 전달할 수 있도록 간단하게 암호를 일반 텍스트로 서버에 전송합니다. 이는 일부 구성에서 보안 문제가 발생할 수 있지만, 서버 측의 PAM 라이브러리를 사용하기 위해서는 필요합니다. 암호가 유출 될 가능성이있는 경우 문제를 해결하려면 클라이언트는 SSL을 사용하여 MySQL 서버에 접속하도록하십시오. 섹션 6.3.8.7 "클라이언트 측의 일반 텍스트 인증 플러그인" 을 참조하십시오.
CREATE USER
또는 GRANT
문 IDENTIFIED WITH
절에서 PAM 인증 플러그인을 참조하려면 authentication_pam
라는 이름을 사용합니다. 예 :
CREATE USERuser
IDENTIFIED WITH authentication_pam AS 'authentication_string
';
인증 문자열은 다음 유형의 정보가 제공됩니다.
PAM은 시스템 관리자가 특정 응용 프로그램에 대한 인증 방법을 구성하는 데 사용할 수있는 이름 인 "서비스 이름"의 개념을 지원하고 있습니다. 이러한 여러 "응용 프로그램"이 단일 데이터베이스 서버 인스턴스에 연결된 가능성도 있기 때문에 서비스 이름의 선택은 SQL 응용 프로그램 개발자에게 달려 있습니다. PAM을 사용하여 인증 할 계정을 정의 할 때 인증 문자열에서 서비스 이름을 지정합니다.
PAM은 로그인시 지정된 로그인 이름이 아닌 MySQL 사용자 이름을 PAM 모듈에서 서버에 반환하는 방법이 제공되고 있습니다. 인증 문자열을 사용하여 로그인 이름과 MySQL 사용자 이름과 매핑을 제어합니다. 프록시 사용자의 기능을 활용하려면이 유형 매핑을 인증 문자열에 포함해야합니다.
예를 들어, 서비스 이름이 mysql
이며, root
및 users
PAM 그룹의 사용자를 developer
및 data_entry
사용자에 매핑 할 필요가있는 경우는 각각 다음과 같은 명령문을 사용합니다.
CREATE USER user
IDENTIFIED WITH authentication_pam
AS 'mysql, root = developer, users = data_entry';
PAM 인증 플러그인 인증 문자열의 구문은 다음과 같은 규칙에 따릅니다.
문자열은 PAM 서비스 명으로 구성되며 각 그룹 이름과 SQL 사용자 이름을 지정하는 하나 이상의 키워드와 값의 쌍으로 구성된 그룹 매핑 목록을 옵션으로 계속됩니다.
pam_service_name
[,group_name
=sql_user_name
] ...
쌍 앞에 쉼표를 지정해야합니다.group_name
=sql_user_name
이중 인용되지 않은 선행 또는 후행 공백은 무시됩니다.
인용되지 않은
pam_service_name
,group_name
및sql_user_name
의 값은 등호 쉼표 또는 공백 문자를 제외한 모든 문자를 포함 할 수 있습니다.pam_service_name
,group_name
또는sql_user_name
값을 큰 따옴표로 묶으면 따옴표 사이의 모든 문자가 값의 일부입니다. 예를 들어, 값에 공백이 포함되어있는 경우에는 이것이 필요합니다. 따옴표 및 백 슬래시 ('\'
)를 제외한 모든 문자를 사용할 수 있습니다. 어느 문자를 포함하려면 백 슬래시를 사용하여 이스케이프합니다.
이 플러그인은 각 로그인 체크시 인증 문자열을 분석합니다. 오버 헤드를 최소화하기 위해 가능한 한 문자열을 짧게 유지합니다.
플러그인이 성공적으로 로그인을 인증하면 인증 문자열에서 그룹 매핑 목록을 검색하고 그 목록을 사용하여 외부 사용자가 구성원 인 그룹에 따라 MySQL 서버에 다른 사용자 이름을 반환합니다 .
인증 문자열에 그룹 매핑 목록이 포함되어 있지 않은 경우, 플러그인은 로그인 이름을 반환합니다.
인증 문자열에 그룹 매핑 목록이 포함되어있는 경우 플러그인은 목록의 각
쌍을 왼쪽에서 오른쪽으로 조사하고 인증 된 사용자에게 할당 된 그룹의 MySQL 이외의 디렉토리 그리고,group_name
=sql_user_name
group_name
값의 일치를 찾으려고 처음 발견 된 일치에 해당하는sql_user_name
을 반환합니다. 플러그인이 어떤 그룹의 일치를 찾은 경우 로그인 이름을 반환합니다. 플러그인 디렉토리의 그룹을 찾을 수없는 경우는 그룹 매핑 목록을 무시하고 로그인 이름을 반환합니다.
다음 섹션에서는 PAM 인증 플러그인을 사용하는 몇 가지 인증 시나리오를 설정하는 방법에 대해 설명합니다.
프록시 사용자가 없습니다. 여기에서는 로그인 이름과 암호를 검사 할 때에만 PAM이 사용됩니다. MySQL 서버에 접속이 허용되는 외부 사용자는 모든 외부 PAM 인증을 사용하도록 정의 된 일치하는 MySQL 계정을 가져야합니다. PAM에서 지원되는 다양한 방식으로 인증을 수행 할 수 있습니다. 이 설명에서는 기존의 Unix 암호 및 LDAP를 사용하는 방법을 보여줍니다.
PAM 인증은 프록시 사용자 또는 그룹을 통해 실행되지 않는 경우 MySQL 계정은 Unix 계정과 동일한 사용자 이름을 가질 필요가 있습니다. MySQL 사용자 이름은 16 자로 제한되어 있기 때문에 ( 섹션 6.2.2 "권한 시스템 부여 테이블" 을 참조하십시오), PAM의 비 프록시 인증은 최대 16 문자의 이름을 가진 Unix 계정으로 제한됩니다 합니다.
프록시 로그인 만 및 그룹 매핑. 이 시나리오에서는 다양한 권한 세트를 정의하는 여러 개의 MySQL 계정을 만듭니다. (이상은 이들을 사용하여 직접 로그인하지 않도록하는 것입니다.) 그 후, 권한 세트를 보유하고있는 여러 개의 MySQL 계정에 모든 외부 로그인을 매핑하는 일부 매핑 구성표가 ( 일반적으로 사용자가 속한 외부 그룹에 의해) 사용되는 PAM을 사용하여 기본 사용자 인증을 정의합니다. 로그인하는 모든 사용자는 MySQL 계정 중 하나에 매핑 된 그 권한을 사용합니다. 이 설명에서는 Unix 암호를 사용하여이를 설정하는 방법을 보여줍니다 만, 대신 LDAP 등의 기타 PAM 방식이 사용 될 수 있습니다.
이 시나리오에서는 차이가있을 수 있습니다. 예를 들어, 일부 사용자에 직접 로그인하는 것을 허용하지만, 다른 사용자는 프록시 사용자를 통해 연결하도록 요구할 수 있습니다.
이 예는 다음의 것이 전제가되어 있습니다. 시스템이 다르게 설정되어있는 경우, 약간의 조정이 필요할 수도 있습니다.
PAM 구성 디렉토리
/etc/pam.d
입니다.PAM 서비스 이름은
mysql
입니다. 이것은 PAM 구성 디렉토리에mysql
이라는 PAM 파일 (존재하지 않는 경우 파일을 만듭니다)을 설정해야한다는 것을 의미합니다. 다른 서비스 이름을 사용하는 경우 파일 이름이 다르기 때문에CREATE USER
및GRANT
문AS
절에 다른 이름을 사용해야합니다.이 예에서는
antonio
는 로그인 이름과verysecret
라는 암호가 사용되어 있습니다. 인증하는 사용자를 지원하도록이를 변경합니다.
PAM 인증 플러그인 초기화시 AUTHENTICATION_PAM_LOG
환경의 값이 설정되어 있는지 확인합니다. 이 경우 플러그인을 사용하면 표준 출력에 진단 메시지의 로깅을 사용할 수 있습니다. 이러한 메시지는 플러그인이 인증을 수행 할 때 발생하는 PAM 관련 문제를 디버깅 할 때 도움이 될 수 있습니다. 자세한 내용은 섹션 6.3.8.5.3 "PAM 인증 플러그인 디버깅" 을 참조하십시오.
6.3.8.5.2.1 프록시 사용자를 사용하지 Unix 암호 인증
이 인증 시나리오에서는 Unix 사용자의 로그인 이름과 암호를 확인하는 데에만 PAM이 사용됩니다. MySQL 서버에 접속이 허용되는 외부 사용자는 모든 외부 PAM 인증을 사용하도록 정의 된 일치하는 MySQL 계정을 가져야합니다.
PAM의 Unix 인증 암호
verysecret
를 사용하여antonio
로 로그인 할 수 있도록되어 있는지 확인합니다.mysql
서비스를 인증하도록 PAM을 설정합니다./etc/pam.d/mysql
에 다음 행을 삽입합니다.# % PAM-1.0 auth include password-auth account include password-auth
Unix 로그인 이름과 동일한 사용자 이름을 가진 MySQL 계정을 만들고 PAM 플러그인을 사용하여 인증하도록 정의합니다.
CREATE USER 'antonio'@ 'localhost' IDENTIFIED WITH authentication_pam AS 'mysql'; GRANT ALL PRIVILEGES ON mydb. * TO 'antonio'@ 'localhost';
mysql 명령 행 클라이언트를 사용하여 MySQL 서버에 접속을 시도합니다. 예 :
mysql --user = antonio --password = verysecret --enable-cleartext-plugin mydb
서버는 연결을 허용하고 이후의 쿼리는 다음과 같은 출력을 반환해야합니다.
mysql>
SELECT USER(), CURRENT_USER(), @@proxy_user;
+-------------------+-------------------+--------------+ | USER() | CURRENT_USER() | @@proxy_user | +-------------------+-------------------+--------------+ | antonio@localhost | antonio@localhost | NULL | +-------------------+-------------------+--------------+이것은
antonio
가antonio
MySQL 계정에 부여 된 권한을 사용하여 프록시가 발생하지 않는 것을 나타냅니다.
6.3.8.5.2.2 프록시 사용자를 사용하지 않는 LDAP 인증
이 인증 시나리오에서는 LDAP 사용자의 로그인 이름과 암호를 확인하는 데에만 PAM이 사용됩니다. MySQL 서버에 접속이 허용되는 외부 사용자는 모든 외부 PAM 인증을 사용하도록 정의 된 일치하는 MySQL 계정을 가져야합니다.
PAM의 LDAP 인증에서 암호
verysecret
를 사용하여antonio
로 로그인 할 수 있도록되어 있는지 확인합니다.LDAP를 사용하여
mysql
서비스를 인증하도록 PAM을 설정합니다./etc/pam.d/mysql
에 다음 행을 삽입합니다.# % PAM-1.0 auth required pam_ldap.so account required pam_ldap.so
PAM 오브젝트 파일의 접미사가 시스템에서
.so
과 다를 올바른 접미사로 바꾸십시오.MySQL 계정 생성 및 서버에 대한 연결은 섹션 6.3.8.5.2.1 "프록시 사용자를 사용하지 Unix 암호 인증" 에서 설명한 것과 동일합니다.
6.3.8.5.2.3 프록시 사용자 및 그룹 매핑을 사용한 Unix 암호 인증
이 인증 제도는 다양한 권한 세트를 정의하는 여러 개의 MySQL 계정에, PAM을 사용하여 MySQL 서버에 접속하는 사용자를 매핑하는 그룹 매핑 및 프록시가 사용됩니다. 사용자는 권한을 정의하는 계정을 사용하여 직접 연결하지 않습니다. 대신 권한을 보유하고있는 여러 개의 MySQL 계정에 모든 외부 로그인을 매핑하는 매핑 구성표가 사용되는 PAM을 사용하여 기본 프록시 사용자 인증을 사용하여 연결합니다. 연결하는 사용자는 MySQL 계정 중 하나에 매핑 된 그 권한을 사용합니다.
이 절차에서는 Unix 암호 인증이 사용됩니다. 대신 LDAP를 사용하려면 전반에 표시된 섹션 6.3.8.5.2.2 "프록시 사용자를 사용하지 않는 LDAP 인증" 절차를 참조하십시오.
PAM의 Unix 인증 암호
verysecret
를 사용하여antonio
로 로그인 할 수있는 권한이 있음 및antonio
가root
또는users
의 구성원인지 확인합니다.mysql
서비스를 인증하도록 PAM을 설정합니다./etc/pam.d/mysql
에 다음 행을 삽입합니다.# % PAM-1.0 auth include password-auth account include password-auth
프록시 대상 계정에 외부 PAM 사용자를 매핑 할 기본 프록시 사용자를 만듭니다.
root
PAM 그룹에서developer
MySQL 계정에 외부 사용자를 매핑하고users
PAM 그룹에서data_entry
MySQL 계정에 외부 사용자를지도합니다.CREATE USER ''@ '' IDENTIFIED WITH authentication_pam AS 'mysql, root = developer, users = data_entry';
서비스 이름 다음 매핑 목록은 프록시 사용자를 설정할 때 필요합니다. 그렇지 않으면 플러그인은 적절한 프록시 대상 사용자 이름에 PAM 그룹의 이름을지도하는 방법을 지시 할 수 없습니다.
데이터베이스에 액세스하는 데 사용되는 프록시 대상 계정을 만듭니다.
CREATE USER 'developer'@ 'localhost'IDENTIFIED BY '
very secret password
'; GRANT ALL PRIVILEGES ON mydevdb. * TO 'developer'@ 'localhost'; CREATE USER 'data_entry'@ 'localhost'IDENTIFIED BY 'very secret password
'; GRANT ALL PRIVILEGES ON mydb. * TO 'data_entry'@ 'localhost';이 계정의 암호를 아무에게도 알리지 수없는 경우 다른 사용자는이 암호를 사용하여 MySQL 서버에 직접 연결할 수 없습니다. 대신 사용자는 PAM을 사용하여 인증하고 자신의 PAM 그룹에 따라 프록시 의한
developer
또는data_entry
계정을 사용하는 것으로 예상됩니다.프록시 대상 계정의 프록시 계정에
PROXY
권한을 부여합니다.GRANT PROXY ON 'developer'@ 'localhost'TO '@' '; GRANT PROXY ON 'data_entry'@ 'localhost'TO '@' ';
mysql 명령 행 클라이언트를 사용하여 MySQL 서버에 접속을 시도합니다. 예 :
mysql --user = antonio --password = verysecret --enable-cleartext-plugin mydb
서버는
''@''
계정을 사용하여 연결을 인증합니다. 권한antonio
멤버로 속한 PAM 그룹에 따라 다릅니다.antonio
이root
PAM 그룹의 구성원 인 경우, PAM 플러그인은developer
MySQL 사용자 이름에root
를지도하고 그 이름을 서버에 반환합니다. 서버는''@''
가developer
대한PROXY
권한을 가지고 있는지 확인하고 연결을 허용합니다. 이후의 쿼리는 다음과 같은 출력을 반환해야합니다.mysql>
SELECT USER(), CURRENT_USER(), @@proxy_user;
+-------------------+---------------------+--------------+ | USER() | CURRENT_USER() | @@proxy_user | +-------------------+---------------------+--------------+ | antonio@localhost | developer@localhost | ''@'' | +-------------------+---------------------+--------------+이것은
antonio
이developer
MySQL 계정에 부여 된 권한을 사용하여 기본 프록시 사용자 계정에서 프록시가 발생하지 않는 것을 나타냅니다.antonio
이root
PAM 그룹의 멤버가 아니지만,users
그룹의 구성원 인 경우에도 유사한 프로세스가 발생하지만 플러그인은data_entry
MySQL 사용자 이름에user
그룹 구성원을지도하고 그 이름을 서버 에 반환합니다. 이 경우antonio
는data_entry
MySQL 계정의 권한을 사용합니다.mysql>
SELECT USER(), CURRENT_USER(), @@proxy_user;
+ ------------------- + ---------------------- + ------ -------- + | USER () | CURRENT_USER () | @@ proxy_user | + ------------------- + ---------------------- + ------ -------- + | antonio @ localhost | data_entry @ localhost | '@' '| + ------------------- + ---------------------- + ------ -------- +
6.3.8.5.3 PAM 인증 플러그인 디버깅
PAM 인증 플러그인 초기화시 AUTHENTICATION_PAM_LOG
환경의 값이 설정되어 있는지 확인합니다 (값은 문제 없습니다). 이 경우 플러그인을 사용하면 표준 출력에 진단 메시지의 로깅을 사용할 수 있습니다. 이러한 메시지는 플러그인이 인증을 수행 할 때 발생하는 PAM 관련 문제를 디버깅 할 때 도움이 될 수 있습니다.
일부 메시지는 PAM 플러그인 소스 파일과 줄 번호에 대한 참조가 포함되어 있습니다. 이것을 사용하면 플러그인 액션을 그것이 발생하는 코드의 위치에 더 긴밀하게 연결할 수 있습니다.
다음 대본에서는 로깅을 사용하면 생성되는 정보의 종류를 나타냅니다. 이것은 정상적인 프록시 인증 시도의 결과입니다.
entering auth_pam_server entering auth_pam_next_token auth_pam_next_token : reading at [cups, admin = writer, everyone = reader, sep = [,] auth_pam_next_token : state = PRESPACE, ptr = cups, admin = writer, everyone = reader, out = [] auth_pam_next_token : state = IDENT, ptr = cups, admin = writer, everyone = reader, out = [] auth_pam_next_token : state = AFTERSPACE, ptr = [, admin = writer, everyone = reader, out = cups] auth_pam_next_token : state = DELIMITER, ptr = [, admin = writer, everyone = reader, out = cups] auth_pam_next_token : state = DONE, ptr = [, admin = writer, everyone = reader, out = cups] leaving auth_pam_next_token on /Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/parser.c:191 auth_pam_server : password 12345qq received auth_pam_server : pam_start rc = 0 auth_pam_server : pam_set_item (PAM_RUSER, gkodinov) rc = 0 auth_pam_server : pam_set_item (PAM_RHOST, localhost) rc = 0 entering auth_pam_server_conv auth_pam_server_conv : PAM_PROMPT_ECHO_OFF [Password :] received leaving auth_pam_server_conv on /Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/authentication_pam.c:257 auth_pam_server : pam_authenticate rc = 0 auth_pam_server : pam_acct_mgmt rc = 0 auth_pam_server : pam_setcred (PAM_ESTABLISH_CRED) rc = 0 auth_pam_server : pam_get_item rc = 0 auth_pam_server : pam_setcred (PAM_DELETE_CRED) rc = 0 entering auth_pam_map_groups entering auth_pam_walk_namevalue_list auth_pam_walk_namevalue_list : reading at : admin = writer, everyone = reader] entering auth_pam_next_token auth_pam_next_token : reading at [admin = writer, everyone = reader, sep = [=] auth_pam_next_token : state = PRESPACE, ptr = [admin = writer, everyone = reader, out = [] auth_pam_next_token : state = IDENT, ptr = [admin = writer, everyone = reader, out = [] auth_pam_next_token : state = AFTERSPACE, ptr = [= writer, everyone = reader, out = [admin] auth_pam_next_token : state = DELIMITER, ptr = [= writer, everyone = reader, out = [admin] auth_pam_next_token : state = DONE, ptr = [= writer, everyone = reader, out = [admin] leaving auth_pam_next_token on /Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/parser.c:191 auth_pam_walk_namevalue_list : name = [admin] entering auth_pam_next_token auth_pam_next_token : reading at [writer, everyone = reader, sep = [,] auth_pam_next_token : state = PRESPACE, ptr = writer, everyone = reader, out = [] auth_pam_next_token : state = IDENT, ptr = writer, everyone = reader, out = [] auth_pam_next_token : state = AFTERSPACE, ptr = [, everyone = reader, out = writer] auth_pam_next_token : state = DELIMITER, ptr = [, everyone = reader, out = writer] auth_pam_next_token : state = DONE, ptr = [, everyone = reader, out = writer] leaving auth_pam_next_token on /Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/parser.c:191 walk & error_namevalue_list : value = writer] entering auth_pam_map_group_to_user auth_pam_map_group_to_user : pam_user = gkodinov name = admin, value = writer examining member root examining member gkodinov substitution was made to mysql user writer leaving auth_pam_map_group_to_user on /Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/authentication_pam.c:118 auth_pam_walk_namevalue_list : found mapping leaving auth_pam_walk_namevalue_list on /Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/parser.c:270 auth_pam_walk_namevalue_list returned 0 leaving auth_pam_map_groups on /Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/authentication_pam.c:171 auth_pam_server : authenticated_as = writer auth_pam_server : rc = 0 leaving auth_pam_server on /Users/gkodinov/mysql/work/x-5.5.16-release-basket/release/plugin/pam-authentication-plugin/src/authentication_pam.c:429