• 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 권한 시스템
    1. MySQL에서 제공되는 권한
    2. 권한 시스템 부여 테이블
    3. 계정 이름 지정
    4. 액세스 제어 1 단계 : 연결 확인
    5. 액세스 제어, 2 단계 : 요청 확인
    6. 권한 변경이 활성화되는시기
    7. 액세스 거부 오류의 원인
    3. 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.2.2 권한 시스템 부여 테이블

일반적으로 계정을 설정하고 각 계정에서 사용 가능한 권한을 제어하기 위해서는 GRANT 와 REVOKE 같은 명령문을 사용하여 mysql 데이터베이스의 부여 테이블의 내용을 간접적으로 조작합니다. 섹션 13.7.1 "계정 관리 명령문" 을 참조하십시오. 여기에서 부여 테이블의 기본 구조와 서버가 클라이언트와 상호 작용할 때 부여 테이블의 내용을 어떻게 사용하는지 설명합니다.

다음 mysql 데이터베이스 테이블에 부여 정보가 포함되어 있습니다.

  • user : 사용자 계정, 글로벌 권한 및 권한 이외의 다른 컬럼이 포함되어 있습니다.

  • db : 데이터베이스 수준의 권한이 포함되어 있습니다.

  • host : 사용되지 않습니다. MySQL 5.6.7 이후의 새로운 MySQL 설치에서는이 테이블이 작성되지 않습니다했습니다.

  • tables_priv : 테이블 레벨의 권한이 포함되어 있습니다.

  • columns_priv : 컬럼 레벨의 권한이 포함되어 있습니다.

  • procs_priv : 저장 프로 시저 및 저장 기능의 권한이 포함되어 있습니다.

  • proxies_priv : 프록시 사용자 권한이 포함되어 있습니다.

mysql 데이터베이스의 다른 테이블에 부여 정보가 유지되지 않고, 다른 곳에서 설명되어 있습니다.

  • event : 이벤트 스케줄러에 대한 정보가 포함되어 있습니다. 섹션 20.4 "이벤트 스케줄러 사용" 을 참조하십시오.

  • func : 사용자 정의 함수에 대한 정보가 포함되어 있습니다. 섹션 24.3 "MySQL에 새로운 기능 추가" 를 참조하십시오.

  • help_ xxx :이 테이블은 서버 측의 도움말에 사용됩니다. 섹션 5.1.10 "서버 측의 도움말" 을 참조하십시오.

  • plugin : 서버 플러그인에 대한 정보가 포함되어 있습니다. 섹션 5.1.8.1 "플러그인 설치 및 제거" 및 섹션 24.2 "MySQL 플러그인 API" 를 참조하십시오.

  • proc : 저장 프로 시저 및 저장 기능에 대한 정보가 포함되어 있습니다. 섹션 20.2 "스토어드 루틴 (프로 시저 및 함수) 사용" 을 참조하십시오.

  • servers : FEDERATED 스토리지 엔진에 의해 사용됩니다. 섹션 15.8.2.2 "CREATE SERVER를 사용한 FEDERATED 테이블 만들기" 를 참조하십시오.

  • time_zone_ xxx :이 테이블에는 표준 시간대 정보가 포함되어 있습니다. 섹션 10.6 "MySQL Server에서 시간대 지원" 을 참조하십시오.

  • 이름 _log 를 가진 테이블은 로깅에 사용됩니다. 섹션 5.2 "MySQL Server 로그" 를 참조하십시오.

참고

mysql 데이터베이스 테이블의 변경은 CREATE USER , GRANT , CREATE PROCEDURE 등의 문의 응답으로 서버에 의해 완료됩니다. INSERT , UPDATE , DELETE 등의 문을 사용하여 이러한 테이블을 직접 수정하는 것은 권장되지 않습니다. 이러한 변화의 결과로 잘못된 형식이 행을 서버가 임의로 무시합니다.

각 부여 테이블 범위 컬럼과 권한 컬럼이 있습니다.

  • 범위 컬럼은 테이블의 각 행 (항목)의 범위, 즉 행이 적용되는 컨텍스트를 결정합니다. 예를 들어, Host 와 User 값이 'thomas.loc.gov' 와 'bob' 인 user 테이블 행은 bob 이라는 사용자 이름을 지정하는 클라이언트가 호스트 thomas.loc.gov 에서 서버로 실행하는 인증 연결 을 위해 사용됩니다. 마찬가지로, Host , User , 그리고 Db 컬럼 값이 'thomas.loc.gov' , 'bob' 및 'reports' 인 db 테이블 행은 bob 가 thomas.loc.gov 호스트로부터 reports 데이터베이스에 연결할 때 에 사용됩니다. tables_priv 테이블 및 columns_priv 테이블은 각 행에 적용되는 테이블 또는 테이블과 컬럼의 조합을 나타내는 범위 열 수 있습니다. procs_priv 범위 컬럼은 각 행에 적용되는 스토어드 루틴을 보여줍니다.

  • 권한 컬럼은 테이블 행에 의해 부여 된 권한, 즉 수행 할 수있는 작업을 지정합니다. 서버는 다양한 부여 테이블의 정보를 조합하여 사용자 권한의 완전한 설명을 구성합니다. 이 실행에 사용되는 규칙의 설명은 섹션 6.2.5 "액세스 제어, 2 단계 : 요청 확인" 에 있습니다.

서버는 다음의 방법으로 부여 테이블을 사용합니다.

  • user 테이블의 범위 컬럼은 입 접속을 거부 또는 허용 여부를 결정합니다. 허용되는 연결에 대해 user 테이블에서 부여 된 모든 권한은 사용자의 전역 권한을 나타냅니다. 이 테이블에서 부여 된 모든 권한은 서버의 모든 데이터베이스에 적용됩니다.

    참고

    모든 글로벌 권한은 모든 데이터베이스에 대한 권한으로 간주되기 때문에 모든 글로벌 권한을 가진 사용자는 SHOW DATABASES 를 사용하거나 또는 INFORMATION_SCHEMA 의 SCHEMATA 테이블을 검사하는 것으로, 모든 데이터베이스 이름을 표시 할 수 있도록 합니다.

  • db 테이블 범위 컬럼은 어떤 사용자가 어떤 호스트에서 어떤 데이터베이스에 액세스 할 수 있는지를 결정합니다. 권한 컬럼은 허용 된 작업을 결정합니다. 데이터베이스 수준에서 부여 된 권한은 데이터베이스의 다른 테이블과 저장 프로그램 등의 데이터베이스의 모든 개체에 적용됩니다.

  • tables_priv 와 columns_priv 테이블은 db 테이블과 비슷하지만, 이들은 또한 입도가 미세하고 데이터베이스 레벨이 아닌 테이블 레벨 및 컬럼 레벨로 적용됩니다. 테이블 수준에서 부여되는 권한은 테이블 및 모든 컬럼에 적용됩니다. 컬럼 수준에서 부여 된 권한은 특정 컬럼에만 적용됩니다.

  • procs_priv 테이블은 스토어드 루틴에 적용됩니다. 루틴 레벨에서 부여 된 권한은 단일 루틴에만 적용됩니다.

  • proxies_priv 테이블은 다른 사용자의 프록시 역할을 할 수있는 사용자가 누구인지, 그리고 프록시 사용자가 PROXY 권한을 다른 사용자에게 부여 할 수 있는지 여부를 지정합니다.

서버는 mysql 데이터베이스의 user 와 db 테이블을 액세스 제어의 1 단계와 2 단계 모두에서 사용합니다 ( 섹션 6.2 "MySQL 권한 시스템" 을 참조하십시오). user 와 db 테이블의 컬럼을 여기에 나타냅니다.

표 6.3 user 테이블과 db 테이블의 컬럼

테이블 이름 user db
범위 컬럼 Host Host

User Db

Password User
권한 컬럼 Select_priv Select_priv

Insert_priv Insert_priv

Update_priv Update_priv

Delete_priv Delete_priv

Index_priv Index_priv

Alter_priv Alter_priv

Create_priv Create_priv

Drop_priv Drop_priv

Grant_priv Grant_priv

Create_view_priv Create_view_priv

Show_view_priv Show_view_priv

Create_routine_priv Create_routine_priv

Alter_routine_priv Alter_routine_priv

Execute_priv Execute_priv

Trigger_priv Trigger_priv

Event_priv Event_priv

Create_tmp_table_priv Create_tmp_table_priv

Lock_tables_priv Lock_tables_priv

References_priv References_priv

Reload_priv

Shutdown_priv

Process_priv

File_priv

Show_db_priv

Super_priv

Repl_slave_priv

Repl_client_priv

Create_user_priv

Create_tablespace_priv
보안 칼럼 ssl_type

ssl_cipher

x509_issuer

x509_subject

plugin

authentication_string

password_expired
자원 제어 컬럼 max_questions

max_updates

max_connections

max_user_connections

mysql.user 테이블의 plugin 및 authentication_string 컬럼은 인증 플러그인 정보를 저장합니다.

계정 행의 plugin 컬럼이 비어있는 경우, 서버는 Password 컬럼 암호 해시 형식에 따라 mysql_native_password 또는 mysql_old_password 플러그인을 암시 적으로 사용하여 계정을 인증합니다. Password 값이 비어 있거나 4.1 암호 해시 (41 자) 인 경우, 서버는 mysql_native_password 을 사용합니다. 암호 값이 4.1 이전 암호 해시 (16 문자)의 경우, 서버는 mysql_old_password 을 사용합니다. (이 해시 형식에 대한 추가 정보는 섹션 6.1.2.4 "MySQL에서 암호 해시" 를 참조하십시오.) 클라이언트는 계정 행의 Password 컬럼의 암호와 일치해야합니다.

계정 행에서 plugin 컬럼에 플러그인이 지정된 경우 서버는 이것을 사용하여 계정에 대한 연결 시도를 인증합니다. 플러그인 Password 컬럼의 값을 사용할지 여부는 플러그인에 따라 다릅니다.

password_expired 컬럼은 DBA가 계정 암호를 만료하고 사용자에게 암호를 재설정하도록 요청할 수 있도록하기 위해 MySQL 5.6.6에서 추가되었습니다. 기본 password_expired 값은 'N' 입니다 만, ALTER USER 문을 사용하여 'Y' 로 설정 할 수 있습니다. 계정의 암호가 만료 된 후 서버로부터 연결에서 해당 계정에 의해 실행되는 모든 작업은 사용자가 SET PASSWORD 문을 발행하여 새 계정 암호를 설정할 때까지 오류가 발생 합니다. 섹션 13.7.1.1 "ALTER USER 구문" 을 참조하십시오.

암호 만료 후 SET PASSWORD 를 사용하여 암호를 현재 값으로 설정하여 암호를 '리셋'할 수 있습니다. 적절한 정책으로 다른 암호를 선택하는 것이 좋습니다.

주의

MySQL 5.6.6에서 ALTER USER 는 Password 컬럼을 빈 문자열로 설정하기 때문에이 문은 5.6.7까지 사용하지 마십시오.

액세스 제어의 2 단계에서 서버는 요청 유효성 검사를 수행하여 클라이언트가 발행 한 각 요청에 대한 각각의 클라이언트가 충분한 권한이 있는지 확인합니다. user 와 db 부여 테이블 이외에 테이블에 대한 요청의 경우, 서버는 tables_priv 와 columns_priv 테이블을 참조 할 수 있습니다. 후자의 테이블은 테이블 레벨 및 컬럼 레벨에서의 세세한 권한 제어를 제공합니다. 여기에는 다음 표의 열 수 있습니다.

표 6.4 tables_priv 테이블 및 columns_priv 테이블의 컬럼

테이블 이름 tables_priv columns_priv
범위 컬럼 Host Host

Db Db

User User

Table_name Table_name


Column_name
권한 컬럼 Table_priv Column_priv

Column_priv
다른 컬럼 Timestamp Timestamp

Grantor

Timestamp 컬럼 및 Grantor 컬럼은 각각 현재의 타임 스탬프 및 CURRENT_USER 값으로 설정됩니다. 그러나 이들은 미사용 때문에 여기에서는 더 이상 설명하지 않습니다.

스토어드 루틴에 대한 요청을 확인하기 위해 서버가 procs_priv 테이블을 참조 할 수 있으며,이 테이블은 다음 표에 나열된 열 수 있습니다.

표 6.5 procs_priv 테이블의 컬럼

테이블 이름 procs_priv
범위 컬럼 Host

Db

User

Routine_name

Routine_type
권한 컬럼 Proc_priv
다른 컬럼 Timestamp

Grantor

Routine_type 컬럼은 'FUNCTION' 또는 'PROCEDURE' 값을 가지는 ENUM 컬럼이며, 그 행이 나타내는 루틴의 유형을 말합니다. 이 컬럼을 통해 동일한 이름을 가진 함수와 프로 시저에 별도로 권한을 부여 할 수 있습니다.

Timestamp 컬럼과 Grantor 컬럼은 현재 사용하지 않는 때문에 여기에서는 더 이상 설명하지 않습니다.

proxies_priv 테이블은 프록시 사용자에 대한 정보를 기록합니다. 여기에는 다음과 같은 열이 있습니다.

  • Host , User :이 컬럼은 프록시 설정되는 계정에 PROXY 권한이있는 사용자 계정을 나타냅니다.

  • Proxied_host , Proxied_user :이 컬럼은 프록시 설정되는 사용자 계정을 나타냅니다.

  • Grantor : 현재 사용되지 않습니다.

  • Timestamp : 현재 사용되지 않습니다.

  • With_grant :이 컬럼은 프록시 계정이 PROXY 권한을 다른 계정에 부여 할 수 있는지 여부를 나타냅니다.

부여 테이블의 범위 컬럼에 문자열이 포함되어 있습니다. 이들은 다음과 같이 선언 된 각각의 기본값은 빈 문자열입니다.

표 6.6 부여 테이블의 범위 컬럼의 형태

컬럼 이름 유형
Host , Proxied_host CHAR(60)
User , Proxied_user CHAR(16)
Password CHAR(41)
Db CHAR(64)
Table_name CHAR(64)
Column_name CHAR(64)
Routine_name CHAR(64)

액세스 확인을 위해, User , Proxied_user , Password , Db , 및 Table_name 값의 비교는 대소 문자를 구분합니다. Host , Proxied_host , Column_name 및 Routine_name 값의 비교는 대소 문자를 구분하지 않습니다.

user 와 db 테이블에서는 각 권한은 ENUM('N','Y') DEFAULT 'N' 으로 선언되는 별도의 컬럼에 나열됩니다. 즉, 각 권한은 비활성화 또는 활성화 할 수 있으며, 기본값은 무효입니다.

tables_priv , columns_priv 및 procs_priv 테이블에서는 권한 컬럼은 SET 컬럼으로 선언됩니다. 이러한 컬럼 값은 테이블에 의해 제어되는 모든 조합의 권한을 포함 할 수 있습니다. 컬럼 값에 나열되어있는 권한 만 입력됩니다.

표 6.7 Set 타입 권한 컬럼 값

테이블 이름 컬럼 이름 가능한 Set 요소
tables_priv Table_priv 'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter', 'Create View', 'Show view', 'Trigger'
tables_priv Column_priv 'Select', 'Insert', 'Update', 'References'
columns_priv Column_priv 'Select', 'Insert', 'Update', 'References'
procs_priv Proc_priv 'Execute', 'Alter Routine', 'Grant'

관리자 권한 ( RELOAD , SHUTDOWN 등)은 user 테이블에서만 지정됩니다. 관리 작업은 서버 자체에서 작업이며, 데이터베이스 고유 않기 때문에 이러한 권한을 다른 부여 테이블에 나열하는 이유는 없습니다. 따라서 사용자가 관리 작업을 수행 할 수 있는지 여부를 판별하려면, 서버는 user 테이블 만 참조해야합니다.

FILE 권한도 user 테이블에서만 지정됩니다. 이것은 원래 관리 권한은 없지만 서버 호스트에서 파일을 읽거나 쓸 수있는 능력은 액세스 데이터베이스와 무관합니다.

mysqld 서버는 시작할 때 부여 테이블의 내용을 메모리에 읽습니다. FLUSH PRIVILEGES 명령문을 실행하거나 mysqladmin flush-privileges 또는 mysqladmin reload 명령을 실행하여 테이블을 다시로드하도록 서버에 지시 할 수 있습니다. 부여 테이블의 변경은 섹션 6.2.6 "권한 변경이 활성화되는시기" 와 같이 반영됩니다.

계정의 권한을 변경하면 변경으로 인해 권한이 원하는대로 설치되는지 여부를 확인하는 것이 좋습니다. 특정 계정의 권한을 확인하려면 SHOW GRANTS 문을 사용합니다 ( 섹션 13.7.5.22 "SHOW GRANTS 구문" 을 참조하십시오). 예를 들어, 사용자 이름 및 호스트 이름 값이 각각 bob 및 pc84.example.com 계정에 부여 된 권한을 확인하려면 다음 문을 사용합니다.

 SHOW GRANTS FOR 'bob'@'pc84.example.com';


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