• 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.1 MySQL에서 제공되는 권한

MySQL에서는 다양한 컨텍스트 및 다양한 동작 레벨에 적용되는 권한이 제공됩니다.

  • 관리 권한에 따라 사용자는 MySQL 서버의 동작을 관리 할 수​​ 있습니다. 이러한 권한은 특정 데이터베이스에 고유 않기 때문에 글로벌입니다.

  • 데이터베이스 권한은 데이터베이스 및 데이터베이스의 모든 개체에 적용됩니다. 이러한 권한은 특정 데이터베이스에 부여하고 모든 데이터베이스에 적용되도록 글로벌에 부여 할 수 있습니다.

  • 테이블, 인덱스, 뷰, 스토어드 루틴 등의 데이터베이스 개체를위한 권한은 데이터베이스의 특정 객체 데이터베이스에서 특정 유형의 모든 객체 (예를 들어 데이터베이스의 모든 테이블) 또는 모든 데이터베이스의 특정 유형의 모든 개체에 글로벌 부여 할 수 있습니다.

계정 권한에 대한 정보는 mysql 데이터베이스의 user , db , tables_priv , columns_priv 및 procs_priv 테이블에 저장됩니다 ( 섹션 6.2.2 "권한 시스템 부여 테이블" 을 참조하십시오). MySQL 서버는 이러한 테이블의 내용을 시작할 때 메모리에 읽고 섹션 6.2.6 "권한 변경이 활성화되는시기" 에 나타내는 조건에서 이들을 다시로드합니다. 액세스 제어 결정은 부여 테이블의 인 메모리 복사에 근거합니다.

MySQL의 일부 버전에서는 새로운 권한 또는 기능을 추가하기 위해 부여 테이블의 구조를 변경하는 것도 있습니다. 모든 새로운 기능을 안정적으로 활용할 수 있도록하려면 새로운 버전의 MySQL에 업데이트 할 때마다 부여 테이블을 업데이트하여 최신 구조를 갖게합니다. 섹션 4.4.7 "mysql_upgrade - MySQL 테이블 체크 및 업그레이드" 를 참조하십시오.

다음 표는 GRANT 및 REVOKE 문에서 SQL 레벨에서 사용되는 권한 이름 외에도 부여 테이블의 각 권한에 관련된 컬럼 및 권한이 적용되는 상황이 나타나고 있습니다.

표 6.2 GRANT 및 REVOKE에 대해 허용되는 권한

권한 컬럼 컨텍스트
CREATE Create_priv 데이터베이스 테이블 또는 인덱스
DROP Drop_priv 데이터베이스 테이블 또는 뷰
GRANT OPTION Grant_priv 데이터베이스 테이블 또는 스토어드 루틴
LOCK TABLES Lock_tables_priv 데이터베이스
REFERENCES References_priv 데이터베이스 또는 테이블
EVENT Event_priv 데이터베이스
ALTER Alter_priv 테이블
DELETE Delete_priv 테이블
INDEX Index_priv 테이블
INSERT Insert_priv 테이블 또는 컬럼
SELECT Select_priv 테이블 또는 컬럼
UPDATE Update_priv 테이블 또는 컬럼
CREATE TEMPORARY TABLES Create_tmp_table_priv 테이블
TRIGGER Trigger_priv 테이블
CREATE VIEW Create_view_priv 뷰
SHOW VIEW Show_view_priv 뷰
ALTER ROUTINE Alter_routine_priv 스토어드 루틴
CREATE ROUTINE Create_routine_priv 스토어드 루틴
EXECUTE Execute_priv 스토어드 루틴
FILE File_priv 서버 호스트에서 파일 액세스
CREATE TABLESPACE Create_tablespace_priv 서버 관리
CREATE USER Create_user_priv 서버 관리
PROCESS Process_priv 서버 관리
PROXY proxies_priv 테이블을 참조 서버 관리
RELOAD Reload_priv 서버 관리
REPLICATION CLIENT Repl_client_priv 서버 관리
REPLICATION SLAVE Repl_slave_priv 서버 관리
SHOW DATABASES Show_db_priv 서버 관리
SHUTDOWN Shutdown_priv 서버 관리
SUPER Super_priv 서버 관리
ALL [PRIVILEGES]
서버 관리
USAGE
서버 관리

다음 목록에는 MySQL에서 사용 가능한 각 권한의 일반적인 설명이 제공되고 있습니다. 특정 SQL 문에는 여기에 표시된 것보다 구체적인 권한 요구 사항이있는 경우도 있습니다. 그런 경우 해당 문 설명이 자세히 나와 있습니다.

  • ALL 또는 ALL PRIVILEGES 권한 지정자는 단축형입니다. 이것은 "특정 권한 수준에서 사용 가능한 모든 권한"( GRANT OPTION 제외)을 나타냅니다. 예를 들어, 글로벌 또는 테이블 레벨에서 ALL 을 부여하면 모든 글로벌 권한 또는 테이블 레벨의 모든 권한이 부여됩니다.

  • ALTER 권한은 테이블의 구조를 변경하는 ALTER TABLE 의 사용을 가능하게합니다. ALTER TABLE 에는 CREATE 및 INSERT 권한도 필요합니다. 테이블 이름을 변경하려면 기존 테이블 측에서 ALTER 및 DROP 과 새로운 테이블 측에서 ALTER , CREATE 및 INSERT 권한이 필요합니다.

  • 스토어드 루틴 (프로 시저 및 함수)을 변경 또는 삭제하려면 ALTER ROUTINE 권한이 있어야합니다.

  • CREATE 권한은 새 데이터베이스 및 테이블 작성을 가능하게합니다.

  • 스토어드 루틴 (프로 시저 및 함수)을 생성하려면 CREATE ROUTINE 권한이 있어야합니다.

  • 테이블 스페이스 및 로그 파일 그룹을 생성, 변경 또는 삭제하려면 CREATE TABLESPACE 권한이 있어야합니다.

  • CREATE TEMPORARY TABLES 권한은 CREATE TEMPORARY TABLE 문을 사용하여 임시 테이블 생성을 가능하게합니다.

    MySQL 5.6.3의 시점에서는 세션에서 임시 테​​이블이 작성되면 서버는 테이블에서 권한 검사를 추가 실행하지 않습니다. 세션을 만들어서, DROP TABLE , INSERT , UPDATE , SELECT 등의 모든 작업을 테이블에서 실행할 수 있습니다.

    이 동작의 하나의 영향으로 현재 사용자가 임시 테​​이블을 만들 수있는 권한을 가지지 않아도 세션이 임시 테​​이블을 조작 할 수있는 것이 있습니다. 현재 사용자가 CREATE TEMPORARY TABLES 권한을 가지고 있지 않지만, CREATE TEMPORARY TABLES 을 가진 사용자의 권한으로 실행하여 임시 테이블을 만들고, DEFINER 컨텍스트 저장 프로 시저를 실행할 수 있다고합니다. 프로 시저 실행 중에 세션 정의 측 사용자 권한을 사용합니다. 프로 시저가 복귀 한 뒤 유효한 권한은 현재 사용자의 권한으로 돌아 이로 인해 계속 임시 테​​이블을 표시하고 임시 테​​이블에 대한 모든 작업을 수행 할 수있게합니다.

    MySQL 5.6.3 이전에서는 INSERT , UPDATE , SELECT 등의 임시 테이블에서 다른 작업에는 임시 테이블을 저장하는 데이터베이스에 대한 작업을하거나 같은 이름의 비 임시 테이블에 대한 추가 권한이 필요 입니다.

    임시 테이블과 비 임시 테​​이블의 권한을 분리하는이 상황에 대한 일반적인 해결 방법은 임시 테​​이블을 사용하기위한 전용 데이터베이스를 만드는 것입니다. 이렇게하면 그 데이터베이스에 대해 CREATE TEMPORARY TABLES 권한과 사용자에 의해 수행되는 임시 테이블 작업에 필요한 다른 모든 권한을 사용자에게 부여 할 수 있습니다.

  • CREATE USER 권한은 CREATE USER , DROP USER , RENAME USER 및 REVOKE ALL PRIVILEGES 사용을 가능하게합니다.

  • CREATE VIEW 권한은 CREATE VIEW 의 사용을 가능하게합니다.

  • DELETE 권한은 데이터베이스의 테이블에서 행 삭제를 가능하게합니다.

  • DROP 권한은 기존 데이터베이스 테이블 및 뷰의 드롭을 가능하게합니다. 파티션 된 테이블에서 ALTER TABLE ... DROP PARTITION 문을 사용하려면 DROP 권한이 필요합니다. DROP 권한이 TRUNCATE TABLE 을 위해서도 필요합니다. mysql 데이터베이스에 대한 DROP 권한을 부여하면 MySQL 접근 권한이 저장되어있는 데이터베이스를 사용자가 삭제할 수 있습니다.

  • 이벤트 스케줄러에 대한 이벤트를 생성, 변경, 삭제 또는 표시하려면 EVENT 권한이 필요합니다.

  • 스토어드 루틴 (프로 시저 및 함수)를 실행하려면 EXECUTE 권한이 필요합니다.

  • FILE 권한은 LOAD DATA INFILE 및 SELECT ... INTO OUTFILE 문 및 LOAD_FILE() 함수를 사용하여 서버 호스트에서 파일 읽기 및 쓰기를 수행하기위한 권한을 사용자에게 부여합니다. FILE 권한을 가진 사용자는 모든 사용자가 읽을 수인지, MySQL 서버가 읽을 수있는 서버 호스트에있는 모든 파일을 읽을 수 있습니다. (이 것은 암시 적으로 데이터베이스 디렉토리의 모든 파일 서버에서 액세스 할 수 있으므로 사용자는 그 모든 파일을 읽을 수있는 것을 의미합니다.) 또한 FILE 권한에 따라 사용자는 MySQL 서버가 쓰기 액세스 권한이있는 모든 디렉토리에 새로운 파일을 만들 수 있습니다. 이것은 권한 테이블을 구현하는 파일을 저장하는 서버의 데이터 디렉토리를 포함합니다. 보안을 위해 서버는 기존 파일을 덮어 쓰지 않습니다.

    파일을 읽고 쓸 수있는 장소를 제한하려면 secure_file_priv 시스템을 특정 디렉토리로 설정합니다. 섹션 5.1 "서버 시스템 변수" 를 참조하십시오.

  • GRANT OPTION 권한을 통해 사용자는 자신이 소유하는 권한을 다른 사용자에게 부여하거나 다른 사용자로부터 제거 할 수 있습니다.

  • INDEX 권한은 사용자가 인덱스를 만들거나 놓을 수 있습니다. INDEX 는 기존의 테이블에 적용됩니다. 테이블에 대한 CREATE 권한을 가지는 경우, CREATE TABLE 문에 인덱스 정의를 포함 할 수 있습니다.

  • INSERT 권한은 데이터베이스의 테이블에 행 삽입을 가능하게합니다. ANALYZE TABLE , OPTIMIZE TABLE , REPAIR TABLE 과 같은 테이블 유지 보수 문에도 INSERT 권한이 필요합니다.

  • LOCK TABLES 권한은 사용자가 SELECT 권한이있는 테이블을 잠그기 위해 명시 적 LOCK TABLES 명령문의 사용을 가능하게합니다. 여기에는 잠긴 테이블을 다른 세션에서 읽은하지 않도록하는 기입 락의 사용이 포함됩니다.

  • PROCESS 권한은 서버에서 실행되는 스레드에 대한 정보의 표시에 관계합니다 (즉, 세션에 의해 실행되는 명령문에 대한 정보). 이 권한은 SHOW PROCESSLIST 또는 mysqladmin processlist를 사용하여 다른 계정에 속한 스레드를 표시하는 것을 허용하고 자신의 스레드를 볼 수 있습니다. PROCESS 권한은 SHOW ENGINE 의 사용도 가능합니다.

  • PROXY 권한은 사용자가 다른 사용자로 위장하거나 다른 사용자로 인식되게 할 수 있습니다. 섹션 6.3.9 "프록시 사용자" 를 참조하십시오.

  • REFERENCES 권한은 현재 사용되지 않습니다.

  • RELOAD 권한은 FLUSH 명령문의 사용을 가능하게합니다. 또한 이것은 FLUSH 조작 ( flush-hosts , flush-logs , flush-privileges , flush-status , flush-tables , flush-threads , refresh , 그리고 reload )과 동등한 mysqladmin 명령을 사용 가능하게합니다.

    reload 명령은 부여 테이블을 메모리에 다시로드하도록 서버에 지시합니다. flush-privileges 는 reload 의 동의어입니다. refresh 명령은 로그 파일을 닫고 다시 열고 모든 테이블을 플러시합니다. 다른 flush- xxx 명령은 refresh 와 유사한 기능을 수행하고 있지만보다 구체적이기 때문에 일부 상황에서는 바람직한 경우가 있습니다. 예를 들어, 로그 파일만을 플래시 때는 refresh 보다 flush-logs 를 선택하는 것이 좋습니다.

  • REPLICATION CLIENT 권한은 SHOW MASTER STATUS 및 SHOW SLAVE STATUS 의 사용을 가능하게합니다. MySQL 5.6.6 이후에서는, 이것은 SHOW BINARY LOGS 문 사용도 가능합니다.

  • REPLICATION SLAVE 권한은 마스터로 현재 서버에 연결할 때 슬레이브 서버가 사용하는 계정에 주도록하십시오. 이 권한이없는 경우, 슬레이브는 마스터 서버의 데이터베이스에 대해 실행 된 업데이트를 요청 할 수 없습니다.

  • SELECT 권한에 따라 사용자는 데이터베이스의 테이블에서 행을 선택할 수 있습니다. SELECT 문에서 SELECT 권한이 필요한 것은 문이 테이블에서 실제로 레코드를 검색하는 경우입니다. 일부 SELECT 문은 테이블에 액세스하지 않기 때문에 모든 데이터베이스에 대한 액세스 권한이 없어도 실행할 수 있습니다. 예를 들어, 테이블을 참조하지 않는 식을 평가하기위한 간단한 계산기로 SELECT 를 사용할 수 있습니다.

     SELECT 1 + 1;
     SELECT PI () * 2;
    

    SELECT 권한은 컬럼 값을 읽을 다른 문에 대해서도 필요합니다. 예를 들어, UPDATE 문 대입 col_name = expr 의 오른쪽에서 참조되는 컬럼 또는 DELETE 또는 UPDATE 문 WHERE 절에 지정된 컬럼에 대한 SELECT 가 필요합니다.

  • SHOW DATABASES 권한에 따라 계정은 SHOW DATABASE 문을 발행하여 데이터베이스 이름을 표시 할 수 있습니다. 이 권한이없는 계정은 계정이 일부 권한을 가진 데이터베이스 만 표시되지 않고 서버가 --skip-show-database 옵션에서 시작되는 경우는 문을 일체 사용할 수 없습니다. 모든 글로벌 권한은 데이터베이스에 대한 권한이라는 점에 유의하십시오.

  • SHOW VIEW 권한은 SHOW CREATE VIEW 의 사용을 가능하게합니다.

  • SHUTDOWN 권한은 mysqladmin shutdown 명령의 사용을 가능하게합니다. 해당 SQL 문은 없습니다.

  • SUPER 권한에 의해 계정이 다른 계정에 속한 스레드를 종료하기위한 CHANGE MASTER TO , KILL 또는 mysqladmin kill (자신의 스레드는 항상 강제 종료 할 수 있습니다) PURGE BINARY LOGS 글로벌 시스템 변수를 변경하기 위해 의 SET GLOBAL 를 사용하여 구성 변경, mysqladmin debug 명령 로깅의 활성화 또는 비활성화 read_only 시스템 변수가 유효한 경우 업데이트 실행 슬레이브 서버에서 복제의 시작 및 중지, 저장 프로그램 및 뷰의 DEFINER 속성의 모든 계정 지정을 사용할 수 있으며, 사용자는 max_connections 시스템 변수에 의해 제어되는 연결 제한에 도달하는 경우에도 (번) 연결 할 수 있습니다.

    바이너리 로깅을 활성화 한 경우 저장 기능을 만들거나 수정할 때, 섹션 20.7 "저장 프로그램의 바이너리 로깅" 에서 언급 된 바와 같이 SUPER 권한이 역시 필요할 수 있습니다.

  • TRIGGER 권한은 트리거 작업을 활성화합니다. 테이블의 트리거를 작성, 삭제 또는 실행하려면 그 테이블에 대해이 권한을 가질 필요가 있습니다.

  • UPDATE 권한은 데이터베이스의 테이블 행의 갱신을 가능하게합니다.

  • USAGE 권한 지정자는 "권한 없음"을 나타냅니다. 이것은 GRANT 와 함께 글로벌 수준에서 사용되는 기존의 계정 권한에 영향을주지 않고 자원 제한 및 SSL 특성 등의 계정 속성을 변경합니다.

계정에 필요한 권한만을 부여하는 것이 좋습니다. FILE 권한 및 관리 권한 부여에 충분히주의하도록하십시오.

  • FILE 권한을 악용하여 MySQL 서버가 서버 호스트에서 읽을 수있는 모든 파일을 데이터베이스 테이블에서 읽을 수 있습니다. 여기에는 모든 사용자가 읽을 수있는 모든 파일 및 서버의 데이터 디렉토리에있는 파일이 포함되어 있습니다. 그 후, SELECT 를 사용하여 테이블에 액세스하고 테이블의 내용을 클라이언트 호스트로 전송할 수 있습니다.

  • GRANT OPTION 권한을 통해 사용자는 다른 사용자에게 권한을 부여 할 수 있습니다. 다른 권한을 가진 2 명의 사용자가 GRANT OPTION 권한을 가지고 있으면, 권한을 결합 할 수 있습니다.

  • ALTER 권한을 사용하여 테이블의 이름을 변경하여 권한 시스템을 끊을 수 있습니다.

  • SHUTDOWN 권한을 악용하여 서버를 종료하여 다른 사용자에게 서비스를 완전히 방해 할 수 있습니다.

  • PROCESS 권한은 패스워드 설정 및 변경하는 명령문 등을 포함하여 현재 실행중인 명령문의 일반 텍스트를 표시 할 수 있습니다.

  • SUPER 권한은 다른 세션을 종료하거나 서버의 동작 방식을 변경하는 데에 사용할 수 있습니다.

  • mysql 데이터베이스 자체에 부여 된 권한을 사용하여 암호 및 기타 액세스 권한 정보를 변경할 수 있습니다. 비밀번호는 암호화되어 저장되어 있기 때문에 공격자는 단순히 암호를보고 일반 텍스트 암호를 알 수 없습니다. 그러나 user 테이블의 Password 컬럼에 대한 쓰기 액세스 권한이있는 사용자 계정의 암호를 변경하고 해당 계정을 사용하여 MySQL 서버에 연결할 수 있습니다.


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