블로그 내의 모든 예시와 실습은 VMware workstation16.2.3, Centos7을 활용 합니다.
데이터 제어어(DCL, Data Control Language)
- DB에 대한 보안, 무결성, 복구 등 DBMSㄹ ㄹ 제어하기 위한 언어
- GRANT(권한할당), REVOKE(권한해제),COMMIT(실행), ROLLBACK(복구)
- COMMIT,ROLLBACK은 트랜젝션에 관련된 언어로 TCL로 구분하기도 한다.
계정 확인
- mariaDB의 user Table에서 DBMS 계정에 대한 정보를 관fl
- mariadb> desc mysql.user;
- 현재 선택된 DB와 다른 DB의 테이블을 조회하고 싶은 경우 (DB명).(테이블명)으로 접근 가능
- mariadb> select user,host,password from mysql.user;
컬럼 | 설명 |
---|---|
user | 계정 명 |
host | 접속 경로 |
password | 비밀번호 |
- 접속 경로
컬럼 | 설명 |
---|---|
localhost | DBMS가 설치된 로컬 시스템에서의 접속 |
% | 모든 네트워크에서의 접속 |
IP+% | 특정 네트워크 영역에서의 접속 |
IP | 특정 IP를 가진 시스템에서의 접속 |
계정 생성1
- mariadb>create user ‘user명’@’접속경로’ [identified by ‘패스워드’];
- mariadb> flush privileges;
계정 생성2
- mariadb> insert into mysql.user(user, host,password) values(‘계정명’,’접속경로’,password(‘비밀번호’));
- password() 함수를 이용해서 암호문으로 저장
계정 비밀번호 설정
- mariadb> update mysql.user set password = password(‘비밀번호’) where user=’root’;
- password() 함수를 이용해서 암호문으로 저장
계정 삭제
- mariadb> drop user ‘계정명’[@’접속경로’];
- 접속경로를 생략하명 ‘%’경로로 지정된다.
권한 확인
- mariadb> show grants [for ‘계정명’@’접속경로’];
- 계정을 따로 지정하지 않으면 현재 접속된 계정의 권한 확인
권한 구성
GRANT privileges[(columns)]|ON item TO ‘계정명’@’접속경로’ [IDENTIFIED BY ‘비밀번호’] [WITH GRANT OPTION]
구성요소 | 설명 |
---|---|
privileges[(columns)] | 설정할 권한 all privileges : 모든 권한 특정권한 [, …] : 특정 권한(insert,select, … 등 SQL) 특정궈한(특정컬럼) : 특정 컬럼에만 특정 권한 설정 usage : 기본권한 |
item | 권한을 설정할 객체 [DB명],[테이블명] ex). - 모든 DB의 모든 테이블 |
‘계정명’@’접속경로’ | 권한을 설정할 계정 |
[IDENTIFIED BY ‘비밀번호’] | 권한을 부여하면서 비밀번호 변경(생략 가능) |
[WITH GRANT OPTION] | 다른 계정의 권한을 변경할 수 있는 권한을 허가(생략 가능) |
권한 추가
- mariadb> GRANT privileges[(columns)] ON item TO ‘계정명’@’접속경로’[IDENTIFIED BY ‘비밀번호’][WITH GRANT OPTION]
- 해당 계정이 존재하는 경우 권한만 부여
-
해당 계정이 존재핮 않는 경우 자동으로 계정 생성 후 권한 부여
- 모든 DB의 모든 권한 허용
- 특정 DB의 특정테이블의 특정 컬럼 조회 권한만 주기
- root 계정 접속 종료 후 user1 계정으로 접속
권한 삭제
- mariadb> REVOKE PRIVILEGES[(columns)] ON item FROM ‘계정명’@’접속경로’