<목차>
|
※ 자료출처: 데이터 산업 진흥원(K-DATA)
SQL 문장의 종류
명령어의 종류 | 명령어 | 설명 |
데이터 조작어(DML: Data Manipulation Language) |
SELECT | 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어 (RETRIEVE) |
INSERT UPDATE DELETE |
- 데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류의 명령어 - 데이터를 테이블에 새로운 행에 집어넣거나, 원하지 않는 데이터를 삭제하거나 수정하는 것들의 명령어 |
|
데이터 정의어(DDL: Data Definition Language) |
CREATE ALTER DROP RENAME |
- 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어 - 구조를 생성하거나 변경하거나 삭제하거나 이름을 바꾸는 데이터 구조와 관련된 명령어 |
데이터 제어어(DCL: Data Control Language) |
GRANT REVOKE |
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어 |
트랜잭션 제어어(TCL: Transactuon Control Language) |
COMMIT ROLLBACK |
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업단위(트랜잭션) 별로 제어하는 명령어 |
4. DCL (Data Control Language)
A.DCL 개요
- 유저를 생성하고 권한을 제어할 수 있는 명령어
- 다른 부서 또는 다른 회사 간에 데이터를 공유하기 위해 데이터베이스를 오픈해야 하는 경우, 새로운 유저를 생성하고 생성한 유저에게 공유할 테이블이나 기타 오브젝트에 대한 접근 권한만을 부여하여 데이터베이스를 오픈함으로써 데이터의 손실이 커지는 것을 방지.
- Oracle: 유저를 통해 데이터베이스 접속하는 형태. (아이디와 비밀번호 방식으로 인스턴스에 접속)
- SQL Server: 인스턴스에 접속하기 위해 로그인이라는 것을 생성 후, 인스턴스 내에 존재하는 다수의 데이터베이스에 연결하여 작업하기 위해 유저를 생성 후 로그인과 유저를 매핑. (특정 유저는 특정 데이터베이스 내의 특정 스키마에 대한 권한 부여 가능)
- SQL Server 로그인 방식: 1) Windows 인증방식 2) 혼합모드 (Windows 인증 또는 SQL 인증)
■ Oracle 에서 제공하는 유저들
유저 | 역할 |
SCOTT | Oracle 테스트용 샘플 유저 Default 패스워드: TIGER |
SYS | DBA Role 을 부여받은 유저 |
SYSTEM | 데이터베이스의 모든 시스템 권한을 부여받은 DBA 유저 Oracle 설치 완료 시에 패스워드 설정 |
B. 유저와 권한
■ 유저 생성과 시스템 권한 부여
- 시스템 권한: 모든 DDL 문장 (CREATE, ALTER, DROP, RENAME 등)을 실행하는 권한
- 100개 이상의 종류
- 복잡하고, 유저로부터 권한을 관리하기가 어렵기 때문에 일일이 유저에게 부여되지 않음.
- ROLE을 이용하여 간편하고 쉽게 권한 부여
- 유저를 생성하기 위해 유저 생성 권한 (CREATE USER)이 있어야 함.
[예제]
SCOTT 유저로 접속한 다음 PJS 유저(패스워드: KOREA7)를 생성
<Oracle> CONN SCOTT/TIGER 연결되었다. CREATE USER PJS IDENTIFIED BY KOREA7; * 1행에 오류: ERROR: 권한이 불충분하다. |
▶ SCOTT 유저는 유저를 생성할 권한을 부여받지 못했기 때문에 권한이 불충분하다는 오류 발생.
[예제]
SCOTT 유저에게 유저생성 권한(CREATE USER)을 부여한 후 다시 PJS 유저를 생성
<Oracle> GRANT CREATE USER TO SCOTT; 권한이 부여되었다. CONN SCOTT/TIGER 연결되었다. CREATE USER PJS IDENTIFIED BY KOREA7; 사용자가 생성되었다. |
SQL Server는 유저를 생성하기 전 로그인 생성. (로그인을 생성할 수 있는 권한을 가진 로그인은 기본적으로 sa)
[예제]
sa로 로그인을 한 후 SQL 인증을 사용하는 PJS라는 로그인(패스워드: KOREA7)을 생성.
로그인 후 최초로 접속할 데이터베이스는 AdventureWorks 데이터베이스로 설정.
<SQL Server> CREATE LOGIN PJS WITH PASSWORD='KOREA7', DEFAULT_DATABASE=AdventureWorks |
SQL Server에서의 유저는 데이터베이스마다 존재.
유저를 생성하기 위해서는 생성하고자 하는 유저가 속할 데이터베이스로 이동을 한 후 처리.
<SQL Server> USE AdventureWorks; GO CREATE USER PJS FOR LOGIN PJS WITH DEFAULT_SCHEMA = dbo; |
생성된 PJS 유저로 로그인 <Oracle> CONN PJS/KOREA7; 오류: ERROR: 사용자 PJS는 CREATE SESSION 권한을 가지고 있지 않음; 로그온이 거절되었다. |
(유저가 로그인을 하려면 CREATE SESSION 권한을 부여받아야 함.)
PJS 유저가 로그인할 수 있도록 CREATE SESSION 권한 부여 <Oracle> CONN SCOTT/TIGER 연결되었다. GRANT CREATE SESSION TO PJS; 권한이 부여되었다. CONN PJS/KOREA7 연결되었다. |
PJS 유저로 테이블 생성 <Oracle> SELECT * FROM TAB; 선택된 레코드가 없다. CREATE TABLE MENU ( MENU_SEQ NUMBER NOT NULL, TITLE VARCHAR2(10) ); CREATE TABLE MENU (* 1행에 오류: ERROR: 권한이 불충분하다. |
<SQL Server> CREATE TABLE MENU ( MENU_SEQ INT NOT NULL TITLE VARCHAR(10) ); 데이터베이스 'AdventureWorks'에서 CREATE TABLE 사용 권한이 거부되었다. |
SYSTEM 유저를 통하여 PJS 유저에게 CREATE TABLE 권한을 부여한 후 다시 테이블 생성 |
<Oracle> CONN SYSTEM/MANAGER 연결되었다. GRANT CREATE TABLE TO PJS; 권한이 부여되었다. CONN PJS/KOREA7 연결되었다. CREATE TABLE MENU ( MENU_SEQ NUMBER NOT NULL, TITLE VARCHAR2(10) ); 테이블이 생성되었다. |
<SQL Server> GRANT CREATE TABLE TO PJS; 권한이 부여되었다. 스키마에게 권한을 부여한다. GRANT Control ON SCHEMA::dbo TO PJS 권한이 부여되었다. PJS로 로그인한다. CREATE TABLE MENU ( MENU_SEQ INT NOT NULL TITLE VARCHAR(10) ); 테이블이 생성되었다. |
■ OBJECT에 대한 권한 부여
오브젝트 권한은 특정 오브젝트인 테이블, 뷰 등에 대한 SELECT, INSERT, DELETE, UPDATE 작업 명령어를 의미.
|
[예제]
PJS 유저로 접속하여 SCOTT 유저에게 MENU 테이블을 SELECT 할 수 있는 권한을 부여
<Oracle> CONN PJS/KOREA7 연결되었다. INSERT INTO MENU VALUES (1, ' 화이팅'); 1개의 행이 만들어졌다. COMMIT; 커밋이 완료되었다. GRANT SELECT ON MENU TO SCOTT; 권한이 부여되었다. |
<SQL Server> PJS로 로그인한다. INSERT INTO MENU VALUES (1, '화이팅'); 1개의 행이 만들어졌다. GRANT SELECT N MENU TO SCOTT; 권한이 부여되었다. |
[예제]
PJS.MENU 테이블에 UPDATE를 시도
<Oracle> CONN SCOTT/TIGER 연결되었다. SELECT * FROM PJS.MENU; MENU_SEQ TITLE ---------- ------------ 1 파이팅 UPDATE PJS.MENU SET TITLE - '코리아' WHERE MENU_SEQ = 1; UPDATE PJS.MENU * 1행에 오류: ERROR: 권한이 불충분하다. |
<SQL Server> SCOTT으로 로그인한다. SELECT * FROM PJS.MENU; MENU_SEQ TITLE ---------- ------------ 1 파이팅 UPDATE PJS.MENU SET TITLE - '코리아' WHERE MENU_SEQ = 1; 개체 'MENU', 데이터베이스 'AdventureWorks', 스키마 'dbo'에 대한 UPDATE 권한이 거부되었다. |
▶ 권한이 부족하여 UPDATE를 할 수 없다는 오류가 나타날 때 PJS 유저에게 UPDATE 권한을 부여한 후 다시 시도하면 업데이트 가능.
C. ROLE을 이용한 권한 부여
- 유저를 생성하려면 기본적으로 CREATE SESSION, CREATE TABLE, CREATE PROCEDURE 등 많은 권한을 부여해야 함.
- 데이터베이스 관리자는 유저가 생성될 때마다 각각의 권한들을 유저에게 부여하는 작업을 수행
- 각 유저별로 어떤 권한이 부여되었는지 역시 관리 필요.
- 관리해야 할 유저가 점점 늘어나고 자주 변경되는 상황에서는 매우 번거로운 작업이 되기 때문에 데이터베이스에서 유저들과 권한들 사이에서 중개 역할을 하는 ROLE 제공.
- 데이터베이스 관리자는 ROLE 생성 및 ROLE에 각종 권한 부여 후, ROLE을 다른 ROLE 이나 유저에게 부여
- ROLE 에 포함되어 있는 권한들이 필요한 유저에게는 해당 ROLE 만을 부여함으로써 빠르고 정확하게 필요한 권한 부여 가능.
[예제]
JISUNG 유저에게 CREATE SESSION 과 CREATE TABLE 권한을 가진 ROLE을 생성 후 ROLE을 이용하여 다시 권한 할당. (권한 취소 시에는 REVOKE 사용)
<Oracle> CONN SYSTEM/MANAGER 연결되었다. REVOKE CREATE SESSION, CREATE TABLE FROM JISUNG; 권한이 취소되었다. CONN JISUNG/KOREA7 ERROR: 사용자 JISUNG은 CREATE SESSION 권한을 가지고 있지 않음. 로그온이 거절되었다. |
<SQL Server> sa로 로그인한다. REVOKE CREATE TABLE FROM PJS; 권한이 취소되었다. PJS로 로그인한다. CREATE TABLE MENU ( MENU_SEQ INT NOT NULL TITLE VARCHAR(10) ); 데이터베이스 'AdventureWorks'에서 CREATE TABLE 사용 권한이 거부되었다. |
[예제]
LOGIN_TABLE 이라는 ROLE을 만들고, 이 ROLE을 이용하여 JISUNG 유저에게 권한 부여
<Oracle> CONN SYSTEM/MANAGER 연결되었다. CREATE ROLE LOGIN_TABLE; 롤이 생성되었다. GRANT CREATE SESSION, CREATE TABLE TO LOGIN_TABLE; 권한이 부여되었다. GRANT LOGIN_TABLE TO JISUNG; 권한이 부여되었다. CONN JISUNG/KOREA7 연결되었다. CREATE TABLE MENU2( MENU_SEQ NUMBER NOT NULL, TITLE VARCHAR2(10) ); 테이블이 생성되었다. |
- Oracle에서 기본적으로 제공하는 ROLE 중 가장 많이 사용하는 ROLE: CONNECT / RESOURCE
- CONNECT: CREATE SESSION 과 같은 로그인 권한 포함
- RESOURCE: CREATE TABLE 과 같은 오브젝트의 생성 권한 포함
- DROP USER: USER를 삭제
- CASCADE 옵션: 해당 유저가 생성한 오브젝트를 먼저 삭제 후 유저 삭제
[예제]
(MENU 라는 테이블 생성 된 상태) CASCADE 옵션을 사용하여 JISUNG 유저를 삭제한 후, 유저 재생성 및 기본적인 ROLE 부여
<Oracle> CONN SYSTEM/MANAGER 연결되었다. DROP USER JISUNG CASCADE; 사용자가 삭제되었다. (JISUNG 유저가 만든 MENU 테이블도 같이 삭제) CREATE USER JISUNG IDENTIFIED BY KOREA7; 사용자가 생성되었다. GRANT CONNECT, RESOURCE TO JISUNG; 권한이 부여되었다. CONN JISUNG/KOREA7 연결되었다. CREATE TABLE MENU ( MENU_SEQ NUMBER NOT NULL, TITLE VARCHAR2(10)); 테이블이 생성되었다. |
- SQL Server 에서는 ROLE을 생성하여 사용하기 보다는 기본적으로 제공되는 ROLE 에 멤버로 참여하는 방식으로 사용.
- SQL Server 에서는 Oracle과 같이 ROLE을 자주 사용하지 않음.
- 대신 서버 수준 역할 및 데이터베이스 수준 역할을 이용하여 로그인 및 사용자 권한 제어.
- 인스턴스 수준의 작업이 필요한 경우 서버 수준 역할을 부여하고 그보다 작은 개념인 데이터베이스 수준의 권한이 필요한 경우 데이터베이스 수준의 역할 부여
- 인스턴스 수준을 요구하는 로그인 - 서버 수준 / 데이터베이스 수준을 요구하는 사용자 - 데이터베이스 수준
■ 특정 로그인이 멤버로 참여할 수 있는 서비스 수준 역할(ROLE)
■ 데이터베이스에 존재하는 유저에 대한 데이터베이스 역할
이전글
다음글
'자격증 > SQLD' 카테고리의 다른 글
[SQLD 기출문제 ] 1과목 데이터모델의 이해 (0) | 2024.02.03 |
---|---|
SQLD - 기출문제 챕터별 예제 (feat.노랭이 등.) (0) | 2024.02.03 |
SQLD 2과목 관리구문 - DDL (0) | 2024.02.01 |
SQLD 2과목 관리구문 - TCL (0) | 2024.01.31 |
SQLD 2과목 관리구문 - DML (0) | 2024.01.31 |