Computer >> 컴퓨터 >  >> 소프트웨어 >> Office

데이터 제어 언어(DCL) 완벽 가이드: GRANT, REVOKE, DENY 명령어 총정리

데이터 제어 언어(Data Control Language, DCL)는 구조화된 쿼리 언어(SQL)의 하위 집합으로, 데이터베이스 관리자(DBA)가 관계형 데이터베이스에 대한 보안 접근 권한을 설정할 때 사용하는 언어입니다.

DCL은 데이터베이스 객체를 추가하거나 삭제하는 데이터 정의 언어(DDL), 그리고 데이터베이스 내용을 조회·삽입·수정하는 데이터 조작 언어(DML)와 함께 SQL을 구성하는 핵심 요소입니다.

DCL은 SQL 하위 집합 중에서도 가장 단순한 편입니다. 단 세 가지 명령어, 즉 GRANT, REVOKE, DENY만으로 구성되며, 이 세 가지 명령을 조합하면 관리자가 데이터베이스 권한을 매우 세밀하게 부여하거나 회수할 수 있습니다.

GRANT 명령어로 권한 부여하기

GRANT 명령은 데이터베이스 사용자에게 새로운 권한을 추가합니다. 문법은 다음과 같이 매우 간단합니다.

GRANT [privilege]
ON [object]
TO [user]
[WITH GRANT OPTION]

각 파라미터의 의미는 다음과 같습니다.

  • Privilege(권한) — ALL 키워드를 사용해 다양한 권한을 한 번에 부여하거나, 특정 권한 또는 권한 목록을 지정할 수 있습니다. 예를 들어 CREATE DATABASE, SELECT, INSERT, UPDATE, DELETE, EXECUTE, CREATE VIEW 등이 있습니다.
  • Object(객체) — 모든 데이터베이스 객체가 될 수 있습니다. 지정 가능한 권한 옵션은 객체 유형에 따라 달라지며, 일반적으로 데이터베이스, 함수, 저장 프로시저, 테이블 또는 뷰가 해당됩니다.
  • User(사용자) — 모든 데이터베이스 사용자가 될 수 있습니다. 역할 기반(role-based) 데이터베이스 보안을 활용하고 싶다면 사용자 대신 역할(role)을 지정할 수도 있습니다.
  • 명령 끝에 선택 사항인 WITH GRANT OPTION 절을 포함하면, 해당 사용자에게 권한을 부여할 뿐만 아니라 그 사용자가 다른 사용자에게 동일한 권한을 재부여할 수 있는 권한까지 주게 됩니다. 따라서 이 절은 신중하게 사용해야 합니다.

예를 들어, HR이라는 데이터베이스의 employees 테이블에서 정보를 조회할 수 있는 권한을 Joe라는 사용자에게 부여하고 싶다면 다음 SQL 명령을 사용합니다.

GRANT SELECT
ON HR.employees
TO Joe

이제 Joe는 employees 테이블에서 정보를 조회할 수 있습니다. 다만 WITH GRANT OPTION 절이 포함되지 않았기 때문에, Joe가 다른 사용자에게 같은 조회 권한을 부여할 수는 없습니다.

REVOKE 명령어로 데이터베이스 접근 권한 회수하기

REVOKE 명령은 이전에 부여했던 데이터베이스 접근 권한을 사용자로부터 회수합니다. 이 명령의 문법은 다음과 같습니다.

REVOKE [GRANT OPTION FOR] [permission]
ON [object]
FROM [user]
[CASCADE]

REVOKE 명령의 각 파라미터는 다음과 같습니다.

  • Permission(권한) — 해당 사용자로부터 회수할 데이터베이스 권한을 지정합니다. 이 명령은 지정된 권한에 대해 이전에 수행된 GRANT 및 DENY 설정을 모두 철회합니다.
  • Object(객체) — 모든 데이터베이스 객체가 될 수 있으며, 객체 유형에 따라 유효한 권한 옵션이 달라집니다. 일반적으로 데이터베이스, 함수, 저장 프로시저, 테이블 또는 뷰가 해당됩니다.
  • User(사용자) — 모든 데이터베이스 사용자가 될 수 있으며, 필요에 따라 역할(role)로 대체할 수 있습니다.
  • GRANT OPTION FOR 절은 지정된 사용자가 다른 사용자에게 해당 권한을 부여할 수 있는 능력만 제거합니다. 이 절을 포함해도 기본 권한 자체는 회수되지 않으며, 오직 '권한 부여 능력'만 철회됩니다.
  • CASCADE 옵션을 사용하면, 지정된 사용자가 다른 사용자들에게 부여했던 동일한 권한까지 연쇄적으로 회수됩니다.

앞선 예제에서 Joe에게 부여했던 권한을 회수하려면 다음 명령을 실행합니다.

REVOKE SELECT
ON HR.employees
FROM Joe

DENY 명령어로 데이터베이스 접근 명시적으로 차단하기

DENY 명령은 특정 사용자가 특정 권한을 받지 못하도록 명시적으로 차단합니다. 이 기능은 사용자가 어떤 권한이 부여된 역할이나 그룹에 속해 있을 때, 예외를 만들어 해당 개별 사용자만 권한을 상속받지 못하게 하고 싶은 경우에 유용합니다. 문법은 다음과 같습니다.

DENY [permission]
ON [object]
TO [user]

DENY 명령의 파라미터는 GRANT 명령과 동일합니다. 예를 들어, Matthew가 employees 테이블의 정보를 삭제하지 못하도록 확실히 차단하고 싶다면 다음 명령을 실행합니다.

DENY DELETE
ON HR.employees
TO Matthew