5시간코딩
[Oracle] DBA : 권한(privileges)과 규칙(Roles) 관리, 유저(Users) 관리 본문
[Oracle] DBA : 권한(privileges)과 규칙(Roles) 관리, 유저(Users) 관리
5시간코딩 2019. 1. 5. 07:171.권한
1.1. 권한 설명
#권한이란?
특정한 sql문을 수행할 수 있는 권리
#권한 2종류는?
시스템권한 - database에 영향을 줄 수 있는 권한. 함부로 주는게 아님.
객체권한 - 객체를 사용할 수 있는 권한. 특정테이블을 조회하고자 할 때.
#권한을 주는 사람은?
시스템권한 - sys, dba
객체권한 - 객체소유자
#권한부여방법은?
role을 통해서 권한을 줄수도있고, dba가 직접부여 할 수도 있음.
1.2. 권한 조회 쿼리문
#user session 후 권한 조회 쿼리문 6가지는?
시스템 권한
select * from session_privs; --> 1)새션한 사용자 시스템 권한 확인 : 3)과 4)를 유니온 한 값임.
select * from session_roles; --> 2)새션한 사용자의 모든 롤 확인
select * from user_sys_privs; --> 3)dba -> user 에게 직접 부여한 시스템 권한 확인
select * from role_sys_privs; --> 4)role -> user 받은 시스템 권한 확인
객체 권한
select * from role_tab_privs; --> 5)role -> user 가 받은 롤 안에 객체 권한 확인
select * from user_tab_privs; --> 6)객체 소유자(tab owner)로부터 직접 받은 객체 권한과, 내가 다른 사람한테 부여한 객체 권한을 확인하는 방법
#user session 후 자신의 정보를 확인하는 대표적인 방법 가지는?
select * from user_users;
select * from user_tables;
select * from user_ts_quotas;
select * from user_recyclebin; --DROPSCN : COMMIT번호, BASE_OBJECT : OBJECT번호
select * from user_constraints where table_name = 'EMP_TEST';
select * from user_cons_columns where table_name = 'EMP_TEST';
select * from user_indexes where table_name = 'CUST';
select * from user_ind_columns where table_name = 'CUST';
#sys session 후 가능한 권한 부여 여부를 조회하는 쿼리문은?
select * from dba_sys_privs; --2)어떤 유저에게 어떤 권한을 줬는지 확인 가능. 뒤에 where grantee = '유저명'; 하면 빠르게 찾을 수 있음.
select * from dba_tab_privs; --3)객체권한을 어떤유저가 어떤유저에게 줬는지 확인하는 방법, 감사때 필요한 방법
select * from dba_roles; --4)데이터 베이스에 생성된 롤에 대한 정보를 확인하는 방법
select * from dba_role_privs; --5)롤을 어떤 유저한테 부여했는지 확인하는 방법
#sys session 후 user정보나 db정보를 확인하는 대표적인 방법 가지는?
^^select * from dba_users; --1)데이터베이스에 생성된 유저 정보를 확인하는 방법
^^select * from dba_data_files;--6)sys계정에서 물리/논리적인 저장공간을 확인하는 방법.
^^select * from dba_temp_files; --7)임시저장소(temporary) 디스크용량 확인방법
^^select * from dba_ts_quotas; --8)quotas 확인방법
show parameter recyclebin;
show parameter undo;
#심화# select * from dba_data_files; 했을 시 나오는 정보
데이터 저장시 데이터는 하드디스크에 물리적인 공간으로 저장되며 표시는 논리적으로 된다.
물리적인 공간(c:\oracle\ ... \xe\users_dbf)
논리적인 공간(users, temp, undo,system)
1)system : 권한 등이 저장됨.
2)undo : 이전값이 저장됨. 변경작업할 때 사용됨.
undotbs1에 저장하는 이유
(1)rollback(DML 작업 되돌림)
(2)읽기 일관성(이전값으로 보게함)
(3)flashback 기능 때문에(drop된 테이블 다시 recyclebin 하기)
3)temp : 임시 저장소. 예를들어 100MByte를 정렬(sorting)해야하는데, 메모리는 10MByte 밖에 없음.
메모리양이 부족하기 때문에 디스크에 잠시 옮기는데, 이때 디스크-메모리 왔다갔다 해서 정렬 작업은 느린거임.
4)users : 우리가 테이블을 저장할 수 있는 공간임. -> 즉 내가 사용할 수 있는곳은 users밖에 없음.
2. user 생성
2.1. user 생성
#sys session 후 확인할 사항들
select * from dba_users; -- 유저네임이 이미 사용되고 있는지 확인
select * from dba_data_files; -- 어떤 tablespace있는지 확인
select * from dba_temp_files; --임시저장소 용량확인
#유저생성
create user olap
identified by oracle
default tablespace users -- 아무땅에다 집을 지으면 안되니까. tablespace는 책장과 같고, 업무특성으로 나눠
temporary tablespace temp -- 임시저장소는 temp
quota 10m on users; -- 땅을 할당함. users라는 tablespace에서 10Mbyte 정도 사용할 수 있게 함.
select * from dba_users;
#quota값 변경
alter user wondae
quota 0 on users; --회수
alter user wondae
quota unlimited on users; --무제한, 검색시 max_bytes가 -1로 표기됨.
#유저권한부여 --DCL(Data Control Language) : GRANT, REVOKE
session권한 부여/회수
grant create session to olap;
revoke create table from olap;
create권한 부여/회수
grant create table to olap;
revoke create table from olap;
select * from dba_sys_privs where grantee = 'OLAP'; --반드시 대문자
#심화# 유저가 테이블에 필요한 권한 2가지는?
1)create table 시스템 권한
select * from dba_user_privs where grantee = '유저명'; (<-> select * from user_sys_privs;)
2)tablespace의 quota사용 권한
select * from dba_users; (<->select * from user_users;) --tablespace가 users에 있는지 확인
select * from dba_ts_quotas; (<->select * from user_ts_quotas;) --할당한 저장용량 확인
#심화# 만약 dba가 sys아이디의 비밀번호를 잃어버리면?
os인증방식을 하면 됨.
로컬 os관리자로 로그인(즉, 서버컴퓨터의 슈퍼계정으로 로그인) -> cmd창 -> sqlplus / as sysdba (아이디비번입력안해도됨)
-> alter user sys identitied by 내가원하는비번;
3. user 삭제
3.1 유저 삭제
#유저 삭제
drop user olap;
#심화# 유저가 접속중이라 drop이 안될 때
sys session 후
select * from v$session; -- 여기서 내가 kill하고자 하는 sid와 serial의 숫자를 아래와 같이 입력함.
alter system kill session '52,59' immediate;
#심화# 유저가 테이블이 있어서 drop이 안될 때
drop user olap cascade; --cascade 하면 안에 있는 모든 테이블 삭제가 선행 실행된 후, 유저 삭제가 실행됨. 주의할 점으로, cascade하여 테이블을 삭제할 경우 복구가 불가능하다.
4. 객체(테이블) 권한 부여
#hr유저의 테이블의 DML 권한 주기/회수
grant select on hr.employees to wondae; --hr테이블에서 실행하므로 사실상 hr.은 안붙여도 되지만 붙이는 습관을 들이자.
revoke select on hr.employees from wondae;
select * from user_tab_privs;