root 사용자 암호 설정
SET PASSWORD FOR 'root'@'localhost' = password_option; # root 계정에서
SET PASSWORD = password_option; # 현재 사용자
DBMS에서 제공하는 보안
- 허가받지 않은 사용자, 즉 권한이 없는 사용자로부터 데이터의 접근을 사전에 차단
데이터베이스에서의 사용 권한
- 사용자가 데이터베이스 내의 특정 객체에 대해 특정 연산을 실행할 수 있는 권리
- 특정 객체 : 테이블, 필드, 뷰, 저장 프로시저 등 데이터베이스의 구성 요소
권한 제어가 가능한 연산의 종류
- 데이터 접근 관련 연산 (DML)
- SQL의 select, insert, delete, update 등
- 스키마 관련 연산 (DDL)
- create table, alter table, drop table, create index 등
권한에 따른 사용자 분류
◽ 데이터베이스 관리자(DBA)
- 데이터베이스 내의 모든 객체에 대해 모든 권한을 가짐
- 객체에 대한 연산, 객체의 삭제와 변경 포함
- 사용자에게 해당 객체에 대한 권한을 부여하거나 회수 가능
◽ 객체 소유자(owner)
- 객체를 생성한 사용자
- 생성한 객체에 대해 모든 권한을 소유
- 해당 객체에 대한 권한의 부여나 회수도 포함
◽ 기타 사용자
- 기본적으로 다른 사용자의 객체에 대한 일체의 사용권한이 없음
- 다만 데이터베이스 관리자나 객체 소유자로부터 일부 또는 모든 권한을 별도로 부여받을 수 있음
명령어 종류 명령어 설명
|
||
데이터 조작어 (DML : Data Manipulation Language |
SELECT | 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 함 |
INSERT UPDATE DELETE |
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입, 수정, 삭제)의 명령어들을 말함. | |
데이터 정의어 (DDL : Data Definition Language) |
CREATE ALTER DROP RENAME TRUNCATE |
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 (생성, 변경, 삭제, 이름변경) 데이터 구조와 관련된 명령어들을 말함. |
데이터 제어어 (DCL : Data Control Language) |
GRANT REVOKE |
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어들을 말함. |
트랜잭션 제어어 (TCL : Transaction Control Language) |
COMMIT ROLLBACK SAVEPOINT |
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어를 말함. |
GRANT
- GRANT 권한 리스트 ON 객체명 TO 사용자 리스트
CREATE USER test_user IDENTIFIED BY 'test';
GRANT SELECT ON study_db.color TO test_user;
- test_user는 study_db 데이터 베이스의 color 테이블에 대해 SELECT 할 수 있는 권한을 가진다.
- 특정 데이터 베이스에 대한 권한 주기
GRANT SELECT, INSERT ON study_db.* TO a_user;
GRANT ALL ON study_db.* TO a_user;
GRANT SELECT ON *.* TO a_user;
- GRANT ALL ON 객체명 TO 사용자 리스트
- 데이터 베이스의 모든 테이블에 대해 모든 권한을 준다.
- 데이터 베이스의 모든 테이블에 대해 모든 권한을 준다.
- 여러가지 권한
# 역할 만들어 권한 부여하기
CREATE ROLE insert_manager;
GRANT INSERT, SELECT ON some_db.* TO insert_manager;
GRANT insert_manager TO b_user;
# 권한을 수여할 권한 부여하기
GRANT ALL ON study_db.* TO test_user WITH GRANT OPTION;
# WITH GRANT OPTION을 주면 test_user 가 가진 권한을 남에게 줄 수 있음(현재는 root에서 test_user에게 권한을 주었음)
# 역할을 수여알 권한 부여하기
# WITH GRANT OPTION과 비슷하게 역할 또한 수여 가능하다.
GRANT inser_manager TO c_user WITH ADMIN OPTION;
# 사용자 생성과 동시에 권한 부여하기
GRANT SELECT ON ab_db TO e_user IDENTIFIED BY 'abcd33232';
ROLE
- 특정 테이블에 대한 권한을 부여해야 할 사용자가 많다면, 반복적으로 GRANT 문이나 REVOKE 문을 실행해야 하는 문제가 발생한다.
- 단순 반복 작업을 줄이기 위해 권한별로 사용자 그룹을 만들어 그룹에 권한을 부여하는 방법
- 데이터베이스 관리자만 생성 가능하다.
- CREATE ROLE 역할 이름
WITH GRANT OPTION(WITH ADMIN OPTION)
- 부여받은 권한을 다른 사용자에게 전파할 수 있는 특별한 옵션
- 부여받은 권한을 다른 사용자에게 다시 전파 할 수 있는 자격까지 부여한다.
REVOKE
- 다른 사용자에게 부여한 권한을 회수하기 위한 명령
- REVOKE 권한 리스트 ON 객체명 FROM 사용자 리스트
REVOKE SELECT ON ab_db.* FROM c_user;
# c_user로 부터 ab_db 데이터 베이스의 모든 테이블에 대해 SELECT 할 권한을 제거한다.
REVOKE GRANT OPTION ON SELECT ON ab_db.* FROM c_user
# c_user로 부터 권한을 수여할 권한만 없앤다.
REVOKE SELECT ON ab_db.* FROM a_user CASCADE;
REVOKE SELECT ON ab_db.* FROM a_user RESTRICT;
# 위 : a_user가 다른 사람에게 수여한 모든 권한을 없앤다.
# 아래 : a_user의 권한만 없앤다.
- CASCADE
- 다른 사람에게 부여한 모든 권한을 없앰
- DEFAULT 값
- RESTRICT
- 대상 권한만 없앰
'개발 > Database' 카테고리의 다른 글
PK FK UK CK (0) | 2024.02.15 |
---|---|
트랜잭션, 뷰, Date (0) | 2024.02.07 |
유니온(UNION), 서브 쿼리 (0) | 2024.02.06 |
조인 : JOIN (INNER, OUTER, CROSS, SELF) (0) | 2024.02.05 |
외래 키 설정하기, 1NF (테이블 쪼개기) (1) | 2024.02.04 |