데이터베이스

[DB] Msql 권한

KyooDong 2020. 12. 8. 04:50
728x90

권한 (Authorization)

데이터베이스 관리자(DBA) 가 다른 사용자에게 권한을 부여, 회수 할 수 있음

데이터 권한

  • Read 권한 : 읽기는 가능하지만 데이터 수정은 불가능

  • Insert 권한 : 새로운 데이터의 생성은 가능하지만 데이터 수정은 불가능

  • Update 권한 : 수정은 가능하지만 데이터 삭제는 불가능

  • Delete 권한 : 데이터 삭제 가능

스키마 수정 권한

  • 인덱스 권한 : 인덱스를 만들고, 제거할 수 있는 권한

  • 리소스 권한 : 테이블 생성 권한

  • Alteration 권한 : 테이블 속성 추가, 삭제 권한

  • 드랍 권한 : 테이블 삭제 권한

권리(Privilege)

  • select

  • insert

  • update

  • delete

  • references : 권한을 부여받은 사용자만 FK 를 만들 수 있도록 함

  • usage : 특정 domain 만 사용할 수 있도록 제한

  • all privileges : 모든 권한을 부여

권한 부여(Grant)

GRANT <privilege list> ON <Relation name> TO <User list> [with grant option]

<User list>

  • user-id

  • role

  • public (모든 사용자)

with grant option

이 권한을 받은 사용자가 또 다른 사용자에게 권하을 줄 수 있게 허용할 것인지에 대한 여부

GRANT select ON professor to U1, U2, U3 WITH GRANT OPTION;  -- U1, U2, U3에게 professor 테이블 읽기 권한을 줌
GRANT reference(deptName) ON department to Mario; -- Mario 에게 department.deptName 를 참조할 수 있는 권한을 줌

권한 회수 (Revoke)

REVOKE <Privilege list> ON <Relation name> FROM <User list> [restricted | cascade];

REVOKE select ON professor FROM U1, U2, U3;

 

Cascade(Default) : 이 사용자가 다른 사용자에게 준 권한도 연쇄적으로 회수

Restricted : 이 사용자가 다른 사용자에게 권한을 준 것이 있다면 권한 회수 실패 처리

Authorization grant graph

V1 → V2 는 V1 이 V2 에게 권한을 부여했음을 의미함. 따라서 cascade 로 revoke 를 수행한다면 grant graph 의 역방향으로 회수

 

뷰에 대한 권한

  • 베이스 테이블의 select 권한이 있어야 뷰를 생성할 수 있음

    • 리소스 권한은 필요하지 않음 ( 테이블 생성을 하려면 리소스 권한이 필요함 )

  • 뷰를 만들었다는 것이 뷰에 대한 모든 권한을 지녔다는 의미는 아님 → 베이스 테이블의 권한만큼만 가짐

    • 즉 뷰에 insert 를 하고싶다면 베이스 테이블에 insert 권한을 갖고 있어야함

  • 뷰 자체가 권한 설정으로 이용됨 ( 특정 컬럼만 공개하고 싶을 때 주로 사용 )

CREATE VIEW myTeach AS
SELECT name, title
FROM professor, teaches, course
WHERE teaches.pID = professor.pID AND course.cID = teaches.cID AND semester = ‘Fall’ AND year = 2014;

 

위와 같이 View 를 만들어두고, 다른 사용자들에게는 professor 의 select 권한을 주는 것이 아닌 myTeach 의 권한을 부여함

 

주의해야 할 점은 사용자 A 가 myTeach 의 select 권한을 부여 받았을 때 A가 professor, teaches, course 테이블의 select 권한을 갖지 않아도 select 를 수행할 수 있다는 것임

뷰를 만든 이의 기본 권한과 권한을 부여 받은 이의 권한 정책을 헷갈리면 안됨

  • 만든이 : 베이스 테이블의 select 권한이 있어야하며, 만들어진 뷰에 대한 권한 또한 베이스 테이블의 권한에 한함

  • 권한을 부여 받은 이 : 만든이와는 달리 뷰 자체의 권한만을 바라봄

Role

집단 공통 권한을 부여할 때 사용하는 기능임

회사에서 팀이나 부서 별로 권한을 달리 부여할 때, 직급별로 권한을 달리 부여할 때 유용한 기능임 (집단 단위의 권한)

CREATE ROLE teller;
CREATE ROLE manager;
GRANT select ON professor TO teller;
GRANT update(balance) ON account To teller;
GRANT ALL PRIVILEGES ON account To manager;

GRANT teller TO kim, park;
GRANT manager TO Lee;
GRANT teller to manager;  -- role 에게 role 부여