■DCL문
"데이터 베이스의 권한 관리에 대한 내용"
*sQL 의 종류
1. Query
2. DML
3. DDL
4. DCL ----------> database control language:
grant, revoke
5. TCL
■ 유저 생성
*내가 가지고 있는 권한이 무엇인지 확인하는 방법
select * from session_privs;
*유저생성
문제447.
내가 가지고 있는 권한 중에 create user 권한이
있는지 확인하시오
select * from session_privs
where privilege like '%USER%';
첨에 소문자 써서 안나왔어 ㅠㅠ흑흑
■GRANT
권한을 부여해주는 DCL 문이다.
문제448.
smith 라는 유저를 생성하는데
패스워드를 oracle 이라고 해서
생성하시오~~
scott 의 권한도 주시오.
create user smith
identified by oracle;
connect scott/tiger;
grant connect to smit;
***scott 이 이 권한을 부여할 수 있는게
아까 조회해보니까 202개나 권한이 있었음ㅋ
connect smith/oracle;
show user;
******패스워드 칠 때 대소문자 주의~~
문제449.
smith 유저에서 아래의 테이블을 생성하시오
테이블명: emp05
컬럼명: empno
ename
sal
create table emp05
(empno number(10), ename varchar2(20), sal number(10) );
에러뜹니다.
왜냐하면 테이블 만들 권한을 안드렸거든요
문제450.
smith 유저에게
create table 권한을 부여하시오!
scott 으로 컨넥 한다음
grant create table to smith;
퀴즈!
테이블 생성 가능할까?
문제451.
smith 유저에게 권한 주고
테이블 생성하라고 시키면 될까?
테이블명: emp05
컬럼명: empno
ename
sal
create table emp05
(empno number(10), ename varchar2(20), sal number(10) );
여전히 권한이 없다고 뜹니다.
집을 지을 수 있는 권한은 있으나
땅이 없는 상태입니다.
create table emp05
(empno number(10), ename varchar2(20), sal number(10) );
문제452.
scott 유저로 접속해서
smith 유저에게
오라클 데이터베이스의 땅을 자유롭게 이용할 수 있는 권한을 주시오.
grant unlimited tablespace to smith
create table emp05
(empno number(10), ename varchar2(20), sal number(10) );
문제453.
scott 유저로 접속해서 smith 유저에게
scott 유저의 emp 테이블을 select 할 수 있는
권한을 주시오.
connect scott/tiger;
grant select on emp to smith;
connect smith/oracle
select * from emp;
하면 안되고
select * from scott.emp;
근데 일일이 scott.emp 하면
너무 귀찮다
문제454.
scott 유저에서
smith 유저가 scott.emp 로 테이블을 조회하지 않도록
emp 라는 synonym을 public 으로 생성하시오
connect scott/tiger;
create public synonym emp
for scott.emp;
*public 을 주면 모든 유저가 조회할 수 있다는
권한입니다.
connect smith/oracle;
select * from emp;
문제455.
smith 유저에게
emp2 테이블을
조회할 수 있는 권한을 주시오
connect scott/tiger;
*이미
grant unlimited tablespace to smith;
이건 줬으니 생략*
grant select on emp2 to smith;
create public synonym emp2
for scott.emp2;
connect smith/oracle;
select * from emp2;
문제456.
아래와 같은 상황을 만드시오
allen 과 king 을 만들고
allen 과 king 에게 connect 할 수 있는
권한을 부여 하고
아래와 같이 도스창 3개를 여시오
scott ---------> allen ----------> king
create user allen
identified by oracle;
create user king
identified by oracle;
grant connect to allen;
grant connect to king;
문제457.
scott 이 allen 에게 emp 테이블을 select 할 수 있는 권한을 부여하시오
grant select on emp to allen;
-WITH GRANT OPTION
문제458.
allen 이 king 에게
scott의 emp 테이블을 select 할 수 있는 권한을
부여하시오
connect allen/oracle;
grant select on emp to king;
권한 없다고 나옴 ㅎㅎ안됨
scott ---------> allen ----------> king
↓
grant select on emp to allen with grant option;
1. emp 테이블을 select 할 수 있는 권한
2. emp 테이블을 select 할 수 있는 권한을
남에게 줄 수 있는 권한
스캇으로 들어가서
withn grant option 을 알렌에게 주고,
알렌으로 컨넥해서
킹에게 grant select on emp to king
하면 가능합니다.
■REVOKE
GRANT 로 줬던 권한을 뺏는 DCL 문이다.
문제459.
위와 같은 상황에서
scott 이 다시 allen 에게 주었던
emp 테이블을 select 할 수 있는 권한을
뺏으면
킹은 어떻게 될까요?
revoke select on emp from allen with grant option;
그리고 킹에서 select * from emp;
를 하면 같이 뺏긴다
(부여자 알렌이 뺏기니까
부여받은 킹도 뺏김)
※설명: king 유저도 같이 권한이 뺏긴다.
■ DCL 문
1. 유저생성 create/identified by
2. 권한부여 grant
3. 권한취소 revoke
4. 권한의 집합인 롤을 부여
5. 패스워드 변경
-ROLE
■ 권한의 집합인 롤을 부여
1. 어제 유저생성하고 권한 부여했던 방법
create user jack
identified by tiger;
grant connect to jack;
↓
롤(role): 역할에 맞는 권한들의 집합
grant create table to jack;
> 이렇게 하면,
인덱스 생성할 수 있는 권한까지 포함된다.
(보통은 이렇게 잘 안 줌)
grant create view to jack;
2. 오늘 유저생성하고 권한 부여하는 방법
create user jack2
identified by tiger;
grant connect, recource to jack2;
↓ ↓
롤(role) -> 여러 권한들의 집합
role 안에 resorce, connect, dba...등등 여러가지
문제467.
resource 라는 role 이 가지고 있는 권한이 무엇인지
확인하시오
select *
from role_sys_privs
where role = 'RESOURCE';
**RESOURCE 꼭 대문자
view 생성 권한이 없는 걸 알 수 있다.
문제468.
connect 라는 role 에는 어떠한 권한이 있는지 확인하시오.
select *
from role_sys_privs
where role = 'CONNECT';
마찬가지로 connect 도 대문자로 CONNECT
문제469.
dba 라는 role 에는 들어있는 권한이
총 몇개인지 확인하시오
select count(*)
from role_sys_privs
where role = 'DBA';
■ 패스워드 변경
*오라클 데이터 베이스에 유저들이 누가누가 있는지
확인하시오
select * from dba_users;
*smith의 패스워드를 tiger 로 변경하시오
alter user smith
identified by tiger;
connect smith/tiger
*변경한 패스워드를 확인하는 방법은?
select * from dba_users;
null로 나옴. 패스워드 확인할 방법 없음.
*유저 삭제
권한 가진 scott 으로 커넥
drop user smith cascade;
※설명: 유저를 삭제하면 해당 유저가 가지고 있는
모든 객체들이 다 삭제가 된다.
문제470.
king, allen 유저를 삭제하시오
drop user king cascded;
drop user allen cascade;
문제471.
jones 라는 유저를 만들고
scott 의 emp 테이블을
select, insert, update, delete 할 수 있는
권한을 부여하시오!
connect scott/tiger
create user jones
identified by tiger;
grant connect, resource to jones;
grant select, insert, update, delete on emp
to jones;
또는
grant all on emp to jones;
문제472.
jones 가 가지고 있는
시스템 권한들이 무엇인지 확인하시오.
■권한
시스템권한: 객체를 만들 수 있는 권한
객체권한 확인: 특정 데이터를 접근/조회할 수 있는 권한
1. 시스템 권한 확인(객체를 만들 수 있는 권한)
select * from session_privs;
뭔가 만들 수 있는 권한
2. 객체 권한 확인 (*이게 중요함)
(특정 데이터를 엑세스(접근/조회) 할 수 있는 권한)
select *
from user_tab_privs;
priviliege 컬럼을 보면서 어떤 권한이 있는지 알고 있어야 한다.
'sql' 카테고리의 다른 글
12. 제약 (0) | 2019.03.31 |
---|---|
11-4. 데이터 조작 언어(계층형 질의문) (0) | 2019.03.31 |
11-2. 데이터 조작 언어(DDL문) (0) | 2019.03.30 |
11-1. 데이터 조작 언어(TCL문) (0) | 2019.03.30 |
11. 데이터 조작 언어(DML문) (0) | 2019.03.30 |