테이블 접근 권한

Updated:

상속된 접근 권한

테이블에 대한 DML 권한은 개별 사용자 또는 사용자에게 할당된 role에서 할당 할 수 있지만, 각 테이블에 대해 권한을 개별적으로 설정하면 유지 관리와 보안에 문제가 발생할 수 있다. 그러므로 버티카는 상속된 권한을 허용함으로써 이 과정을 간소화한다. 데이터베이스 슈퍼 사용자(또는 데이터베이스 스키마의 소유자)는 스키마 수준에서 DML 권한을 한 번에 할당 할 수 있다. 그런 다음 스키마에 액세스할 수 있는 모든 사용자에게 권한을 부여할 수 있다.
또한 모든 객체(예: 테이블)의 소유자는 객체에 대한 권한을 설정하고 다른 사용자에게 할당 할 수 있다.

Vertica 스키마권한상속1

상속된 권한과 기존 table

스키마의 새 테이블이 권한을 상속할 수 있도록 하려면 DEFAULT INCLUDE PRIVILEGES 옵션과 함께 ALTER SCHEMA 명령을 사용하십시오. 스키마의 기존 테이블에 대한 권한은 변경되지 않으며, 새 테이블만 권한을 상속한다.

ALTER SCHEMA <스키마명> DEFAULT INCLUDE SCHEMA PRIVILEGES ;

기존 테이블에 스키마 권한을 할당하려면 INCLUDE SCHEMA PRIVILEGES 옵션과 함께 사용하십시오.

ALTER TABLE <테이블명> INCLUDE SCHEMA PRIVILEGES;

상위 스키마의 GRANT 문에서 테이블과 뷰로 상속되는 권한에 대한 자세한 내용은 시스템 테이블 INHERITED_PRIVILEGES에서 확인 할 수 있으며, 명시적으로 부여된 권한에 대한 자세한 내용은 시스템 테이블 GRANTS를 확인하면 된다.

Vertica 스키마권한상속2

--사용자 생성
dbadmin=> create user user1;
CREATE USER

--스키마 생성
dbadmin=> create schema schema1;
CREATE SCHEMA

--user1에 스키마 usage, select 권한 부여
dbadmin=> grant usage, select on schema schema1 to user1;
GRANT PRIVILEGE

--schema1에 table1생성
dbadmin=> create table schema1.table1(col1 int);
CREATE TABLE

--user1 접속
dbadmin=> \c - user1
You are now connected as user "user1".

--현재 사용자 확인
dbadmin=> select current_user();
current_user
--------------
user1
(1 row)

--schema1.table1조회(권한 없음으로 에러발생)
dbadmin=> select * from schema1.table1;
ERROR 4367:  Permission denied for relation table1

--dbadmin 접속
dbadmin=> \c - dbadmin
Password:
You are now connected as user "dbadmin".

--현재 사용자 확인
dbadmin=> select current_user();
current_user
--------------
dbadmin
(1 row)

--schema에 부여된 권한 상속
dbadmin=> alter schema schema1 default include schema privileges;
ALTER SCHEMA

--schema1에 table2생성
dbadmin=> create table schema1.table2(col1 int);
WARNING 6978:  Table "table2" will include privileges from schema "schema1"
CREATE TABLE

--user1 접속
dbadmin=> \c - user1
You are now connected as user "user1".

--현재 사용자 확인
dbadmin=> select current_user();
current_user
--------------
user1
(1 row)

--권한 상속 이후에 생성된 table2 조회
dbadmin=> select * from schema1.table2;
col1
------
(0 rows)

--권한 상속 이전에 생성된 table1 조회(권한 없음으로 에러발생)
dbadmin=> select * from schema1.table1;
ERROR 4367:  Permission denied for relation table1

--dbadmin 접속
dbadmin=> \c - dbadmin
Password:
You are now connected as user "dbadmin".

--현재 사용자 확인
dbadmin=> select current_user();
current_user
--------------
dbadmin
(1 row)

--schema1에 부여된 권한을 table1에 상속
dbadmin=> alter table schema1.table1 include schema privileges;
ALTER TABLE

--user1 접속
dbadmin=> \c - user1
You are now connected as user "user1".

--현재 사용자 확인
dbadmin=> select current_user();
current_user
--------------
user1
(1 row)

--schema1에 부여된 권한이 table1에 상속되어서 조회 가능
dbadmin=> select * from schema1.table1;
col1
------
(0 rows)

object별 할당 가능한 권한

object ALTER DROP CREATE DELETE EXECUTE INSERT READ REFERENCES SELECT TEMP TRUNCATE UPDATE USAGE WRITE
Database     •             •        
Schema ! ! • !   !   ! !   ! ! •  
Table • •   •   •   • •   • •    
View • •             •          
Sequence • •             •          
Procedure         •                  
User defined function • •     •                  
Model • •                   •    
Library                       •    
Resource Pool                       •    
Storage Location             •           •  

!는 해당 스키마의 table, view에 상속가능한 권한

테이블 데이터에 대한 액세스 제한

column access 권한

버티카는 사용자가 특정 테이블에 접근할 수 있는 권한을 부여할 뿐만 아니라 사용자가 접근할 수 있는 테이블의 데이터를 제어할 수 있도록 해준다. 모든 데이터베이스 슈퍼 사용자는 열 접근 정책을 생성할 수 있다. 이렇게 하면 사용자가 볼 수 있는 테이블 column과 해당 column에 표시되는 정보가 제어된다.
액세스 정책은 특정 사용자가 아닌 role에 할당된다.
Column 접근 정책은 기본적으로 활성화되어 있으며, configuration parameter인 EnableAccessPolicy = 0 으로 비활성화 시킬 수 있다.

아래 그림에는 다음과 같은 두 가지 액세스 정책이 표시된다.
• 첫째는 column에 포함된 모든 값을 숨긴다(column 존재 사실을 숨기지 않는다). • 두 번째 항목은 column에 표시된 값을 변경한다(예, 각 row의 column에 대해 다른 값을 표시하는 SQL을 작성할 수 있다)

Vertica column access 정책

row access 권한

모든 데이터베이스 슈퍼 사용자는 ROW 액세스 정책을 생성할 수 있다.
이러한 정책을 사용하면 부여된 역할에 따라 사용자가 볼 수 있는 행을 제한할 수 있다.

Vertica row access 정책