Published 2022. 8. 12. 14:26
# DCL(Data Control Language)
-- GRANT : 사용자 계정에 대한 권한을 주는 명령어
-- REVOKE : 사용자 계정에 대한 권한을 회수하는 명령어
-- COMMIT : INSERT, UPDATE, DELETE를 데이터베이스에 실제 반영하는 명령어
-- ROLLBACK : INSERT, UPDATE, DELETE를 복구

USE mysql;
SELECT DATABASE();
-- mysql에 계정 생성하기 : CREATE USER 'ID'@'IP' identified by 'PW';
CREATE USER 'bleck'@'localhost' IDENTIFIED BY '1021'; # 최초에 만들면 권한이 없음
SELECT * FROM USER;

-- 권한 부여하기
GRANT SELECT, INSERT, DELETE, UPDATE ON *.* TO 'bleck'@'localhost'; # 앞의 * : 모든 DB에 접근 가능하게 하겠다
SELECT * FROM USER;

-- 권한 회수하기
REVOKE SELECT, INSERT, DELETE, UPDATE ON *.* FROM 'bleck'@'localhost';
SELECT * FROM USER;

-- 계정 삭제하기
DROP USER 'bleck'@'localhost';
SELECT * FROM USER;

SELECT @@AUTOCOMMIT; # 원래는 COMMIT을 해줘야 실반영이 되지만 AUTOCOMMIT이 켜져있으면 자동 반영
SET AUTOCOMMIT = 0; # AUTOCOMMIT OFF
SELECT @@AUTOCOMMIT;

USE shop;
SELECT * FROM tb_user;
DELETE FROM tb_user;
# 테이블에서 키값을 이용한 update나 delete만을 허용하도록 되어 있는데, 
# 그렇지 않게 좀 더 넓은 범위를 적용할 때 경고
# 즉 하나으 ㅣ레코드만을 update, delete 하도록 설정되어 있는데,
# 다수의 레코드를 update나 delete하는 sql 명령어가 실행되기 때문에 발생
DELETE FROM tb_user
WHERE user_id = 3;
SELECT * FROM tb_user; # 실제 삭제된게 아닌 내 session에서만 삭제된 것
ROLLBACK;
SELECT * FROM tb_user; # 복구됨

DELETE FROM tb_user
WHERE user_id = 5;
SELECT * FROM tb_user;
COMMIT;
ROLLBACK;
SELECT * FROM tb_user; # COMMIT으로 실반영을 했기 때문에 ROLLBACK을 해도 복구가 안됨
INSERT INTO tb_user(user_name, user_phone, user_addr)
VALUES("이병건", "010-0000-0000", "경기도 안산시");
SELECT * FROM tb_user;
ROLLBACK;
SELECT * FROM tb_user;

 

728x90

'개발 > MySQL' 카테고리의 다른 글

#03 DML  (0) 2022.08.12
#01 DDL  (0) 2022.08.12
복사했습니다!