데이터 제어 언어
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
데이터 제어 언어(DCL)는 SQL의 하위 집합으로, 데이터베이스 사용자의 접근 권한을 제어하고 관리하는 데 사용되는 명령어 집합이다. DCL은 주로 GRANT, REVOKE, DENY 명령어로 구성되며, 데이터베이스 객체에 대한 특정 작업 수행 권한을 부여하거나 박탈하는 역할을 한다. 각 데이터베이스 시스템(예: Microsoft SQL Server, Oracle Database, MySQL)은 DCL 명령어를 다르게 분류하거나, DCL 명령어를 다른 기능과 통합하여 제공한다. SQLite는 사용자 개념이 없어 DCL 명령어를 지원하지 않고, 파일 시스템 권한으로 접근을 제어한다.
더 읽어볼만한 페이지
- SQL - 사용자 정의 함수
사용자 정의 함수는 프로그래밍 언어와 데이터베이스 시스템에서 사용자가 직접 정의하여 재사용할 수 있는 코드 블록이다. - SQL - 임베디드 SQL
임베디드 SQL은 호스트 프로그래밍 언어 내에 SQL 문을 삽입하여 데이터베이스와 상호 작용하는 기술로, 데이터베이스 액세스를 표준화하지만 보안 취약점과 이식성 저하의 단점도 가진다. - 데이터 모델링 - 빌딩 정보 모델링
빌딩 정보 모델링(BIM)은 건축물의 전 생애주기 동안 발생하는 정보를 디지털 모델로 통합 관리하는 프로세스이다. - 데이터 모델링 - 저장 프로시저
저장 프로시저는 데이터베이스 관리 시스템에서 SQL 문들을 미리 컴파일하여 저장하고, 모듈화, 보안성, 성능 향상, 유지보수 용이성과 같은 특징을 가지며, 데이터베이스 시스템마다 구현 방식과 지원하는 언어가 다를 수 있는 코드 묶음이다. - 데이터베이스 관리 시스템 - 트랜잭션 처리
트랜잭션 처리는 데이터베이스 시스템에서 데이터의 일관성과 무결성을 보장하기 위한 기술이며, ACID 속성을 통해 데이터 정확성을 유지하고 롤백, 데드락 처리 등의 기술을 활용한다. - 데이터베이스 관리 시스템 - 저장 프로시저
저장 프로시저는 데이터베이스 관리 시스템에서 SQL 문들을 미리 컴파일하여 저장하고, 모듈화, 보안성, 성능 향상, 유지보수 용이성과 같은 특징을 가지며, 데이터베이스 시스템마다 구현 방식과 지원하는 언어가 다를 수 있는 코드 묶음이다.
데이터 제어 언어 | |
---|---|
개요 | |
주요 기능 | |
DCL 문 | |
예시 | |
2. 구문
(내용 없음)
2. 1. 권한
SQL의 주요 데이터 제어 언어는 다음과 같다.- GRANT: 특정 데이터베이스 사용자에게 특정 작업을 수행할 권한을 부여한다.
- REVOKE: 특정 데이터베이스 사용자에게 부여된 특정 권한을 박탈한다.
SQL의 GRANT 및 REVOKE 명령어를 통해 데이터베이스 사용자에게 설정할 수 있는 권한은 다음과 같다.
권한 | 설명 |
---|---|
CONNECT | 데이터베이스 또는 스키마에 연결하는 권한 |
SELECT | 데이터베이스에서 데이터를 검색하는 권한 |
INSERT | 데이터베이스에 데이터를 등록할 수 있는 권한 |
UPDATE | 데이터베이스의 데이터를 업데이트할 수 있는 권한 |
DELETE | 데이터베이스의 데이터를 삭제할 수 있는 권한 |
USAGE | 스키마 또는 함수와 같은 데이터베이스 개체를 사용할 수 있는 권한 |
SQL의 주요 데이터 제어 언어(DCL) 명령어는 다음과 같다.
오라클 데이터베이스에서는 데이터 제어 언어 명령 실행 시 암시적으로 커밋이 이루어진다. 반면, PostgreSQL에서는 데이터 제어 언어 명령이 트랜잭션 내에서 실행되므로 롤백이 가능하다.
3. 데이터베이스 시스템별 DCL
SQL의 GRANT 및 REVOKE 명령어를 통해 데이터베이스 사용자에게 설정할 수 있는 주요 권한은 다음과 같다.
데이터베이스 관리 시스템(DBMS)마다 DCL을 처리하는 방식이나 분류에 차이가 있다.3. 1. Microsoft SQL Server
마이크로소프트 SQL Server에서는 SQL 명령어를 다음 네 가지 그룹으로 나눈다.
DCL 명령어는 데이터베이스 사용자의 접근을 제어하고 권한을 관리하는 데 사용된다. 이를 통해 특정 테이블이나 레코드(행 수준 보안)에 대한 사용자의 작업을 허용하거나 거부할 수 있다.
DCL 명령어는 다음과 같다.
; GRANT
: 데이터베이스 내 특정 그룹이나 사용자에게 테이블(및 다른 객체)에 대한 특정 권한을 부여한다.
; DENY
: 특정 그룹이나 사용자에게 특정 권한의 실행을 금지한다.
; REVOKE
: 특정 그룹이나 사용자로부터 부여된 권한을 회수한다.
예를 들어, GRANT
명령어는 특정 사용자에게 하나 또는 여러 테이블에 대해 SELECT
, INSERT
, UPDATE
, DELETE
작업을 수행할 권한을 부여하는 데 사용될 수 있다.REVOKE
명령어는 필요에 따라 UPDATE
나 DELETE
같은 특정 명령어 권한을 회수하거나, 부여된 권한 자체를 기본 상태로 되돌리는 데 사용된다.
다음은 DCL 명령어 사용 예시이다.
GRANT SELECT, INSERT, UPDATE, DELETE ON Employee TO User1;
REVOKE INSERT ON Employee FROM User1;
DENY UPDATE ON Employee TO User1;
첫 번째 GRANT
예시는 'User1' 사용자에게 'Employee' 테이블에 대한 SELECT
, INSERT
, UPDATE
, DELETE
작업 권한을 부여한다.REVOKE
예시는 'User1' 사용자의 'Employee' 테이블에 대한 INSERT
권한을 회수하여 기본 상태로 되돌린다.DENY
는 특정 권한을 명시적으로 금지하는 명령어이다. 모든 사용자는 거부되거나 부여된 권한 목록을 가지며, DENY
명령은 데이터베이스 객체에 대한 특정 권한을 명확하게 금지하기 위해 사용된다.
3. 2. Oracle Database
오라클 환경에서 DCL은 데이터베이스 객체에 대한 접근 권한을 관리하는 데 사용된다. SQL의 `GRANT`와 `REVOKE` 명령을 통해 사용자에게 특정 작업을 수행할 수 있는 권한을 부여하거나 회수할 수 있다. 주요 권한 종류는 다음과 같다.
오라클 데이터베이스에서 DCL 명령(`GRANT`, `REVOKE` 등)을 실행하면, 해당 작업은 즉시 데이터베이스에 영구적으로 반영된다. 이를 암시적 커밋이라고 한다. 이는 PostgreSQL과 차이가 있는데, PostgreSQL에서는 DCL 명령도 트랜잭션 내에서 처리되므로, 필요한 경우 롤백(작업 취소)이 가능하다.
오라클은 SQL 명령을 기능에 따라 다음과 같이 여러 유형으로 분류한다.[3]
DDL 문은 데이터베이스 구조를 정의하거나 수정하는 데 사용되며, 오라클에서는 다음과 같은 작업을 수행한다.
따라서 오라클 데이터베이스에서는 Microsoft SQL Server와 달리, 권한을 부여하는 `GRANT`와 회수하는 `REVOKE` 명령이 DCL이 아닌 DDL에 포함된다.
오라클 데이터베이스에서 `GRANT`와 `REVOKE` 명령의 사용 예시는 다음과 같다.
GRANT SELECT, INSERT, UPDATE, DELETE ON db1.Employee TO user1;
REVOKE SELECT, INSERT, UPDATE, DELETE ON db1.Employee FROM user1;
3. 3. MySQL
MySQL 서버는 SQL 명령문을 여러 유형으로 나누는데, 데이터 제어 언어(DCL)에 해당하는 '''GRANT'''와 '''REVOKE''' 명령어는 '데이터베이스 관리 명령문' 중 '계정 관리 시스템'의 일부로 분류된다. 이 명령어들은 데이터베이스 사용자의 권한을 제어하는 데 사용된다.
자세한 내용은 [https://dev.mysql.com/doc/refman/8.0/en/account-management-statements.html MySQL 계정 관리 명령문]에서 확인할 수 있다.[4]
=== GRANT ===
`GRANT` 문은 시스템 관리자가 사용자 계정 및 역할에 특정 권한이나 다른 역할을 부여할 수 있게 한다. `GRANT` 문 사용 시 다음과 같은 제한 사항이 적용된다.
=== REVOKE ===
`REVOKE` 문은 시스템 관리자가 사용자 계정 및 역할에서 이전에 부여했던 권한이나 역할을 취소할 수 있게 한다.
=== 사용 예시 ===
다음은 `GRANT`와 `REVOKE` 명령어의 사용 예시이다.
REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
REVOKE 'role1', 'role2' FROM 'user1'@'localhost', 'user2'@'localhost';
REVOKE SELECT ON world.* FROM 'role3';
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';
GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost';
GRANT SELECT ON world.* TO 'role3';
3. 4. PostgreSQL
PostgreSQL에서는 데이터 제어 언어(DCL) 명령의 실행이 트랜잭션의 맥락에서 이루어진다. 이는 오라클과 같은 일부 다른 데이터베이스 시스템과 차이가 있는데, 오라클에서는 DCL 명령 실행 시 암시적인 커밋이 발생하지만, PostgreSQL에서는 트랜잭션 내에서 실행되므로 롤백이 가능하다.
GRANT와 REVOKE는 PostgreSQL에서도 데이터베이스 사용자의 권한을 제어하는 데 사용되는 SQL 명령어이다.
3. 5. SQLite
SQLite는 사용자 이름이나 로그인이 없기 때문에 `GRANT`나 `REVOKE`와 같은 DCL 명령어가 없다. 대신 SQLite는 파일 시스템 권한에 따라 데이터베이스 파일을 열고 접근할 수 있는 사용자를 제한하는 방식으로 권한 관리를 한다.[5]
4. 한국의 데이터베이스 보안 및 DCL
SQL의 GRANT 및 REVOKE 명령어를 통해 데이터베이스 사용자에게 부여하거나 회수할 수 있는 주요 권한은 다음과 같다.
권한 종류 | 설명 |
---|---|
CONNECT | 데이터베이스 또는 스키마에 연결할 수 있는 권한 |
SELECT | 데이터베이스에서 데이터를 검색할 수 있는 권한 |
INSERT | 데이터베이스에 데이터를 삽입할 수 있는 권한 |
UPDATE | 데이터베이스의 데이터를 수정할 수 있는 권한 |
DELETE | 데이터베이스의 데이터를 삭제할 수 있는 권한 |
USAGE | 스키마 또는 함수와 같은 데이터베이스 객체를 사용할 수 있는 권한 |
데이터베이스 관리 시스템(DBMS) 종류에 따라 DCL 명령어의 실행 방식에 차이가 있을 수 있다. 예를 들어, 오라클 데이터베이스에서는 DCL 명령어 실행 시 암시적으로 커밋(COMMIT)이 수행된다. 반면, PostgreSQL에서는 DCL 명령어 실행이 트랜잭션 내에서 이루어지므로, 필요한 경우 롤백(ROLLBACK)을 통해 변경 사항을 취소할 수 있다.
참조
[1]
웹사이트
The SQL Standard – ISO/IEC 9075:2016 (ANSI X3.135) – ANSI Blog
https://blog.ansi.or[...]
2020-09-19
[2]
웹사이트
TechNet Wiki
https://social.techn[...]
2020-09-19
[3]
웹사이트
Database SQL Language Reference
https://docs.oracle.[...]
2020-09-19
[4]
웹사이트
MySQL :: MySQL 8.0 Reference Manual :: 13.7.1 Account Management Statements
https://dev.mysql.co[...]
2020-09-19
[5]
서적
Using SQLite
https://books.google[...]
O’Reilly
2010
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com