본문 바로가기

DB/SQLD

SQL 활용 - DCL

반응형

DCL (DATA CONTROL LANGUAGE)

유저를 생성하고 권한을 제어할 수 있는 명령어

데이터의 보호와 보안을 위한 언어

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
1. 유저 생성, 로그인등 권한 주기
CONN SCOTT/TIGER // 로그인
CREATE USER PJS IDENTIFIED BY KOREA7;
// 오류. 권한 불충분
 
'GRANT'
GRANT CREATE USER TO SCOTT; // 유저 생성권한을 SCOTT에게 줌
CONN SCOTT/TIGER
CREATE USER PJS IDENTIFIED BY KOREA7;
// 유저 PJS 생성 완료
 
유저가 생성되었어도 아무런 권한이 없다.
따라서 로그인할 수 있게 권한부여해줘야 함.
CONN SCOTT/TIGER;
GRANT CREATE SESSION TO PJS;
CONN PJS/KOREA7;
// 로그인 성공
 
CONN SYSTEM/MANAGER;
GRANT CREATE TABLE TO PJS; // 테이블생성권한 줌
CONN PJS/KOREA7;
CREATE TABLE MENU(
    MENU_SEQ NUMBER NOT NULL,
    TITLE VARCHAR2(10)
);
// 테이블 생성 성공
 
* 다른 유저가 생성한 테이블에 접근 권한이 없음.
CONN PJS/KOREA7;
INSERT INTO MENU VALUES(1,'화이팅');
COMMIT;
GRANT SELECT ON MENU TO SCOTT; // SCOTT에게 SELECT 권한을 줌
 
CONN SCOTT/TIGER;
SELECT * FROM PJS.MENU;
// 결과나옴 1'화이팅'
// UPDATE 문을 쓰면 당연히 안됨. 업데이트 권한을 따로 받아야 하기때문.
 
2. Role을 이용한 권한 부여
* 이렇게 일일이 권한을 부여하다보면 실수할 가능성도 많고
누구에게 어떤 권한을 주었는지도 관리를 해야하는 불편이 있다.
따라서 하나의 Role을 정하고 그것에 권한을 부여한 뒤 그 Role을 유저에 부여하는 방법
 
CONN SYSTEM/MANAGER;
REVOKE CREATE SESSION, CREATE TABLE FROM PJS;
// REVOKE 는 권한 제거
CONN PJS/KOREA7;
// 로그인이 거절됨. 로그인권한 없애버려서.
 
CONN SYSTEM/MANAGER;
CREATE ROLE LOGIN_TABLE;
GRANT CREATE SESSION, CREATE TALBLE TO LOGIN_TABLE;
// 롤을 만들고 그 롤에 권한 부여.
GRANT LOGIN_TABLE TO PJS;
// 롤을 유저에게 부여
CONN PJS/KOREA7;
// 연결됨.
CREATE TABLE MENU2(
    MENU_SEQ NUMBER NOT NULL,
    TITLE VARCHAR2(10)
);
 
CONN SYSTEM/MANAGER;
DROP USER PJS CASCADE// PJS가 만들 테이블도 같이 삭제됨.
CREATE USER PJS IDENTIFIED BY KOREA7;
GRANT CONNECT, RESOURCE TO PJS;
// 오라클에서 기본적인 Role을 만들어놓았음.
// CONNECT와 RESOURCE 라는.
// 나중에 확인해볼것.


주관식으로 권한 관련 문제가 나왔었음.

반응형