빅데이터 서비스 교육/데이터베이스

데이터베이스 기타 객체, 사용자 액세스 제어

Manly 2022. 5. 1. 22:33
반응형

-- vol 2 p.43  12장  기타 데이터베이스 객체

--시퀀스
-고유번호를 자동으로 생성
-일반적으로 기본키(PK) 값을 생성하는데 사용
   PK는 중복x -> 수많은 데이터들을 중복없이 숫자부여를 시퀀스로 해준다.
   (pk가 숫자일때만 시퀀스 사용한다)
   
-시퀀스 값을 메모리에 캐시(고정)하면 액세스 효율이 높아진다.
  메모리에 공간이 꽉차면 새로운 데이터가 들어오려면 공간이 필요해서 오래된 데이터를 없애고 
  새로운 데이터를 받는다. -> Que
  
  시퀀스는 특정 이벤트에 따라 생성되서 번호가 부여되는데
  캐시(고정)하면 미리 생성해서 번호를 부여시켜논다 -> 시스템 효율이 안좋아서 잘 사용하지않는다.
  
-create SEQUENCE dept_deptid_seq
               (dept테이블의 deptid컬럼에 시퀀스 -> 알기 쉬운 네이밍) 
                    
                 INCREMENT by 10 ->증가값
                 start with 120 -> 첫번째 생성되는 시퀀스 넘버
 maxvalue 9999 -> 최대로 생성된 시퀀스 넘버
   
   start with 120로 초기 시퀀스 넘버  120을 추출하고
   INCREMENT by 10 120에서 10씩 증가
   maxvalue 9999   120 .. 130 ... 140 ... 9990에서 끝남 최대 9999
   
   
                  NOCACHE  -> 
  nocycle; -> 중복값 허용X
 cycle-> maxvalue에 도달하면 다시 초기값부터 시작 
         그럼 중복값 허용이 된다.
 
 
create sequence dept_deptid_seq
                increment by 10
start with 300
maxvalue 9999
NOCACHE
NOCYCLE;   -> NOCACHE, NOCYCLE은 default값으로 "생략가능"


시퀀스는 데이터 딕셔너리에 저장


-NEXTVAL : 시퀀스의 값을 추출하는 명령어
-currval : NEXTVAL에 의해 추출 된 값을 저장하는 곳 -> 혼자서는 사용못한다 NEXTVAL에 의해 추출 후 사용가능

dept_deptid_seq.NEXTVAL -> 시퀀스에서 NEXTVAL를 통해 값을 추출


departments에 새로운 행을 시퀀스를 통해 삽입.

insert into departments
values (dept_deptid_seq.NEXTVAL, 'ITCENTET', 100,1700); ->X2번


create sequence로 시퀀스 생성 후 (초기값300, 증가값10)
insert 2번했는데 시퀀스 300, 310부여   -> 아직 트랜잭션 실행중
rollback; -> 하면 300 / 310 사라짐.


insert into departments
values (dept_deptid_seq.NEXTVAL, 'ITCENTER', 100,1700);

create sequence로 시퀀스 생성 후
insert  2번했는데 300 310 시퀀스가 부여됬고   -> 아직 트랜잭션 실행중
rollback; -> 하면 시퀀스 300 / 310 사라짐.
insert into를 다시 넣으면 시퀀스 320이 부여 -> 한번 추출 된 값은 다시 부여x (cycle쓸때만 다시추출)


시퀀스는 공유가능한 객체 -> 데이터를 저장하는 객체가 아니라 번호만 생성하므로 공유가능
테이블은 데이터를 저장하는 공간인데 데이터를 공유하면 다른유저가 데이터의 복제가 가능 -> TABLE은 공유를 거의안한다.


A가      B가
300
310     320         -> 이렇게 시퀀스의 갭이 발생하기도 한다.
330


시퀀스 변경
alter SEQUENCE dept_deptid_seq
               INCREMENT by 20   -> 이미 추출이 된 번호는 관련없고 새로운번호만 증가값이 20
   MAXVALUE 999999  -> 이미 추출이 된 번호보다는 커야 MAXVALUE를 변경 가능하다
   NOCACHE -> cache로 변경가능
   NOCYCLE; -> cycle로 변경가능
   
   
  START with는 변경불가
  (기존의 시퀀스를 삭제하고 같은 이름의 시퀀스를 생성할때는 변경가능)
  
drop SEQUENCE   시퀀스 제거 -> 이미 추출 된 번호들은 남아있다.


--인덱스
테이블에 있는 데이터의 검색 속도를 향상시켜주기 위해서 만들어준 객체


TEST                  parse 파싱 1.검증 2.실행계획수립(default값은 table full scan) 3.실행
a   b   c              table full scan: 전체 데이터 값을 메모리로 불러서 원하는 데이터 추출할때까지 순차적으로 검색
10  ..  ..                                    
50  ..  ..
60  ..  ..   
  
인덱스 -> 별도의 공간에 배열을 가지고 저장   데이터 + 포인터(해당 행의 주소값)
       
       ex) 책 맨앞의 목차   1. db개요    p.4   랑 비슷


-동의어 SYNONYM도 가능은 하다.

테이블이 중요  -> 뷰, 시퀀스는 테이블을 활용하는방법 중 하나    



-- 13장 사용자 액세스 제어

DB의 동시성  ->  보안을 위해
     
  -권한이 없는사람이 db에 접근 방지
  -권한이 있는사람이 db에 불법행위를 하는것을 방지   -> DCL언어 (권한의 부여, 회수)
  
DB의 사용자
 -ID / pw를 통해 유저를 관리
 -권한의 부여를 통해 관리
 
 
select, DML, DDL   -> user + dba
DCL -> 일반 유저는 사용x   dba


DB에서의 권한
시스템 권한: DB에 접근  -> dba의 몫
객체권한: 테이블, 뷰, 시퀀스 같은 객체들에 대한 권한    -> dba와 객체권한 소유주들의 몫


시스템 권한: 사용자 생성, 제거 / 테이블 제거, 백업


SQL> conn /as sysdba
Connected.
SQL> alter user system
  2  identified by 12345;  ->시스템 비밀번호 초기화

User altered.

SQL> conn system/12345  -> system계정이 dba계정 (데이터베이스 관리자 계정)
Connected.

sysdba -> 데이터베이스 전체를 백업을 할 권한
sysopper -> 데이터베이스의 모든것을 할 권한
sys



1. user 생성
id / pw 생성
2. 권한 부여/회수


create user test -> id생성
identified by test; -> pw생성        이렇게 생성하면 DB의 모든권한을 갖는다.

grant create session to test;   ->시스템 계정으로 권한 줘야한다.
권한부여      부여 권한        유저


grant connect, resource to test -> test로 부터 connect, resource 권한 부여

revoke connect, resource from test; -> test로 부터 connect, resource 권한 회수


롤이란?: 권한을 모아놓은 집합
ex) connect, resource(자원관련 약40개의 권한)

create role manager;

grant create a, create b to manager; -> 매니저에 a,b의 권한을 부여

grant manger to dehaan, kochhar;    대한, 코차 -> a,b의 권한 받는다

이때 매니저에게 c,d의 권한을 부여하면 대한,코차도 c,d의 권한이 부여된다.
이때 매니저에게 c,d의 권한을 회수하면 대한,코차도 c,d의 권한이 회수된다.

자기의 계정은 pw만 변경가능.
dba는 다 변경 가능

자기가 생성한 테이블에 대한 모든 권한은 자기가 가지고있다.

connect, resource를 부여하면 여태 실습 계정 hr과 동일한 권한.

dba -> system
connect, resource -> user

 

반응형