DCL(Data Control Language) 명령은 프로그래밍 보다는 MySQL 내부의 데이터를 제어하는 언어입니다.

제어라 하니 애매모호할 수 있겠습니다.

더 자세히 말씀드리자면! 데이터의 보안, 무결성, 회복, 병행 수행제 등을 정의하는데 사용합니다.


DCL의 명령어는 GRANT, REVOKE, COMMIT, ROLLBACK 이라는 명령어가 있습니다.


그런데 역서 COMMIT과 ROLLBACK 명령어는 TCL(Transaction Control Language)이라고 하여 트랜잭션을 제어하는 명령어라고 구분되어 표현되기도 합니다.


하지만 이 포스트에서는 모두 DCL이라고 생각하고 작성하도록 하겠습니다.







 

 GRANT 명령어


GRANT 명령어는 사용자에게 권한을 부여하기 위한 명령어입니다.

MySQL에서 사용자 권한을 주는 방법에는 INSERT 문을 이용하는 방법이 있습니다.

그러나 여기서는 GRANT의 명령어로 권한을 주는 명령어를 살펴보도록 하겠습니다.


-- 사용자 권한 부여 명령어
GRANT ALL PRIVILEGES ON [dbname.table_name] TO [user@host] IDENTIFIED BY 'my_password';


-- 예제 (호스트 : 로컬호스트)
GRANT ALL PRIVILEGES ON testDB.testTable TO myuser@localhost IDENTIFIED BY 'testPassword';

-- 예제 (호스트 : 원격 접속)
GRANT ALL PRIVILEGES ON testDB.testTable TO myuser@'%' IDENTIFIED BY 'testPassword';

-- 예제 (호스트 : 아이피)
GRANT ALL PRIVILEGES ON testDB.testTable TO myuse@192.168.0.100 IDENTIFIED BY 'testPassword';


GRANT 명령어 이후 설정한 권한을 적용해야 합니다.


-- 설정한 권한 적용 명령어
FLUSH PRIVILEGES;


위의 명령어까지 완료하면 이제 GRANT 명령어가 적용됩니다.






 

 REVOKE 명령어


REVOKE 명령어는 GRANT 명령어로 적용한 권한을 해제해주는 명령어입니다.

이 명령어를 사용하면 MySQL에서 사용자 권한을 해제해줄 수 있습니다.


-- 권한 해제 명령어(INSERT, UPDATE, CREATE 권한 해제)
REVOKE insert, update, create ON [dbname.table_name] TO [user@host];

-- 권한 해제 명령어(전체 권한 해제)
REVOKE ALL ON [dbname.table_name] TO [user@host];


위와 같은 예제로 간단히 알아보았습니다.

만약 예제를 통해 해제한 권한이 잘 적용되었는지 확인해보고자 한다면 다음 명령을 사용해보면 좋습니다.


-- 권한 확인 명령어
SHOW GRANTS FOR [user@host];






 

 COMMIT 명령어


COMMIT 명령어는 작업한 결과를 물리적 디스크로 저장하고, 조작 작업이 정상적으로 완료되었음을 관리자에게 알려주는 명령어입니다.

요약하자면, 작업 결과를 저장 후, 관리자에게 "잘 되었습니다" 하고 알려준다는 것입니다. 이 명령어는 INSERT, UPDATE, DELETE 등의 작업 내용에 대해 데이터가 물리 디스크로 완전히 업데이트되며, 모든 사용자가 변경한 데이터의 결과를 볼 수 있게 됩니다.

이 명령어를 사용하면 MySQL에서 작업한 내용들이 물리적 디스크로 저장/적용되고, 정상적으로 처리되었다면 이를 알려줍니다.


-- 여러분이 INSERT, UPDATE, DELETE 등의 작업을 수행하였다고 가정...

-- 이전 까지의 작업을 완전 저장하는 명령어
COMMIT;


위의 명령어를 보고 조금 맥이 빠질 수 있습니다.

실제로 MySQL과 물리디스크 사이에서 일어나는 일은 매우 복잡하지만, 명령어는 딱 한 단어 뿐입니다.






 

 ROLLBACK 명령어


ROLLBACK 명령어는 작업했던 내용을 원래의 상태로 복구하기 위한 명령입니다. 이는 INSERT, UPDATE, DELETE 와 같은 트랜잭션의 작업 내용을 취소할 수 있습니다.

단! 이 명령어를 사용하는데 있어서 주의해야할 점이 있습니다.

바로 COMMIT 명령어를 사용하기 이전의 상태만 ROLLBACK이 가능하다는 것입니다..!


COMMIT을 하게 되면 위에서 설명드렸다싶이, 물리디스크에 직접 저장하고 알리는 기능이므로, 이미 물리적으로는 이전의 상태가 저장되어 있지 않다는 의미입니다.

따라서, 이전 상태로 되돌릴 수 없습니다.


-- 여러분이 INSERT, UPDATE, DELETE 등의 작업을 수행하였다고 가정...

-- 이전 까지의 작업을 취소하는 명령어
ROLLBACK;


위의 명령어도 사실 별 게 없습니다.

COMMIT과 마찬가지로 단 하나의 단어로만 명령을 수행합니다.










+ Recent posts