본문 바로가기
프로그래밍/SQL

[SQL] 5. SQL의 "데이터 제어 언어 (DCL)"

by iwbap 2024. 7. 12.
728x90

SQL 학습: 데이터 제어 언어 (DCL)

데이터 제어 언어(DCL)는 데이터베이스의 보안과 무결성을 유지하기 위한 명령어로, 주로 데이터베이스의 트랜잭션 관리와 사용자 권한을 부여하거나 회수하는 데 사용됩니다. 이번 글에서는 DCL의 주요 명령어인 트랜잭션 관리와 권한 부여 및 회수에 대해 알아보겠습니다.


5.1 트랜잭션 관리

트랜잭션 관리는 데이터베이스 작업의 일관성과 무결성을 보장하기 위해 사용됩니다. 트랜잭션은 데이터베이스의 상태를 변화시키는 일련의 작업으로, 모든 작업이 성공적으로 완료되거나 실패할 경우 롤백됩니다.

 

1. COMMIT : 트랜잭션을 확정하여 데이터베이스에 영구적으로 반영합니다. 트랜잭션이 성공적으로 완료되면 COMMIT 명령어를 사용하여 변경 사항을 저장합니다.

[sql]
 
BEGIN TRANSACTION;

UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;

COMMIT;
 

위의 예제에서 employees 테이블의 department_id가 10인 모든 직원의 급여를 10% 인상한 후, COMMIT 명령어를 사용하여 변경 사항을 확정합니다.

 

 

2. ROLLBACK : 트랜잭션을 취소하여 변경 사항을 원래 상태로 되돌립니다. 트랜잭션 중 오류가 발생하거나 작업을 취소할 필요가 있을 때 ROLLBACK 명령어를 사용합니다.

[sql]
 
BEGIN TRANSACTION;

UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;

ROLLBACK;
 

위의 예제에서 ROLLBACK 명령어를 사용하여 employees 테이블의 변경 사항을 취소합니다.

 

 

3. SAVEPOINT : 트랜잭션 내의 특정 지점을 저장합니다. SAVEPOINT 명령어를 사용하면 트랜잭션을 부분적으로 롤백할 수 있습니다.

[sql]
 
BEGIN TRANSACTION;

UPDATE employees SET salary = salary * 1.1 WHERE department_id = 10;

SAVEPOINT before_bonus;

UPDATE employees SET bonus = 1000 WHERE department_id = 10;

ROLLBACK TO SAVEPOINT before_bonus;

COMMIT;
 

위의 예제에서 SAVEPOINT를 설정한 후, ROLLBACK TO SAVEPOINT 명령어를 사용하여 특정 지점으로 트랜잭션을 롤백합니다. 최종적으로 COMMIT 명령어를 사용하여 변경 사항을 확정합니다.


5.2 권한 부여 및 회수

데이터베이스 시스템은 보안과 데이터 무결성을 유지하기 위해 사용자 권한을 제어합니다. 권한 부여 및 회수는 데이터베이스 자원에 대한 접근 권한을 관리하는 데 사용됩니다.

 

1. GRANT : 특정 사용자에게 데이터베이스 객체에 대한 권한을 부여합니다.

[sql]
 
GRANT SELECT, INSERT ON employees TO user1;
 

위의 예제에서 user1에게 employees 테이블에 대한 SELECT와 INSERT 권한을 부여합니다.

 

 

2. REVOKE : 특정 사용자로부터 데이터베이스 객체에 대한 권한을 회수합니다.

[sql]
 
REVOKE INSERT ON employees FROM user1;
 

위의 예제에서 user1로부터 employees 테이블에 대한 INSERT 권한을 회수합니다.

 

 

사용 예제:

 1. 사용자 생성 및 권한 부여 : 새로운 사용자를 생성하고, 테이블에 대한 권한을 부여합니다.

[sql]
CREATE USER 'user1'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE ON my_database.* TO 'user1'@'localhost';
 

 2. 권한 회수 및 사용자 삭제 : 사용자의 권한을 회수하고, 사용자를 삭제합니다.

[sql]
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user1'@'localhost';
DROP USER 'user1'@'localhost';
 

위의 예제에서는 user1에게 데이터베이스 my_database에 대한 모든 권한을 부여하고, 나중에 모든 권한을 회수한 후 사용자를 삭제합니다.


이 글에서는 데이터 제어 언어(DCL)의 주요 명령어에 대해 알아보았습니다. 트랜잭션 관리를 통해 데이터베이스 작업의 일관성과 무결성을 유지하고, 권한 부여 및 회수를 통해 데이터베이스 자원에 대한 접근 권한을 관리할 수 있습니다. 이러한 명령어를 사용하여 데이터베이스의 보안과 무결성을 유지하며 효율적으로 관리할 수 있습니다. Happy Coding!

728x90