반응형
청춘고양이
배움을 기록하는 곳
청춘고양이
전체 방문자
오늘
어제
  • Hello World (120) N
    • JQuery (5)
    • In my opinion (4)
    • HTML&CSS (8)
    • JS (9)
    • JAVA (21)
    • Spring Boot (21)
    • Node.js (1)
    • Linux (7)
    • Git (2)
    • Kotlin (4)
    • Fluttor (4)
    • 정보처리기사 (19)
    • AWS (1)
    • Oracle (9) N
    • MySQL (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • js 로또 번호
  • 제이쿼리 패스워드 변경
  • 중복 제거 로또
  • 쉬프트 연산
  • 초보개발
  • js 패스워드 변경
  • 가위바위보js
  • 스크롤js
  • spring 기본설정
  • 자바db연동
  • 객체 안의 함수
  • 제이쿼리 버튼클릭시 색 변경
  • js
  • 자바
  • 제이쿼리
  • js 비밀번호
  • ScrollEffectJs
  • css
  • 제이쿼리 비밀번호
  • 청춘고양이

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
청춘고양이

배움을 기록하는 곳

Oracle

오라클에서 DROP 권한 회수하고 TRUNCATE 권한 위임하는 프로시저 작성하기

2025. 8. 21. 13:49
반응형

오라클 데이터베이스에서 권한 관리는 보안과 운영 효율성 측면에서 매우 중요합니다.
특히, TRUNCATE 명령은 빠른 데이터 삭제가 가능하지만, 롤백이 불가능하기 때문에 신중하게 권한을 부여해야 합니다.

이번 포스팅에서는

  • 오라클 프로시저 생성 및 조회 방법
  • DROP TABLE ANY 권한 회수 프로시저 작성법
  • TRUNCATE 권한 위임을 위한 권한 관리 방법과 프로시저 작성법

을 단계별로 살펴보겠습니다.


1. 오라클 프로시저란?

오라클에서 프로시저는 PL/SQL 블록을 재사용 가능하게 만든 저장 프로그램입니다.
복잡한 작업을 간단하게 실행할 수 있으며, 권한을 통해 실행 권한을 제한할 수 있어 DB 보안과 관리에 매우 유용합니다.


2. 프로시저 생성 예제

CREATE OR REPLACE PROCEDURE greet_user(p_username IN VARCHAR2) IS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Hello, ' || p_username || '! Welcome to Oracle DB.');
END;
  • CREATE OR REPLACE PROCEDURE로 프로시저를 새로 만들거나 수정할 수 있습니다.
  • DBMS_OUTPUT.PUT_LINE은 메시지 출력에 사용됩니다.

3. 생성된 프로시저 조회하기

-- 해당 유저의 프로시저 목록 조회
SELECT OBJECT_NAME, STATUS
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'PROCEDURE';

-- 프로시저 소스코드 조회
SELECT TEXT
FROM USER_SOURCE
WHERE NAME = '프로시저명'
ORDER BY LINE;

4. TRUNCATE 권한 관리 및 보안 고려사항

TRUNCATE 명령은 테이블 데이터를 빠르게 삭제하지만, 롤백이 불가능하여 매우 민감한 권한입니다.
일반적으로 DROP TABLE ANY 같은 시스템 권한과 연관되지만, 너무 광범위한 권한은 보안 위험을 초래할 수 있습니다.


5. DROP TABLE ANY 권한 회수 프로시저 작성

특정 사용자에게 부여된 DROP TABLE ANY 권한을 회수하는 프로시저 예시입니다.

CREATE OR REPLACE PROCEDURE revoke_drop_any(p_username IN VARCHAR2) IS
BEGIN
    EXECUTE IMMEDIATE 'REVOKE DROP TABLE ANY FROM ' || p_username;
    DBMS_OUTPUT.PUT_LINE('DROP TABLE ANY 권한이 ' || p_username || '로부터 성공적으로 회수되었습니다.');
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('오류 발생: ' || SQLERRM);
END;
  • EXECUTE IMMEDIATE로 동적 SQL을 실행합니다.
  • 예외처리를 통해 권한 회수 실패 시 에러 메시지를 출력합니다.

6. TRUNCATE 권한 위임을 위한 권한 관리 및 프로시저 작성법

오라클에서 직접적으로 TRUNCATE 권한을 부여하는 방법은 제공되지 않습니다.
대신 다음과 같은 접근법을 사용합니다.

아래는 특정 테이블에 대해 TRUNCATE 권한을 줄 수 있는 역할을 생성 후, 해당 역할을 부여하는 예시입니다.

-- 역할 생성 (관리자가 한 번 실행)
CREATE ROLE truncate_role;

-- 역할에 TRUNCATE 권한 부여 (DBA 권한 필요)
GRANT DELETE ANY TABLE TO truncate_role;  -- TRUNCATE 권한은 DELETE 권한과 다름, 권한 정책에 맞춰 수정 필요

-- 역할을 사용자에게 부여하는 프로시저
CREATE OR REPLACE PROCEDURE grant_truncate_role(p_username IN VARCHAR2) IS
BEGIN
    EXECUTE IMMEDIATE 'GRANT truncate_role TO ' || p_username;
    DBMS_OUTPUT.PUT_LINE('truncate_role 역할이 ' || p_username || '에게 부여되었습니다.');
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('오류 발생: ' || SQLERRM);
END;

마무리 및 참고자료

  • 오라클 DB 권한 관리는 보안과 운영에 직결되는 중요한 부분입니다.
  • 직접 권한 부여가 어려운 경우, 역할과 저장 프로시저를 활용한 권한 위임 방법을 적극 활용하세요.
  • 주기적인 권한 점검과 최소 권한 원칙 준수로 안정적인 DB 운영을 할 수 있습니다.
  • Oracle Database PL/SQL Language Reference
  • Oracle Security Guide
  • Oracle SQL GRANT and REVOKE Syntax

궁금하신 점이나 추가 요청은 언제든 댓글로 남겨 주세요!
좋은 하루 되세요 😊

반응형
저작자표시 변경금지 (새창열림)

'Oracle' 카테고리의 다른 글

Oracle 데이터베이스 링크(DB Link) 사용법  (1) 2024.09.05
SQL의 UNION, UNION ALL, JOIN 연산자: 차이점과 활용 예제  (1) 2024.07.26
Import CSV raw data from an Oracle database: Using Database Import  (0) 2024.06.21
The boundaries of data validation queries: From accuracy to security  (0) 2024.06.21
Ranking by group with ROW_NUMBER()  (0) 2024.06.14
    'Oracle' 카테고리의 다른 글
    • Oracle 데이터베이스 링크(DB Link) 사용법
    • SQL의 UNION, UNION ALL, JOIN 연산자: 차이점과 활용 예제
    • Import CSV raw data from an Oracle database: Using Database Import
    • The boundaries of data validation queries: From accuracy to security
    청춘고양이
    청춘고양이
    신입개발자

    티스토리툴바