자원을 효율적으로 관리하기 위한 다양한 정보를 저장하는 시스템 테이블
데이터 딕셔너리는 사용자가 테이블을 생성하거나 사용자를 변경하는 등의 작업을 하게 되면 데이터베이스 서버에 의해서 자동으로 정보를 갱신하는 테이블
사용자는 데이터 딕셔너리의 내용을 직접 수정하거나 삭제 할 수 없음
데이터 딕셔너리 안에는 중요한 정보가 많이 있기 때문에 사용자를 이를 활용하기 위해 데이터 딕셔너리 뷰를 사용하여 정보를 확인할 수 있다.
대표적인 3개의 데이터 딕셔너리 뷰
구분 | 작성법 |
---|---|
DBA_XXXX (최고관리자) | SELECT OWNER, TABLE_NAME FROM DBA_TABLES; |
ALL_XXXX (모든 계정 접근 가능) | SELECT OWNER, TABLE_NAME FROM ALL_TABLES; |
USER_XXXX (자신이 소유한 객체만) | SELECT TABLE_NAME FROM USER_TABLES; |
테이블, 인덱스, 뷰 등과 같은 자신이 소유한 객체의 정보를 저장하고 있는 데이터 딕셔너리 | DESC ALL_TABLES; |
현재 계정으로 생성한 객체 테이블 목록을 확인할 수 있음 | SELECT * FROM USER_OBJECTS WHERE OBJECT_TYPE = 'TABLE'; |
하나 이상의 테이블에서 원하는 데이터를 선택하여 새로운 가상 테이블을 만들어 주는 것
데이터 자체를 가지고 있는게 아니라 링크 개념이라고 볼 수 있음
뷰를 사용하면 특정 사용자가 원본 테이블에 접근하여 모든 데이터를 보게 하는 것을 방지 할 수 있음
뷰를 만들기 위해서는 뷰 생성 권한이 필요
View 사용시 주의할점 :
구분 | 작성법 |
---|---|
View Data Dictionary 확인 | SELECT * FROM USER_VIEWS; |
View 생성 권한 부여 (System 계정에서 가능) | GRANT CREATE VIEW TO 계정명; |
View 만들기 | CREATE VIEW 뷰이름 AS SELECT 구문 |
View 만들기+옵션 | CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW 뷰이름 AS SELECT 구문 [WITH READ ONLY ] [ WITH CHECK OPTION ] ; |
VIEW 확인 | SELECT * FROM 뷰이름; |
다른계정에서 VIEW를 검색할 수 있는 권한 설정 (VIEW를 만든 계정에서 진행) | GRANT SELECT ON 계정명1.뷰이름 TO 계정명2; |
VIEW 삭제 | DROP VIEW 뷰이름 |
구분 | 의미 |
---|---|
OR REPLACE | 생성한 뷰가 존재하면 뷰를 갱신 |
FORCE / NOFORCE | FORCE옵션은 기본 테이블이 존재하지 않더라도 뷰를 생성 NOFORCE는 기본 테이블이 없으면 생성하지 않음(기본값은 NOFORCE) |
WITH CHECK OPTION | 설정한 컬럼의 값을 수정하지 못하게 함 |
WITH READ ONLY | 뷰에 대해 조회만 가능하고, 삽입, 수정, 삭제 등을 하지 못하게 함 |
구분 | 작성법 |
---|---|
시퀀스 객체 생성 | CREATE SEQUENCE 시퀀스명 1. [START WITH 숫자] 2. [INCREMENT BY 숫자] 3. [MAXVALUE 숫자 | NOMAXVALUE] 4. [MINVALUE 숫자 | NOMINVALUE] 5. [CYCLE | NOCYCLE] 6. [CACHE | NOCACHE] |
SEQUENCES Data Dictionary View (가지고 있는 시퀀스 확인하기) | SELECT * FROM USER_SEQUENCES; |
생성된 시퀀스 확인 | SELECT * FROM USER_SEQUENCES WHERE SEQUENCE_NAME = '시퀀스명'; |
현재 시퀀스값의 다음 값을 반환 | SELECT 시퀀스명.NEXTVAL FROM DUAL; |
현재값을 반환 | SELECT 시퀀스명.CURRVAL FROM DUAL; |
시퀀스 수정 (START WITH 값 변경은 불가) | ex) ALTER SEQUENCE 시퀀스명 INCREMENT BY 10 MAXVALUE 500 NOCYCLE NOCACHE; |
시퀀스 삭제 | DROP SEQUENCE 시퀀스명; |
NEXTVAL, CURRVAL 을 사용할 수 있는 경우
NEXTVAL, CURRVAL을 사용할 수 없는 경우
EX)
INSERT INTO MEMBER_TEST_TBL VALUES (SEQ_TEST.NEXTVAL, '홍길동',20);
INSERT INTO MEMBER_TEST_TBL VALUES (SEQ_TEST.NEXTVAL, '김말똥',30);
INSERT INTO MEMBER_TEST_TBL VALUES (SEQ_TEST.NEXTVAL, '고길똥',40);
INSERT INTO MEMBER_TEST_TBL VALUES (SEQ_TEST.NEXTVAL, '똥똥똥',50);
SELECT * FROM MEMBER_TEST_TBL; --확인
비공개 동의어
공개 동의어
구분 | 작성법 |
---|---|
비공개 동의어 생성 | GRANT CREATE SYNONYM TO 계정명;-- system에서 권한 부여 CREATE SYNONYM 동의어 FOR 테이블명; |
공개 동의어 생성 | CREATE PUBLIC SYNONYM 동의어 FOR 계정명.테이블명; -- system 계정에서 생성 |
동의어 확인 | SELECT * FROM ALL_SYNONYMS WHERE TABLE_OWNER = '계정'; |
동의어 삭제 하기 | DROP PUBLIC SYNONYM 동의어; -- system 계정 DROP SYNONYM 동의어; -- kh 계정 |
사용자에게 여러개의 권한을 한번에 부여 할 수 있는 객체
사용자에게 권한을 부여할때 한개씩 부여하게 된다면 권한 부여 및 회수에 따른 관리가 불편함
Oracle DB 설치시 기본 제공되는 ROLE
CREATE ROLE emptyRole; -- 아무 권한 없는 Role
CREATE ROLE connectRole; -- 접속 권한만 있는 Role
CREATE ROLE managerRole;-- 접속권한 + 리소스 사용 권한이 있는 Role
GRANT CREATE SESSION TO CONNECTROLE;
GRANT CONNECT, RESOURCE TO MANAGERROLE;
CREATE USER EX05 IDENTIFIED BY 1234;
GRANT EMPTYROLE TO EX05;
REVOKE EMPTYROLE FROM EX05;
GRANT CONNECTROLE TO EX05;
REVOKE CONNECTROLE FROM EX05;
GRANT MANAGERROLE TO EX05;
REVOKE MANAGERROLE FROM EX05;