Redshift 처음 구동 시 스키마, 그룹, 유저등을 생성해야한다.
- raw_data : 데이터 엔지니어들이 만드는 ETL을 통해서 외부에 있는 데이터소스의 데이터들이 테이블 형태로 여기에 저장.
- analytics : 데이터 분석가들이 ELT를 통해서 기존의 테이블을 조합(JOIN 등)을 통해 새로운 데이터를 만들어 여기에 저장.
- adhoc: 개발 용도 및 테스트 데이터
- pii : 데이터 활용이 고도화될 경우 우리 서비스 사용자들의 개인정보를 어떻게든 활용하는 경우가 있는데, 개인정보의 경우 잘못 사용되어 노출이 될 경우 엄청난 페널티가 있고 회사에도 손해가 가기 때문에 관리를 잘해야 한다. 왠만하면 사용안하는게 좋고 만약 꼭 사용해야할 경우 별도의 스키마를 만들고 그 밑에 개인정보와 관계된 테이블을 생성해놓고 이 테이블을 액세스할 수 있는 사람들을 최소화할 수 있도록 제약하고 이 테이블 액세스는 로깅을 모두 해서 나중에 감사할 수 있게 만드는게 일반적.
스키마는 결국 테이블관리를 카테고리화할 수 있도록 폴더를 만드는 것이다.
CREATE SCHEMA raw_data;
CREATE SCHEMA analytics;
CREATE SCHEMA adhoc;
CREATE SCHEMA pii;
이걸 실행하려면 실행하는 사용자에게 admin권한이 주어져야 한다.
CREATE USER yongjin PASSWORD '...';

사용자별로 table 액세스 권한을 줘야 한다. 테이블의 수가 100개 1000개 이럴 경우 이테이블은 누가 액세스할 수 있고 누가 액세스하면 안되고 하는걸 수많은 테이블과 수많은 사용자 사이에 일일이 지정하는 것은 불가능. 더 좋은 방법은 테이블별로 액세스 권한을 정하는 것이 아니라 스키마별로 액세스 권한을 정하고 사용자들도 사용자별로 액세스권한을 주는게 아니라 그룹이라는 템플릿을 만들어 그룹으로 관리하는게 일반적.
그룹을 만들어 놓고 사용자들을 집어넣어 그 그룹에 액세스 권한을 컨트롤하는 식으로 간다. 각 그룹별로 어떤 스키마의 테이블을 읽을 수 있는지, 쓸 수 있는지 이런식으로 관리. 각 사용자별로 어떤 테이블을 액세스할 수 있고 쓸 수 있고 그런 것들을 지정을 해줘야 하는데 테이블이 많아지고 사용자가 많아지면 이게 많이 힘들어지기 때문에 테이블을 스키마로, 사용자는 그룹으로 관리를 하여 그룹과 스키마간의 액세스 관계를 정의하는 형태로 접근권한을 관리한다.
CREATE GROUP analytics_users;
CREATE GROUP analytics_authors;
CREATE GROUP pii_users;
ALTER GROUP analytics_authors ADD USER yongjin;
ALTER GROUP analytics_users ADD USER yongjin;
ALTER GROUP pii_users ADD USER yongjin;
GRANT를 통해 각 그룹에 권한을 지정할 수 있다.
역할의 용도는 그룹과 같음. 차이라고 하면 계승구조를 사용가능.
CREATE ROLE staff;
CREATE ROLE manager;
CREATE ROLE external;
GRANT ROLE staff TO yongjin;
GRANT ROLE staff TO ROLE manager;
manager라는 역할은 staff 역할이 갖고있는 것들을 계승한다. 그리고 manager에게 필요한 별도의 권한을 부여 가능.

4개의 스키마를 위와 같이 생성할 수 있다.

위의 sql 쿼리를 통해 만들어진 모든 스키마를 확인할 수 있다. 방금 만든 것을 제외한 다른 스키마들은 시스템이 만든 것들이며, 만약 테이블 생성시 스키마를 지정하지 않을 경우 public 스키마에 테이블이 들어가게 된다.

위와 같은 SQL 쿼리를 통해 유저를 생성할 수 있다. Password는 영어 대소문자 혼합에 숫자 및 특수문자를 넣어주는식으로 8자 이상의 패스워드를 부여하면 된다.
그리고 select * from pg_user; 쿼리를 통해 만들어진 유저를 확인할 수 있다.

위의 SQL 쿼리를 통해 group을 생성할 수 있다. 또한 만든 그룹에 원하는 USER를 추가할 수 있다.

ROLE 생성하고 만든 role에 사용자를 추가할 수 있다. 또한 staff롤을 manager롤에 계승시켜 manager롤에 staff매니저의 권한들을 넣어줄 수 있다.
만들어진 role을 확인하는 sql문은 select * from SVV_ROLES;이다.