TIL(2023.08.10)

JAKE·2023년 8월 10일

TIL

목록 보기
25/48
post-thumbnail

🏃‍♂️What I learned

1. DDL(Data Definition Language)

DDL(DATA DEFINITION LANGUAGE) : 데이터 정의 언어

  • 객체(OBJECT)를 만들고(CREATE), 수정(ALTER), 삭제(DROP) 등
  • 데이터의 전체 구조를 정의하는 언어
  • DB 관리자나 설계자가 사용
  • ORACLE에서의 객체 : "테이블, 뷰, 시퀀스, 인덱스", 패키지, 트리거,
    프로시져, 함수(FUCTION), 동의어(SYNONYM), 사용자(USER) 등

1. CREATE

  • 테이블이나 인덱스, 뷰 등 다양한 데이터베이스 객체를 생성하는 구문
  • 테이블로 생성된 객체는 DROP 구문을 통해 제거 가능

1) 테이블 생성
   TABLE : 행(ROW)과 열(COLUMN)으로 구성되는 가장 기본적인 DB 객체
   데이터베이스 내에서 모든 데이터는 테이블을 통해 저장

[표현식]
CREATE TABLE 테이블명 (
   컬럼명 자료형 (크기),
   컬럼명 자료형 (크기),
... );

*참고 [자료형]
◼ NUMBER - 숫자형(정수, 실수)
◼ CHAR(크기) - 고정길이 문자형(최대 2,000바이트)
   ex) CHAR(10) 컬럼에 3바이트 저장해도 10바이트 공간 모두 사용
◼ VARCHAR2(크기) - 가변길이 문자형(최대 4,000바이트)
   ex) VARCHAR2(10) 컬럼에 3바이트 저장하면 나머지 7바이트는 반환
◼ DATE - 날짜
◼ BLOB - 대용량 이진 데이터(4GB)
◼ CLOB - 대용량 문자 데이터(4GB) - 웹소설, 긴 게시판 등에 활용

✔ NUMBER 타입의 문제점
넘버 타입 걸럼에 데이터 삽입 시 제일 앞에 0이 있으면 자동 제거
SO, 숫자 데이터도 0으로 시작하는 가능성이 있으면 CHAR OR VARCHAR 권장

//  MEMBER 테이블 생성
CREATE TABLE MEMBER(
	MEMBER_ID VARCHAR2(20),
	MEMBER_PWD VARCHAR2(20),
	MEMBER_NAME VARCHAR2(30),
	MEMBER_SSD CHAR(14),
	ENROLL_DATE DATE DEFAULT SYSDATE		
);

2. 컬럼에 주석달기

[표현식]
COMMENT ON COLUMN 테이블명.컬럼명 IS '주석내용';

COMMENT ON COLUMN MEMBER.MEMBER_ID IS '회원 아이디';
COMMENT ON COLUMN MEMBER.MEMBER_PWD IS '회원 비밀번호';
COMMENT ON COLUMN MEMBER.MEMBER_NAME IS '회원 이름';
COMMENT ON COLUMN MEMBER.MEMBER_SSD IS '회원 주민등록번호';
COMMENT ON COLUMN MEMBER.ENROLL_DATE IS '회원가입 일';

---------------------------------------------------------------------------

3. 제약 조건(CONSTRAINTS)

  • 사용자가 원하는 조건의 데이터만 유지하기 위해서 특정 컬럼에 설정하는 제약

    [목적]

    ◼ 데이터 무결성
    ◼ 입력 데이터에 문자가 없는지 자동으로 검사
    ◼ 데이터의 수정/삭제 가능 여부 검사 등

    [종류]

    ◼ PRIMARY KEY,
    ◼ NOT NULL,
    ◼ UNIQUE,
    ◼ CHECK,
    ◼ FOREIGN KEY 등

1) NOT NULL

  • 해당 컬럼에 반드시 값이 기록되어야 함.
  • 삽입/수정 시 NULL값 허용하지 않게 컬럼 레벨에서 제약조건 설정
CREATE TABLE USER_USED_NN(
	USER_NUMBER NUMBER NOT NULL, <-- 컬럼 레벨
	USER_ID VARCHAR2(20),
	USER_PWD VARCHAR2(30),
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50)
					  <-- 테이블 레벨
);

INSERT INTO USER_USED_NN 
VALUES(NULL, NULL, NULL, NULL, NULL, '010-7712-1234', 'kd-park@KH.OR.kr'); 
// NOT NULL 위배

2) UNIQUE

  • 컬럼에 입력값에 대해 중복을 제한하는 제약조건
  • 컬럼레벨 AND 테이블 레벨에서 설정 가능 -> 단, UNIQUE조건 설정 컬럼에 NULL값은 중복 가능

◼ 컬럼 레벨에서 작성시 : [CONSTRAINTS 제약조건명] 제약조건
◼ 테이블 레벨에서 작성시 : [CONSTRAINTS 제약조건명] 제약조건(컬럼명)

CREATE TABLE USER_USED_UK(
	USER_NUMBER NUMBER, 
	USER_ID VARCHAR2(20),  
	USER_ID VARCHAR2(20) UNIQUE, // 컬럼 레벨 제약 (제약조건명 미지정)   
	USER_ID VARCHAR2(20) CONSTRAITS USER_ID_U UNIQUE, // 컬럼 레벨 제약 (제약조건명 지정)   
	USER_PWD VARCHAR2(30),
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	UNIQUE(USER_ID)				  
	CONSTRAINTS USER_ID_U UNIQUE(USER_ID)	 // 테이블 레벨 제약(제약조건 미지정)
);

INSERT INTO USER_USED_UK VALUES(1, 'USER01', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
INSERT INTO USER_USED_UK VALUES(1, 'USER01', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
// 입력 불가 -> 중복
// SQL Error [1] [23000]: ORA-00001: 무결성 제약 조건(KH.USER_ID_U)에 위배됩니다.

INSERT INTO USER_USED_UK VALUES(1, NULL, 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
INSERT INTO USER_USED_UK VALUES(1, NULL, 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
// NULL 값이면 중복 입력 가능

2-2) UNIQUE 복합키

  • 두 개 이상의 컬럼을 묶어서 하나의 UNIQUE 제약 조건을 설정

◼ 복합키 지정은 테이블 레벨에서만 가능
◼ 복합키는 지정되는 모든 컬럼의 값이 같을 때 위배

CREATE TABLE USER_USED_UK2(
	USER_NUMBER NUMBER, 
	USER_ID VARCHAR2(20),  
	USER_PWD VARCHAR2(30),
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	CONSTRAINTS USER_ID_NAME_U UNIQUE(USER_ID, USER_NAME)	
);

INSERT INTO USER_USED_UK2 VALUES(1, 'USER01', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
INSERT INTO USER_USED_UK2 VALUES(1, 'USER02', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
INSERT INTO USER_USED_UK2 VALUES(1, 'USER01', 'PASS01', '고길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
// 아이디 네임, 두개 중 하나라도 틀리면 생성 가능

INSERT INTO USER_USED_UK2 VALUES(1, 'USER01', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
// 불가

3) PRIMARY KEY(기본키) 제약조건

  • 테이블에서 한 행의 정보를 찾기 위해 사용할 컬럼을 의미
  • 테이블에 대한 식별자(학번, 사번 등)의 역할

NOT NULL + UNIQUE의 성격 --> 중복되지 않는 값이 필수로 존재해야함.

  • 한 테이블당 한개만 설정 가능
  • 컬럼 레벨, 테이블 레벨에서 설정 가능
  • 한개 혹은 여러개 컬럼을 묶어서 설정 가능
CREATE TABLE USER_USED_PK(
	USER_NO NUMBER CONSTRAINT USER_NO_PK PRIMARY KEY,    -- 컬럼 레벨 
	USER_ID VARCHAR2(20),  
	USER_PWD VARCHAR2(30),
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50)
--	CONSTRAINTS USER_NO PRIMARY KEY(USER_NO)	-- 테이블 레벨
);

INSERT INTO USER_USED_PK VALUES(1, 'USER02', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
INSERT INTO USER_USED_PK VALUES(1, 'USER01', 'PASS01', '고길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
// 넘버 겹침

INSERT INTO USER_USED_PK VALUES
(NULL, 'USER01', 'PASS01', '고길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
// NULL도 안됨

3-2) PRIMARY 복합키 (테이블 레벨에서만 가능)

CREATE TABLE USER_USED_PK2(
	USER_NO NUMBER,  
	USER_ID VARCHAR2(20),  
	USER_PWD VARCHAR2(30),
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	CONSTRAINTS USER_NO_ID_PK PRIMARY KEY(USER_NO, USER_ID)	-- 테이블 레벨
);

INSERT INTO USER_USED_PK2 VALUES(1, 'USER02', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
INSERT INTO USER_USED_PK2 VALUES(2, 'USER02', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
INSERT INTO USER_USED_PK2 VALUES(1, 'USER01', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
-- 둘 중 하나라도 다르면 가능

INSERT INTO USER_USED_PK2 VALUES(1, 'USER02', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
-- 둘 다 같으면 안됨

INSERT INTO USER_USED_PK2 VALUES
(NULL, 'USER03', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
-- NULL도 안됨

4) FOREIGN KEY(외부키, 외래키)

  • 참조된 다른 테이블의 컬럼이 제공하는 값만 사용할 수 있음

  • FOREIGN KEY제약조건에 의해서 테이블간 관계가 형성됨

  • 제공하는 값 외에는 NULL(참조값 없음)을 사용할 수 있음

  • 컬럼레벨일 경우
    : 컬럼명 자료형(크기) [CONSTRAINT 이름] REFERENCES 참조할테이블명[(참조할 컬럼)][삭제룰]

  • 테이블레벨일 경우
    : [CONSTRAINT 이름] FOREIGN KEY (적용할 컬럼명) REFERENCES 참조할테이블명[(참조할 컬럼)][삭제룰]

◼ 참조될 수 있는 컬럼은 PRIMARY KEY컬럼과, UNIQUE 지정된 컬럼만 외래키로 사용가능
◼ 참조할 테이블의 컬럼명이 생략되면, PRIMARY KEY로 설정된 컬럼이 자동 참조할 컬럼이 됨

CREATE TABLE USER_GRADE(
	GRADE_CODE NUMBER PRIMARY KEY,
	GRADE_NAME VARCHAR2(30) NOT NULL
);

INSERT INTO USER_GRADE VALUES(10, '일반회원');
INSERT INTO USER_GRADE VALUES(20, '우수회원');
INSERT INTO USER_GRADE VALUES(30, '특별회원');
//---------------------------------------------------
CREATE TABLE USER_USED_FK(
	USER_NO NUMBER PRIMARY KEY,
	USER_ID VARCHAR2(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	GRADE_CODE NUMBER CONSTRAINT GRADE_CODE_FK  -- 컬럼 레벨
					   REFERENCES USER_GRADE 
                       //(GRADE_CODE) 컬럼명 미작성 시, 참조 테이블의 PRIMARY KEY 자동 참조 
);


INSERT INTO USER_USED_FK VALUES
(1, 'USER01', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '10');
INSERT INTO USER_USED_FK VALUES
(2, 'USER02', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '10');
INSERT INTO USER_USED_FK VALUES
(3, 'USER03', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '30');
INSERT INTO USER_USED_FK VALUES
(4, 'USER04', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', NULL);
// GRADE_CODE에 참조하고 있는 테이블의 10, 20, 30만 입력 가능 (NULL도 포함)

INSERT INTO USER_USED_FK VALUES
(5, 'USER05', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '50');
// 왜래키 제약조건 위배(부모키가 없습니다.)

4-2) FOREIGN KEY 삭제 옵션

  • 부모테이블의 데이터 삭제 시 자식 테이블의 데이터를 어떤식으로 처리할 지 설정

① ON DELETE RESTRICTED(삭제 제한)로 기본 지정
: 외래키로 지정된 컬럼에서 사용되고 있는 값일 경우, 제공하는 걸럼의 값을 삭제하지 못함

DELETE FROM USER_GRADE WHERE GRADE_CODE ='10';
// 삭제 불가 (자식 레코드가 발견되었습니다)

DELETE FROM USER_GRADE WHERE GRADE_CODE ='20';
// 삭제 가능 (자식 사용 안하는중)

② ON DELETE SET NULL : 부모키 삭제시 자식키를 NULL로 변경

CREATE TABLE USER_GRADE2(
	GRADE_CODE NUMBER PRIMARY KEY,
	GRADE_NAME VARCHAR2(30) NOT NULL
);

INSERT INTO USER_GRADE2 VALUES(10, '일반회원');
INSERT INTO USER_GRADE2 VALUES(20, '우수회원');
INSERT INTO USER_GRADE2 VALUES(30, '특별회원');
//---------------------------
CREATE TABLE USER_USED_FK2(
	USER_NO NUMBER PRIMARY KEY,
	USER_ID VARCHAR2(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	GRADE_CODE NUMBER CONSTRAINT GRADE_CODE_FK2 REFERENCES USER_GRADE2 ON DELETE SET NULL 
    // 부모에서 삭제시 NULL
);

INSERT INTO USER_USED_FK2 VALUES
(1, 'USER01', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '10');
INSERT INTO USER_USED_FK2 VALUES
(2, 'USER02', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '10');
INSERT INTO USER_USED_FK2 VALUES
(3, 'USER03', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '30');

DELETE FROM USER_GRADE2 WHERE GRADE_CODE ='10';
// 1.2. 번 null로 변경

③ ON DELETE CASCADE : 부모키 삭제시 값을 사용하는 자식키도 삭제

CREATE TABLE USER_GRADE3(
	GRADE_CODE NUMBER PRIMARY KEY,
	GRADE_NAME VARCHAR2(30) NOT NULL
);

INSERT INTO USER_GRADE3 VALUES(10, '일반회원');
INSERT INTO USER_GRADE3 VALUES(20, '우수회원');
INSERT INTO USER_GRADE3 VALUES(30, '특별회원');

SELECT * FROM USER_GRADE3;

CREATE TABLE USER_USED_FK3(
	USER_NO NUMBER PRIMARY KEY,
	USER_ID VARCHAR2(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50),
	GRADE_CODE NUMBER CONSTRAINT GRADE_CODE_FK3 REFERENCES USER_GRADE3 ON DELETE CASCADE 
    // 부모에서 삭제시 자식도 삭제(행 전체가)
);

SELECT * FROM USER_USED_FK3 ;

INSERT INTO USER_USED_FK3 VALUES
(1, 'USER01', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '10');
INSERT INTO USER_USED_FK3 VALUES
(2, 'USER02', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '10');
INSERT INTO USER_USED_FK3 VALUES
(3, 'USER03', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr', '30');

DELETE FROM USER_GRADE3 WHERE GRADE_CODE ='10';
// 1.2. 번 삭제됨

4. CHECK 제약 조건

: 컬럼에 기록되는 값에 조건 설정을 할 수 있음.

[사용법]
CHECK (컬럼명 비교연산자 비교값)

  • 주의 : 비교값은 리터럴만 사용할 수 있음. 변하는 값이나 함수 사용 못함
CREATE TABLE USER_USED_CHECK(
	USER_NO NUMBER PRIMARY KEY,
	USER_ID VARCHAR2(20) UNIQUE,
	USER_PWD VARCHAR2(30) NOT NULL,
	USER_NAME VARCHAR2(30),
	GENDER VARCHAR2(10) CONSTRAINT GENDER_CHECK CHECK(GENDER IN('남', '여')),
	PHONE VARCHAR2(30),
	EMAIL VARCHAR2(50)
);

INSERT INTO USER_USED_CHECK VALUES
(1, 'USER03', 'PASS01', '박길동', '남', '010-7712-1234', 'kd-park@KH.OR.kr');

INSERT INTO USER_USED_CHECK VALUES
(2, 'USER03', 'PASS01', '박길동', '남자', '010-7712-1234', 'kd-park@KH.OR.kr');
// 체크 제약조건(KH.GENDER_CHECK)이 위배되었습니다.
// GENDER에 '남', '여' 만 입력 가능

// ** CHECK는 범위로도 설정 가능
// EX) CHECK(COL > 0 AND COL < 10);

5. 서브쿼리를 이용한 테이블 생성

: 컬럼명, 데이터 타입, 값이 복사 -> 제약조건은 NOT NULL만 복사

1) 테이블 전체 복사

CREATE TABLE EMPLOYEE_COPY
AS SELECT * FROM EMPLOYEE;
// 서브쿼리의 조회 결과의 모양대로 테이블이 생성

2) JOIN 후 원하는 컬럼만 테이블로 복사

CREATE TABLE EMPLOYEE_COPY2
AS SELECT EMP_ID, EMP_NAME, DEPT_TITLE, JOB_NAME
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID)
JOIN JOB USING(JOB_CODE);

✔ 서브쿼리로 테이블 생성시 테이블의 형태(컬럼명, 데이터타입) + NOT NULL 까지는 복사 가능
이외의 제약조건, COMMENT 등은 복사되지 않음. SO, 별도로 추가해주어야함.


6. 제약조건 추가

◼ ALTER TABLE 테이블명 ADD[CONSTRAINT 제약조건명] PRIMARY KEY (컬럼명);
◼ ALTER TABLE 테이블명 ADD[CONSTRAINT 제약조건명] FOREIGN KEY (컬럼명) REFERENCES 참조테이블명(참조컬럼명);
◼ ALTER TABLE 테이블명 ADD[CONSTRAINT 제약조건명] UNIQUE (컬럼명);
◼ ALTER TABLE 테이블명 ADD[CONSTRAINT 제약조건명] CHECK (컬럼명 비교연산자 비교값);

// EMP_ID 컬럼에 PRIMARY KEY 추가하기
ALTER TABLE EMPLOYEE_COPY2 ADD CONSTRAINT PK_EMP_COPY PRIMARY KEY(EMP_ID);

// EMPLOYEE 테이블의 DEPT_CODE에 외래키 제약조건 추가
//참조 테이블은 DEPARTMENT 참조 컬럼은 DEPARTMENT 기본키
ALTER TABLE EMPLOYEE ADD CONSTRAINT EMP_DEPT_CODE FOREIGN KEY(DEPT_CODE) 
REFERENCES DEPARTMENT ON DELETE SET NULL;

// EMPLOYEE 테이블의 SAL_LEVEL 왜래키 제약조건 추가
// 참조 테이블은 SAL_GRADE 참조 컬럼은 SAL_GRADE의 기본키
ALTER TABLE EMPLOYEE ADD CONSTRAINT EMP_SAL_LEVEL FOREIGN KEY(SAL_LEVEL) 
REFERENCES SAL_GRADE ON DELETE SET NULL;

// DEPARTMENT 테이블의 LOCARION_ID에 외래키 제약조건 추가
//참조테이블은 LOCATION, 참조 컬럼은 LOCATION의 기본키
ALTER TABLE DEPARTMENT ADD CONSTRAINT DEPT_LOCATION_ID FOREIGN KEY(LOCATION_ID) 
REFERENCES LOCATION ON DELETE SET NULL;

// LOCATION 테이블의 NATIONAL_CODE에 외래키 제약조건 추가
// 참조 테이블은 NATIONAL, 참조 컬럼은 NATIONAL의 기본키
ALTER TABLE LOCATION ADD CONSTRAINT LOC_NTL_CODE FOREIGN KEY(NATIONAL_CODE) 
REFERENCES NATIONAL ON DELETE SET NULL;

2. DCL(Data Control Language)

  • 데이터를 다루기 위한 권한을 다루는 언어
  • DB, DB 객체에 대한 접근 권한을 부여(GRANT)하고 회수 (REVOKE)하는 언어

1. 권한의 종류

1) 시스템 권한 : DB접속, 객체 생성 권한

CREATE SESSITON : 데이터베이스 접속 권한
CREATE TABLE : 테이블 생성 권한
CREATE VIEW : 뷰 생성 권한
CREATE SEQUENCE : 시퀀스 생성 권한
CREATE PROCEDURE : 함수(프로시저) 생성 권한
CREATE USER : 사용자(계정) 생성 권한
DROP USER : 사용자(계정) 삭제 권한

      2) 객체 권한 : 특정 객체를 조작할 수 있는 권한

권한 종류 		|			설정 객체

SELECT 					TABLE, VIEW, SEQUENCE
INSERT					TABLE, VIEW
UPDATE					TABLE, VIEW
DELETE					TABLE, VIEW
ALTER 					TABLE, SEQUENCE
REFERENCES				TABLE
INDEX					TABLE
EXCUTE					PROCEDURE 

2. USER - 계정 (사용자)

      1) 관리자 계정 : 데이터베이스의 생성과 관리를 담당하는 계정

모든 권한과 책임을 가지는 계정
EX) SYS, SYSTEM(SYS에서 권한 몇개 제외됨)

       2) 사용자 계정 : 데이터베이스에 대하여 질의, 갱신, 보고서 작성 등의

작업을 수행할 수 있는 계정
업무에 필요한 최소한의 권한만 가지는 것이 원칙


3. 계정 생성하기

  1. SYS 계정 접속

  2. 이전 SQL 구문도 허용해주는 구문(계정정 간단 작성 가능)

 ALTER SESSION SET "_ORACLE_SCRIPT" = TRUE;
  1. 계정 생성
    : CREATE USER '아이디' IDENTIFIED BY '비밀번호'
CREATE USER JAKE IDENTIFIED BY 1234;
  1. 접속 권한 부여
    : GRANT 권한, 권한, ... TO '사용자 명';
GRANT CREATE SESSION TO JAKE;// (계정 생성 권한)
  1. SYS 계정에서 테이블 생성 권한 + TABLESPACE 할당
GRANT CREATE TABLE TO JAKE; // 테이블 생성 권한 부여
ALTER USER JAKE DEFAULT TABLESPACE
SYSTEM QUOTA UNLIMITED ON SYSTEM; // TABLESPACE 할당
  1. 테이블 생성 가능
CREATE TABLE TB_TEST(
	PK_COL NUMBER PRIMARY KEY,
	CONTENT VARCHAR2(100)
);
  1. JAKE 계정에 CONNECT, RESOURCE 부여
GRANT "CONNECT", RESOURCE TO JAKE;
* CONNECT : DB 접속 관련 권한
* RESOURCE : DB 사용을 위한 기본 객체 생성 권한(CREATE TABLE, CREATE SEQUENCE 등..)

4. 객체 권한

ex) kh / JAKE 사용자 계정끼리 서로 객체 접근 권한 부여 과정

  1. JAKE 계정으로 kh 계정의 EMPLOYEE 테이블 조회
SELECT * FROM kh.EMPLOYEE; // 접근 권한 없어서 조회 불가
  1. (kh) 계정에서 JAKE로 EMPLOYEE 테이블 조회 권한 부여
    GRANT 객체권한 ON 객체명 TO 사용자명;
GRANT SELECT ON EMPLOYEE TO JAKE; // 실행 후 조회 가능
  1. 권한 회수 - (kh) 계정에서 실행
REVOKE 객체권한 ON 객체명 FROM 사용자명;
REVOKE SELECT ON EMPLOYEE FROM JAKE; 

0개의 댓글