권한

권한의 종류

책너두 6기 6일차

백은빈, 이성욱의 Real MySQL8.0 1권 p.65 ~ p.75

내용정리

03 사용자 및 권한

3.4 권한(privilege)

글로벌 권한 객체 권한
데이터베이스나 테이블이외의 객체에 적용 데이터베이스나 테이블을 제어하는데 필요
grant명령에서 특정 객체를 명시X 권한을 부여할 떄 반드시 특정 객체 명시

ALL(또는 all privileges)

  • 글로벌과 객체 권한 두 가지 용도로 사용 될 수 있음.

  • 특정 객체에 ALL 권한이 부여되면 해당 객체에 적용될 수 있는 모든 객체 권한을 부여
  • 글로벌로 ALL이 사용되면 글로벌 수준에서 가능한 모든 권한 부여
정적 권한 동적 권한
MySQL 서버의 소스코드에 고정적으로 명시돼 있는 권한 MySQL 서버가 시작되면서 동적으로 생성하는 권한

grant명령

  • 각 권한의 범위에 따라 on의 내용이 바뀌어야 한다.

  • 예시 : grant privilege_list ON db.table TO 'user'@'host';

    • 사용자를 먼저 생성하고 grant 명령으로 권한 부여(없을시 오류 발생)
    • 옵션 : 명령의 마지막에 with grant option 붙인다.
    • 구분자(,) : privilege_list에 , 를 통해 권한 여러 개를 동시에 명시할 수 있다
    • TO : 권한을 부여할 대상 사용자 명시
    • ON : 어떤 오브젝트에 권한을 부여할지 결정
  • 예시2(글로벌 권한): grant super on *.* to 'user'@'localhost';
    • *.* : 글로벌 권한은 특정 DB나 테이블에 부여될 수 없기 떄문에 사용. 서버 전체를 의미
  • 예시3(DB 권한) : grant event on employees.* to 'user'@'localhost'

    • DB 권한은 특정 DB에 대해서만 부여하거나 서버에 있는 모든 DB에 대해 부여할 수 있기 때문에 ON절에 *.*나 emplyees.* 모두 사용할 수 있다.
    • DB란 테이블 뿐만 아니라 스토어드 프로그램 모두
    • employees.department 처럼 테이블까지 명시할 수는 없다.
  • 예시4(테이블 권한)

    • grant select,insert,update,delete on *.* to 'user'@'localhost';
    • ``grant select,insert,update,delete on employees.* to ‘user’@’localhost’;`
    • grant select,insert,update,delete on employees.department to 'user'@'localhost';
    • 모든 db, 특정 db의 오브젝트, 특정 DB의 특정 테이블에 모두 줄 수있다.
    • 테이블의 특정 칼럼에 부여할 수 있는 권한은 INSERT, UPDATE, SELECT
    • DELETE 안됨.
    • grant select,insert,update(dept_name) on employees.department to 'user'@'localhost'; => update는 dept_name 칼럼에 대해서만 수행 가능

    3.5 역할(Role)

권한과 계정을 묶은 개념, 내부적으로는 똑같은 객체고 차이가 없다.

역할은 그 자체로 사용될 수 없고 계정에 부여해야한다.

역할 정의 => 권한 부여 => 계정 생성 => 계정에 역할 부여 => 역할 활성화

계정 재 로그인시 역할 자동 비활성화 (시스템 변수로 변경 가능)

똑같은데 create rolecreate user가 따로 있을까? : 데이터베이스 관리의 직무를 분리할 수 있게 해서 보안을 강화하는 용도로 사용할 수 있게 하기 위해!

읽고 나서

처음 mysql을 다룰때 이 부분이 가장 헷갈렸는데 이제 편하게 사용할 수 있겠다.