다른 DB를 사용할 때는 잘 사용하지 않던 스키마 개념 때문에 굉장히 혼란스러웠지만 이틀 정도 매대기치다보니 정리가 되었다. 휴 @.@


 

# 사용자 권한 설정과 스키마 설정

## postgresql 접속

psql postgres

 

만일 postgreSQL 버전을 여러가지 사용중이라면 포트를 지정해서 접속!

psql -p [포트번호]

* 포트 번호는 postgresql.conf파일에서 확인 가능

 

### postgresql 명령어 참고 블로그

https://browndwarf.tistory.com/51

 

알아두면 유용한 psql 명령어 정리

PSQL 보통 PostgreSQL을 설치할 때 Client Tool인 pgAdmin이 같이 설치되고, 대부분 GUI 환경에서 pgAdmin을 사용하기 때문에 PSQL의 존재조차 모를 때가 있다. (필자는 PostgreSQL 처음 사용했을 때 psql의 존재를 1

browndwarf.tistory.com

 

- PostgreSQL 구조를 생각해두면 이해하는데 좋음

PostgreSQL DBMS > Database > Schema > Table & View & Procedure

 

## 현재 세션 유저 확인

postgres=# SELECT session_user;

 

## 사용자 생성

- 데이터베이스에 접속할 수 있는 사용자 역할을 생성

- testuser 라는 유저명, password 설정하여 유저 생성

postgres=# CREATE ROLE testuser WITH LOGIN PASSWORD '비밀번호설정';

 

## 데이터베이스 생성

- 데이터베이스 자체를 생성하며, 해당 데이터베이스의 소유자를 지정

create database testdb with owner testuser;

 

 - 데이터베이스를 미리 만들어뒀다면 소유주가 postgres(기본사용자)이니 변경이 필요함

ALTER DATABASE policydb OWNER TO testuser;



## 데이터베이스 목록 확인

postgres=# \l+

 

## testuser 계정으로 testdb 접속

postgres=# \c testdb testuser
접속정보: 데이터베이스="testdb", 사용자="testuser".
testdb=>

=> 는 superuser가 아님을 뜻함.

 

## 스키마 생성

PostgreSQL을 제일 먼저 설치하면, 기본적으로 postgres라는 database가 존재하는데 Public이라는 Schema가 생성됨.

그 외 testuser 유저명과 같은 이름의 testuser라는 스키마를 생성 

(사내 규정으로 동일한 이름으로 생성했지만, 필요에 따라 스키마명은 변경하면 된다.)

 

create schema testuser authorization testuser;

 

## 스키마 확인

testdb=> \dn+
                                          스키마 목록
   이름   |      소유주       |              액세스 권한               |          설명
----------+-------------------+----------------------------------------+------------------------
 public   | pg_database_owner | pg_database_owner=UC/pg_database_owner+| standard public schema
          |                   | =U/pg_database_owner                   |
 testuser | testuser          |                                        |

 

## 검색 경로 설정 (필요에 따라 설정하는 듯 싶다. 알아보고 추후에 다시 업데이트 하겠다.)

스키마를 사용자명과 동일하게 설정하지 않았을 때는 검색 경로를 설정해서 해당 DB에서 어떤 스키마가 검색될지 경로를 설정해야 한다.

스키마명을 사용자명과 동일하게 설정했다면 이 단계는 필요치 않다.

testdb=> set search_path to "$user",testdb;
SET
더보기

여기서 사용된 $user는 PostgreSQL에서 제공하는 특별한 변수로, 현재 세션에서 로그인한 사용자의 이름을 나타내게 된다.

이 변수를 사용하면 각 사용자마다 다른 검색 경로를 설정할 수 있다.

 

"$user": 현재 세션의 사용자 이름을 검색 경로의 첫 번째로 지정.

예를 들어, 만약 현재 세션이 testuser로 로그인되어 있다면, 검색 경로의 첫 번째는 testuser이다.

 

testdb: 데이터베이스 testdb를 검색 경로의 두 번째로 지정.

이는 명시적으로 데이터베이스 이름을 사용하여 검색 경로를 설정.

 

이렇게 검색 경로를 설정해두면 현재 사용자의 스키마(사용자의 이름과 일치하는 스키마)를 먼저 검색하고, 그 다음에는 testdb 데이터베이스의 객체들을 검색할 수 있다.

 

검색 경로를 설정함으로써, 객체를 참조할 때 스키마 이름을 명시하지 않고도 직접 참조할 수 있다.

## 사용자 권한 부여

-- testuser 스키마에 대해 testuser 사용자에게 모든 권한 부여
-- USAGE 권한을 부여하여 스키마 내의 객체에 접근할 수 있도록 함
GRANT USAGE ON SCHEMA testuser TO testuser;

-- testuser 사용자에게 testuser 스키마에서 테이블/시퀀스를 생성할 수 있는 권한 부여
GRANT CREATE ON SCHEMA testuser TO testuser;

-- 스키마 내의 모든 테이블에 대해 SELECT, INSERT, UPDATE, DELETE 권한 부여
-- 필요에 따라 권한 조정
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA testuser TO testuser;

-- 스키마 내의 모든 시퀀스에 대해 USAGE 권한을 부여
GRANT USAGE ON ALL SEQUENCES IN SCHEMA testuser TO testuser;

-- 스키마 내의 모든 함수에 대해 EXECUTE 권한 부여
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA testuser TO testuser;

 

 

# DBeaver를 통해 스키마 확인됨

- 디비버를 통해 스키마를 확인하려면 스키마에 할당해논 유저명과 비밀번호를 통해 연결하면 확인 가능.

이 포스팅에서는 사용자 생성에서 만든 testuser 유저로 연결하면 된다.

host는 로컬에서 돌리면 localhost, 가상 머신 위에 해당 DB를 설치했다면 가상 머신의 IPv4 주소를 확인해보길 !

 

 

 

 


참고 : https://velog.io/@easbui/PostgreSQL-%EC%8A%A4%ED%82%A4%EB%A7%88%EC%99%80-%EA%B6%8C%ED%95%9C

 

PostgreSQL 스키마와 권한

공부 기록 남기기지금까지 RDBMS 라고는 MYSQL과 그 사촌 MariaDB만 사용하다가, 이번에 PostgreSQL을 사용해 봐야겠다는 생각이 들어서 무턱 대고 설치해봤다. 일단 데이터베이스 생성과 유저 생성, 권

velog.io

https://kimdubi.github.io/postgresql/pg_schema/

 

PostgreSQL schema 의미 및 권한관리

MySQL이나 ORACLE 을 다루다가 PostgreSQL을 처음 다룰 때 가장 헷갈리는 것 중 하나는 바로 schema의 개념입니다. ORACLE에서는 오브젝트를 가진 USER, MySQL은 논리DB를 schema 라고 하는 반면에 PostgreSQL 에서

kimdubi.github.io

 

'DateBase > PostgreSQL' 카테고리의 다른 글

MacOS | homebrew 이용해서 postgresql 16 설치하기  (0) 2024.06.19

+ Recent posts