Contents
15장. 사용자 권한 제어
데이터 베이스 보안
1. 다중 사용자 환경 (multi-user environment)
1) 사용자는 자신이 생성한 객체에 대해 소유권을 가지고 데이터에 대한 조작이나 조회 가능
2) 다른 사용자가 소유한 객체는 소유자로부터 접근 권한을 부여받지 않는 접근 불가
3) 다중 사용자 환경에서는 데이터베이스 관리자의 암호를 철저하게 관리
2. 중앙 집중적인 데이터 관리
3. 시스템 보안
1) 데이터베이스 관리자는 사용자 계정, 암호 관리, 사용자별 허용 가능한 디스크 공간 할당
2) 시스템 관리 차원에서 데이터베이스 자체에 대한 접근 권한 관리
4. 데이터 보안
1) 사용자 별로 객체를 조작하기 위한 동작 관리
2) 데이터베이스 객체에 대한 접근 권한 관리
권한
1) 시스템 권한
테이블, 뷰, 롤백 세그먼트, 프로시져와 같은 객체를 생성, 삭제, 수정하는 작업 관련
● 시스템 권한 부여 / 철회 → GRANT TO / REVOKE FROM


① DB 관리자가 갖는 시스템 권한
: 사용자 생성, 삭제, 사용자 계정에서 객체의 생성 또는 수정, 데이터베이스 백업 관리

② 일반 사용자가 갖는 시스템 권한
: 사용자가 생성한 객체 관리, 내장 프로시저 관리

2) 객체 권한
테이블, 뷰, 시퀀스, 함수 등과 같은 객체를 조작할 수 있는 권한

● 객체 권한 부여 / 철회 → GRANT ON TO / REVOKE ON FROM



롤 (role)
다수 사용자와 다양한 권한을 효과적으로 관리하기 위해 서로 관련된 권한을 그룹화한 개념.
일반 사용자가 DB를 이용하기 위한 공통적인 권한을 그룹화
(데이터베이스 접속권한, 테이블 생성, 수정, 삭제, 조회 권한, 뷰 생성 권한)
▶ 종류
1. CONNECT 롤
✓ 사용자가 DB에 접속해 세션을 생성할 수 있는 권한
✓ 테이블 또는 뷰와 같은 객체를 생성할 수 있는 권한
2. RESOURCE 롤
✓ 사용자에게 자신의 테이블, 시퀀스, 프로시져, 트리거 객체 생성 할 수 있는 권한
✓ 사용자 생성 시 : CONNECT 롤과 RESOURCE 롤 부여
3. DBA 롤
✓ 시스템 자원의 무제한적인 사용이나 시스템 관리에 필요한 모든 권한
✓ DBA 권한을 다른 사람에게 부여 가능
✓ 모든 사용자 소유의 CONNECT, RESOURCE, DBA 권한을 포함한 모든 권한을 부여 및 철회 가능

▶ 롤 생성

▶ 롤에 권한 부여

1) 롤에 시스템 권한 부여
: DBA 또는 GRANT ANY PRIVILEGE 권한을 가진 사용자는 가능
2) 롤에 객체 권한 부여
• 사용자가 객체의 소유자인 경우
• WITH GRANT OPTION 옵션과 함께 객체 권한을 부여 받은 경우
3) 롤에 롤 부여
• 사용자 또는 다른 롤에게 롤 부여
• 롤을 부여받은 사용자나 다른 롤은 해당 롤이 가지는 모든 권한 사용 가능
• WITH ADMIN OPTION
동의어
하나의 객체에 대해 다른 이름을 정의하는 방법
✓ 동의어 vs 별명 (Alias)
➝ 동의어 : 데이터베이스 전체에서 사용
➝ 별명 : 해당 SQL 명령문에서만 사용
▶ 종류
1) 공용 동의어 : 권한을 주는 사용자가 정의한 동의어. 누구나 사용 가능 (DBA 권한을 가진 사용자만 생성)
2) 전용 동의어 : 객체에 대한 접근 권한을 부여 받은 사용자가 정의한 동의어. 해당 사용자만 사용

▶ 동의어 삭제
DROP [PUBLIC] SYNONYM synonym;
21장. 트리거
어떤 이벤트 발생 시 내부적으로 자동 실행되도록 DB에 저장된 프로시저


▶ 사용 범위
1) DB 테이블 생성하는 과정에서 참조 무결성과 데이터 무결성 등의 복잡한 제약 조건 생성하는 경우
2) DB 테이블의 데이터에 생기는 작업의 감시, 보완
3) DB 테이블에 생기는 변화에 따라 필요한 다른 프로그램을 실행하는 경우
4) 불필요한 트랜잭션을 금지하기 위해
5) 컬럼의 값을 자동으로 생성되도록 하는 경우
▶ 유형 (몸체 내용 몇 번 실행 ?)
1) 문장 레벨 트리거 : DML문 시행 시 단 한 번만 트리거 발생 (FOR EACH ROW X)
2) 행 레벨 트리거 : DML문에 의해 여러 개의 행이 변경된다면, 각 행이 변경될 때마다 트리거 발생 (FOR EACH ROW O)
➔ :OLD , 변경 전 값
➔ :NEW , 변경 후 값
▶ 타이밍 (트리거 언제 실행?)
1) BEFORE : DML문 실행 전 BEGIN-END 사이 문장 실행 (테이블, 뷰 모두 작동)
2) AFTER : DML문 실행 후 (테이블 O, 뷰 X)
▶ 예제
: 테이블에 새로운 데이터가 들어오면 해당 데이터를 백업 테이블에 저장하는 테이블
-- 사용자가 사용하는 테이블 생성
CREATE TABLE dept_original
AS
SELECT * FROM dept WHERE 0=1;
-- 트리거에 의해 사용되는 백업 테이블 생성
CREATE TABLE dept_copy
AS
SELECT * FROM dept WHERE 0=1;
-- INSERT 트리거 생성
CREATE OR REPLACE TRIGGER trigger_sam1
AFTER INSERT
ON dept_original
FOR EACH ROW
BEGIN
IF INSERTING THEN
DBMS_OUTPUT.PUT_LINE('Insert Trigger 발생');
INSERT INTO dept_copy
VALUES(:new.dno, :new.dname, :new.loc);
END IF;
END;
-- 테이블에서 데이터가 삭제되면, 백업 테이블에 저장된 해당 데이터도 삭제
CREATE OR REPLACE TRIGGER trigger_sam2
AFTER DELETE
ON dept_original
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('Delete Trigger 발생');
DELETE FROM dept_copy
WHERE dept_copy.dno = :old.dno; – :old는 임시 테이블
END;
'KDT > TIL' 카테고리의 다른 글
20220822-20220901 (0) | 2022.09.01 |
---|---|
2022-08-18 (Thu) (0) | 2022.08.22 |
2022-08-16 (Tue) (0) | 2022.08.16 |
2022-08-10 (Wed) (0) | 2022.08.14 |
2022-08-09 (Tue) (0) | 2022.08.14 |