• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 1. 일반적인 보안 문제
    2. MySQL 권한 시스템
    3. MySQL 사용자 계정 관리
    1. 사용자 이름과 암호
    2. 사용자 계정 추가
    3. 사용자 계정 삭제
    4. 계정 자원 제한 설정
    5. 계정 암호 지정
    6. 암호 만료 및 샌드 박스 모드
    7. 플러그 인증
    8. MySQL에서 사용 가능한 인증 플러그인
    9. 프록시 사용자
    10. 보안 연결을 위해 SSL 사용
    11. SSH를 사용하여 Windows에서 MySQL에 대한 원격 연결
    12. MySQL Enterprise Audit 로그 플러그인
    13. SQL 기반의 MySQL 계정 활동 감사
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

6.3.9 프록시 사용자

인증 플러그인을 사용하여 MySQL 서버에 인증이 발생하면 연결된 (외부) 사용자를 권한 확인을 위해 다른 사용자로 처리하도록 플러그인에서 요구 될 수 있습니다. 이렇게하면 외부 사용자를 두 번째 사용자의 프록시 할 수 있습니다. 즉, 두 번째 사용자의 권한을 가질 수 있습니다. 즉, 외부 사용자는 "프록시 사용자"(가장 할 사용자 또는 다른 사용자와 불리게되는 사용자)이며, 두 번째 사용자는 "프록시 대상 '(프록시 사용자가 수행 할 수있는 정체성을 가진 사용자) 입니다.

이 섹션에서는 프록시 사용자 기능의 작동에 대해 설명합니다. 인증 플러그인에 대한 일반적인 정보는 섹션 6.3.7 "플러그 인증" 을 참조하십시오. 프록시 사용자가 지원되는 자체 인증 플러그인을 작성하는 것에 관심이 있다면, 섹션 24.2.4.9.4 "인증 플러그인에서 프록시 사용자 지원 구현" 을 참조하십시오.

프록시 처리를 발생 시키려면 다음 조건을 충족해야합니다.

  • 연결된 클라이언트가 프록시 사용자로 처리 될 때 플러그인은 프록시 대상 사용자의 이름을 표시하기 위해 다른 이름을 반환해야합니다.

  • 프록시 사용자 계정이 플러그인으로 인증되도록 설정해야합니다. CREATE USER 또는 GRANT 문을 사용하여 계정을 플러그인에 연결합니다.

  • 프록시 사용자 계정은 프록시 대상 계정 PROXY 권한을 가지고 있어야합니다. 이를 위해서는 GRANT 문을 사용합니다.

다음과 같은 정의에 대해 검토합니다.

 CREATE USER 'empl_external'@ 'localhost'
   IDENTIFIED WITH auth_plugin AS 'auth_string';
 CREATE USER 'employee'@ 'localhost'
   IDENTIFIED BY 'employee_pass';
 GRANT PROXY
   ON 'employee'@ 'localhost'
   TO 'empl_external'@ 'localhost';

클라이언트가 로컬 호스트에서 empl_external 로 연결하면 MySQL은 auth_plugin 을 사용하여 인증을 수행합니다. auth_plugin 가 ( 'auth_string' 의 내용에 따라 아마도 일부 외부 인증 시스템을 참조하여) 서버에 employee 라는 사용자 이름을 반환하는 경우이 클라이언트를 권한 확인을 위해, employee 로컬 사용자로 처리 하라는 서버에 대한 요청으로 작동합니다.

이 경우 empl_external 프록시 사용자 employee 는 프록시 대상입니다.

서버는 empl_external 이 employee 에 대한 PROXY 권한이 있는지 여부를 확인하여 empl_external 사용자에게 employee 프록시 인증을 수행 할 수 있는지 확인합니다. (이 권한이 부여되지 않은 경우 오류가 발생합니다.)

프록시가 발생했을 때 USER() 및 CURRENT_USER() 함수를 사용하면 연결된 사용자와 현재 세션 중에 권한이 적용되는 계정의 차이점을 확인할 수 있습니다. 앞서 설명한 예에서는 이러한 함수는 다음 값을 반환합니다.

mysql> SELECT USER(), CURRENT_USER();
+-------------------------+--------------------+
| USER()                  | CURRENT_USER()     |
+-------------------------+--------------------+
| empl_external@localhost | employee@localhost |
+-------------------------+--------------------+

인증 플러그인의 이름을 지정하는 IDENTIFIED WITH 절 다음에 사용자의 접속시에 서버가 플러그인에 전달되는 문자열을 지정하는 AS 절이 뒤에 올 수도 있습니다. AS 절이 필요한지 여부는 각 플러그인에 의존합니다. 필요한 경우 인증 문자열의 형식은 플러그인을 사용하는 목적에 따라 다릅니다. 허용되는 인증 문자열 값은 특정 플러그인에 대한 문서를 참조하십시오.

프록시 권한 부여

외부 사용자가 다른 사용자로 연결하고 그 권한을 가질 수 있도록하려면 특별한 PROXY 권한이 필요합니다. 이 권한을 부여하려면 GRANT 문을 사용합니다. 예 :

 GRANT PROXY ON ' proxied_user 'TO' proxy_user ';

proxy_user 연결시 외부에서 인증 된 유효한 MySQL 사용자를 표시해야합니다. 그렇지 않으면 연결 시도가 실패합니다. proxied_user 연결시 로컬에서 인증 된 유효한 사용자를 표시해야합니다. 그렇지 않으면 연결 시도가 실패합니다.

해당 REVOKE 구문은 다음과 같습니다.

 REVOKE PROXY ON ' proxied_user 'FROM' proxy_user ';

MySQL GRANT 및 REVOKE 구문의 확장 기능은 정상적으로 작동합니다. 예 :

 GRANT PROXY ON 'a'TO 'b', 'c', 'd';
 GRANT PROXY ON 'a'TO 'd'IDENTIFIED BY ...;
 GRANT PROXY ON 'a'TO 'd'WITH GRANT OPTION;
 GRANT PROXY ON 'a'TO '@' ';
 REVOKE PROXY ON 'a'FROM 'b', 'c', 'd';

위의 예에서는 ''@'' 는 기본 프록시 사용자이며, "모든 사용자"를 의미합니다. 기본 프록시 사용자는이 섹션의 뒷부분에서 설명합니다.

다음과 같은 경우 PROXY 권한을 부여 할 수 있습니다.

  • 스스로 proxied_user 에 따르면 : 계정 이름의 사용자 이름과 호스트 이름의 두 부분에서 USER() 의 값이 CURRENT_USER() 및 proxied_user 과 정확히 일치해야합니다.

  • proxied_user 대한 GRANT PROXY ... WITH GRANT OPTION 을 가진 사용자에 의한 다.

MySQL 설치시 기본적으로 생성 된 root 계정은 ''@'' (즉, 모든 사용자)에 대한 PROXY ... WITH GRANT OPTION 권한을 가지고 있습니다. 이렇게하면 root 프록시 사용자를 설정하거나 프록시 사용자를 설정하기위한 권한을 다른 계정에 위임 할 수 있습니다. 예를 들어, root 는 다음 작업을 수행 할 수 있습니다.

 CREATE USER 'admin'@ 'localhost'IDENTIFIED BY 'test';
 GRANT PROXY ON '@' 'TO'admin '@'localhost 'WITH GRANT OPTION;

이 시점에서 admin 사용자는 특정 모든 GRANT PROXY 매핑을 관리 할 수 있습니다. 예를 들어, admin 은 다음 작업을 수행 할 수 있습니다.

 GRANT PROXY ON sally TO joe;

기본 프록시 사용자

일부 또는 모든 사용자가 특정 외부 플러그인을 사용하여 연결하도록 지정하려면 "빈"MySQL 사용자를 만들고 플러그인을 사용하여 인증하도록 설정하고 ( 빈 사용자와 다른 경우) 플러그인이 인증 된 실제 사용자 이름을 반환 할 수 있도록합니다. 예를 들어, LDAP 인증을 구현하는 ldap_auth 라는 임시 플러그인이 존재한다고 가정합니다.

 CREATE USER ''@ ''IDENTIFIED WITH ldap_auth AS 'O = Oracle, OU = MySQL';
 CREATE USER 'developer'@ 'localhost'IDENTIFIED BY 'developer_pass';
 CREATE USER 'manager'@ 'localhost'IDENTIFIED BY 'manager_pass';
 GRANT PROXY ON 'manager'@ 'localhost'TO '@' ';
 GRANT PROXY ON 'developer'@ 'localhost'TO '@' ';

여기서 클라이언트가 다음과 같이 연결을 시도합니다.

 mysql --user = myuser --password = 'myuser_pass'...

서버는 MySQL 사용자로 정의 된 myuser 가 없습니다. 그러나 클라이언트의 사용자 이름과 호스트 이름과 일치하는 빈 사용자 계정 ( ''@'' )이 있기 때문에 서버 계정과 비교하여 클라이언트를 인증합니다. 서버는 ldap_auth 를 호출 해, 그것을 사용자 이름과 암호로 myuser 및 myuser_pass 에 전달합니다.

ldap_auth 플러그인은 myuser_pass 가 myuser 의 올바른 암호가 아닌 것이 LDAP 디렉토리에서 감지 된 경우, 인증에 실패하고 서버는 연결을 거부합니다.

암호가 제대로 ldap_auth 의해 myuser 가 개발자임을 감지 된 경우, MySQL 서버에 myuser 대신 developer 라는 사용자 이름을 반환합니다. 서버 (실행하기위한 PROXY 권한을 가지고 있기 때문에) ''@'' 가 developer 로 인증 할 수 있는지 확인하고 연결을 허용합니다. 세션은 developer 권한을 가지고 myuser 에서 계속됩니다. (이러한 권한은 DBA가 GRANT 문을 사용하여 설정해야하지만 표시되지 않습니다.) USER() 및 CURRENT_USER() 함수는 다음 값을 반환합니다.

mysql> SELECT USER(), CURRENT_USER();
+------------------+---------------------+
| USER()           | CURRENT_USER()      |
+------------------+---------------------+
| myuser@localhost | developer@localhost |
+------------------+---------------------+

대신 플러그인에 의해 myuser 가 매니저 인 것이 LDAP 디렉토리에서 감지 된 경우, 사용자 이름으로 manager 가 반환 세션은 manager 권한을 가진 myuser 에서 계속됩니다.

mysql> SELECT USER(), CURRENT_USER();
+------------------+-------------------+
| USER()           | CURRENT_USER()    |
+------------------+-------------------+
| myuser@localhost | manager@localhost |
+------------------+-------------------+

단순하게하기 위해 외부 인증은 다단계에서 실행할 수 없습니다. 위의 예에서는 developer 인증서도 manager 인증서도 고려되지 않습니다. 그러나 클라이언트가 developer 또는 manager 계정과 일치하여 직접 인증을 시도하는 경우는 계속 사용됩니다 (따라서 이러한 계정에 암호를 할당해야합니다).

기본 프록시 계정은 모든 호스트와 일치하는 '' 호스트 부분에 사용합니다. 기본 프록시 사용자를 설정하는 경우 호스트 부분에 '%' 를 포함한 계정도 체크하도록주의하십시오. 그 이유는 이러한 계정은 모든 호스트와 일치하지만, 서버 내부에서 계정 행을 정렬하는 데 사용되는 규칙은 '' 보다 우선되기 때문입니다 ( 섹션 6.2.4 "액세스 제어 1 단계 : 연결 확인 " 을 참조하십시오).

MySQL 설치에 다음의 2 개의 계정이 포함되어 있다고 가정합니다.

 CREATE USER ''@ ''IDENTIFIED WITH some_plugin;
 CREATE USER ''@ '%'IDENTIFIED BY 'some_password';

첫 번째 계정의 목적은 그렇지 않으면 더 구체적인 계정과 일치하지 않는 사용자 연결을 인증하는 데 사용되는 기본 프록시 사용자 역할을하는 것입니다. 두 번째 계정은 예를 들어 익명 사용자로 자신의 계정을 가지고 있지 않은 사용자를 활성화하기 위해 작성 될 수 있습니다.

그러나이 구성에서는 일치 규칙에 의해 ''@'' 보다 먼저 ''@'%' 가 정렬되기 때문에 첫 번째 계정은 사용되지 않습니다. 보다 구체적 같은 계정에 일치하지 않는 계정의 경우, 서버는 ''@'' 대신 ' ''@'%' 와 대조하여 인증을 시도합니다.

기본 프록시 사용자를 만들 때 기본 프록시 사용자보다 우선되기 때문에, 사용자가 원하는대로 작동하는 것을 방해 기타 기존의 "모든 사용자에 일치한다"계정이 있는지 체크합니다. 이러한 계정을 삭제해야하는 경우도 있습니다.

프록시 사용자의 시스템 변수

다음 2 개의 시스템 변수는 프록시 로그인 프로세스를 추적하는 데 도움이됩니다.

  • proxy_user : 프록시가 사용되지 않은 경우,이 값은 NULL 입니다. 그렇지 않으면 프록시 사용자 계정을 나타냅니다. 예를 들어, 클라이언트가 기본 프록시 계정을 사용하여 인증하는 경우,이 변수는 다음과 같이 설정됩니다.

    mysql> SELECT @@proxy_user;
    +--------------+
    | @@proxy_user |
    +--------------+
    | ''@''        |
    +--------------+
    
  • external_user : 인증 플러그인은 외부 사용자를 사용하여 MySQL 서버에 대한 인증을 할 수 있습니다. 예를 들어, 기본 Windows 인증을 사용하는 경우 Windows API를 사용하여 인증하는 플러그인에 로그인 ID를 전달해야합니다. 그러나 인증은 계속 Windows 사용자 ID가 사용됩니다. 이 플러그인은 읽기 전용 세션 변수 external_user 를 사용하여이 외부 사용자 ID (또는 첫 번째 512 UTF-8 바이트)를 서버에 반환 할 수 있습니다. 플러그인이 변수를 설정하지 않으면, 그 값은 NULL 입니다.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved