학습주제
redshift 초기 설정
학습내용
스키마, 그룹, 유저, 역활 등을 생성
테이블을 관리하기 위해 이중 구조를 가짐
스키마, 데이터베이스라고도 부름. 폴더 같은 컨셉
바로 테이블을 만드는게 아니라 스키마를 먼저 만들어 구역을 나눔
각자 자기 용도에 스키마를 만들 수 있음
CREATE SCHEMA
사용자 자체가 admin 권한이 있어야 스키마를 만들 수 있음.
4개의 스키마를 만들고 만든 목록을 보고싶으면 select * from pg_namespace;
로 보면 된다
CREATE USER keeyong PASSWORD '...';
작은 따옴표 안에 비밀번호를 넣어주면 된다. 마찬가지로 유저 목록을 보고 싶으면 select * from pg_user;
8자 이상의 숫자, 대소문자, 특수문자 1개 등 조건이 있음.
사용자별로 테이블 엑세스 권한을 줘야함.
테이블 수가 1000 개 등 많아지면 수많은 테이블, 사용자 간에 정의하고 관리하는게 불가능해짐.
테이블 별로 엑세스 권한을 정하는 게 아니라, 스키마 별로 엑세스 권한을 정하고 사용자도 그룹을 만들어 관리함.
테이블이 1천개라고 스키마는 4개.
사용자도 몇개의 그룹을 만들어넣고 엑세스를 컨트롤함.
그룹별로 어떤 스키마에 있는 테이블을 읽고/쓸 수 있는지 정함.
예시
analytics_users : 테이블 읽기만
analytics_authors: analytics 스키마 아래 테이블 만들고 수정
pii_users: 개인정보 테이블 엑세스 가능
그림처럼 포함관계식의 사용자 그룹관계를 가짐
그룹들 권한을 OOP처럼 클래스화 시켜 계승할 수가 없음.
이상적으론 analytics_users의 기능을 계승하여 추가 기능을 더해 analytics_users을 만들고, 이를 계승하여 추가 기능을 더해 pii_users를 만듦
그렇게 되면 일이 줄어들음.
레드쉬프트는 불가능하기 때문에, 각 그룹마다 권한을 반복하여 작성 한 후, 추가 권한을 지정함.
새로운 그룹을 만들 때마다 기존 그룹을 바탕으로 만드는게 아니라, 매번 새롭게 정의함.
역활 - role 그룹과 똑같은데 계승이라는 컨셉이 있음
ALTER GROUP
을 통해 각 그룹에 사용자를 ADD USER
를 통해 추가함.
한 사용자는 다수의 그룹에 추가되도 문제 없음. 그 모든 그룹에서 받은 권한을 갖게 됨.
그룹 목록 확인 select * from pg_group
나중에 grant라는 sql 문법을 사용, 특정 그룹에 특정 스키마, 테이블을 접근할 권한을 지정. (읽기, 쓰기)
용도 자체는 그룹하고 똑같음. 계승구조를 만들 수 있음. 빌딩블록 형태로, 기본 형태 만들고, 여기서 권한이 많은 역할을 만들 때 계승해나감.
한 사용자는 다수역할에 소속 가능
select * from SVV_ROLES;
CREATE ROLE staff
GRANT ROLE staff TO keeyoung;
역할을 사용자에게 부여
GRANT ROLE stfaff TO ROLE manager;
한 역할을 다른 역할에게 권한을 부여
새로운 역할에만 필요한 기능을 추가로 지정해주면 됨.
Redshift Schema 생성
CREATE SCHEMA raw_data;
CREATE SCHEMA analytics;
CREATE SCHEMA adhoc;
CREATE SCHEMA pii;
실패함
SSL 인증서 만료라고 한다. 오랫동안 창으 ㄹ띄워서 그런거 같다.
다시 처음부터 연결해본다
성공했다.
만들어진 스키마에 재실행을 할 경우 에러가 난다
select * from pg_namespace;
내가 만든거 외에도 자동으로 생성된 스키마들이 보인다.
시스템에서 만들어놓은 스키마.
저중에 한두개는 써봄
CREATE USER jongwook PASSWORD '....';
select * from pg_user;
기본적으로 admin 있고 내가 생성한 jongwook이 보임
CREATE GROUP analytics_users;
CREATE GROUP pii_users;
jongwook 사용자를 그룹에 추가한다.
ALTER GROUP analytics_users ADD USER jongwook;
ALTER GROUP pii_users ADD USER jongwook;
CREATE ROLE staff;
CREATE ROLE manager;
CREATE ROLE external;
GRANT ROLE staff TO jongwook;
GRANT ROLE staff TO ROLE manager;
select * from SVV_ROLES;