1. PostgreSQL에 대한 정의
정의
오픈 소스 객체-관계형 데이터베이스 시스템(ORDBMS), 다른 관계형 데이터베이스 시스템과 달리 연산자, 복합 자료형, 집계 함수, 자료형 변환자, 확장 기능 등 다양한 데이터베이스 객체를 사용자가 임의로 만들 수 있는 기능을 제공한다.
구조
클라이언트/서버 모델, 서버는 데이터베이스 파일들을 관리하며 다중 클라이언트 연결을 처리할 수 있고, 클라이언트는 기존 서버와의 간섭 없이 새로 생성된 서버 프로세스와 통신한다.
특징
- 소규모의 단일 머신 애플리케이션에서부터 수많은 동시 접속 사용자가 있는 대형의 인터넷 애플리케이션(또는 데이터 웨어하우스용)에 이르기까지 여러 부하를 관리할 수 있으며 macOS 서버의 경우 PostgreSQL은 기본 데이터베이스이다.
- 다양한 join 방법을 제공한다.
- sort merge join: 조인의 대상 범위가 넓을 경우 발생하는 Random Access를 줄이기 위한 경우나 연결고리에 마땅한 인덱스가 존재하지 않을 경우 해결하기 위한 조인 방안이다.
- PostgreSQL엔 여러 데이터베이스가 존재하고, 한 데이터베이스엔 여러 테이블이 존재하고, 한 테이블엔 여러 레코드와 칼럼이 존재하고, 한 레코드엔 여러 필드가 존재한다.
장점
- Windows, Linux, MAC OS 또는 Unix Platform 등 다양한 플랫폼을 지원
- DB 보안의 경우 데이터 암호화, 접근 제어 및 감사의 3가지로 구성
- pg_upgrade를 이용하여 업그레이드를 진행할 수 있으며 웹 기반 또는 C/S 기반의 GUI 관리 도구를 제공하여 모니터링 및 관리, 튜닝 가능
- 관계형 DBMS의 기본적인 기능인 트랜잭션과 ACID(Atomicity, Consistency, Isolation, Durability)를 지원
쿼리문
insert into 테이블 이름 (칼럼 이름,...) values (값,...);
update 테이블 이름 set 칼럼 1=변경할 값 1, 칼럼 2=변경할 값 2,... where 조건문;
명령어
Vacuum: PostgreSQL에만 존재하는 고유 명령어, 오래된 영역을 재사용하거나 정리해주는 명령어
2. PostgreSQL에 대한 설치방법
우분투에서 PostgreSQL 설치하는 방법에 대해서 살펴본다.
sudo apt-get update
sudo apt-get install postgresql postgresql-contrib
설치가 완료되면 설치된 PostgreSQL 버전 확인
psql --version
postresql을 설치하면 postgres 계정이 생성된다.
postgres는 postgresql을 관리하는 계정이다.
sudo -i -u postgres
-i : Login 옵션
-u : User 옵션
postgres 계정으로 변경 후 postgresql로 들어가는 명령어
psql
다시 빠져나오는 명령어
\q
postgres 계정으로 새로운 계정 생성
superuser인지 묻는다.
createuser --interactive
데이터베이스 생성
데이터베이스를 생성하면 기본적으로 Public 스키마가 존재한다.
스키마 레벨은 데이터베이스 내에서는 논리적으로 구분된 계층이다.
postgres 계정으로 변경하고 명령어를 통해서 생성
createdb test
postgresql에서 데이터베이스명과 동일한 Linux User 계정이 필요하다.
Ubuntu에서 데이터베이스명과 동일한 계정을 만들어 준다.
sudo adduser test
postgresql의 데이터베이스명과 postgres user명과 Linux 유저 계정이 동일하게 존재!
접속정보 확인
\conninfo
사용자 확인
\du
스키마 목록 확인
\dn
스키마 목록을 확인할 수 있고 데이터베이스를 생성하면 기본적으로 스키마는 public 하나밖에 없다.
테이블 목록 확인, 생성하기
예제코드(https://www.postgresqltutorial.com/postgresql-insert/)에 있던 테이블을 사용
create table 테이블명 (test varchar(20) ...)
CREATE TABLE links ( id SERIAL PRIMARY KEY, url VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, description VARCHAR (255), last_update DATE ); |
MySQL과 다른 점은 테이블을 생성할 때 테이블이 속하게 될 스키마를 지정할 수 있다는 것이다.
따로 지정하지 않으면 public 스키마 테이블이 생성된다.
테이블에 대한 자세한 정보
특정 스키마에 존재하는 테이블을 보기 위해서 사용한다.
\d links
테이블에 내용 넣기
특정 스키마의 테이블을 쓰고 싶다면 insert into 스키마명.테이블명 으로 입력한다.
INSERT INTO link (url, name) VALUES ('http://www.google.com','Google');
3. 보안관점
1) 불필요한 계정, 권한과 취약한 패스워드 사용 여부
Default로 생성되는 계정이나 DB 관리나 운용에 사용하지 않는 불필요한 계정을 점검한다.
패스워드 복잡도 설정이 되어야 한다.
관리자 권한은 꼭 필요한 계정 및 그룹에게만 부여해야 한다.
\du
2) public 스키마 사용 제한
PostgreSQL에서 데이터베이스 생성하면 기본으로 public 스키마가 생성되는데, 별도의 스키마 없이 테이블을 생성할 경우 기본 public 스키마 안에 생성된다. 스키마 접근을 소유주와 특정 계정만 접근하도록 설정한다.
\dn+
postgres=UC/postgres+의 의미: postgres role은 USAGE, CREATE 권한을 가짐
=UC/postgres : PUBLIC은 USAGE, CREATE 권한을 가짐
3) IP 접근 제한 설정
지정된 IP 주소만 DB 서버에 접근 가능하도록 설정되어 있는지 확인해야 한다.
4) 안전한 인증 방식 설정
trust, password, md5 등 안전하지 않은 인증 방식이 존재한다.
cat pg_hba.conf
5) 안전한 암호화 알고리즘 사용 여부
계정별 암호화 알고리즘 확인 가능 : pg_shadow
6) 환경설정 파일 권한 설정
중요한 환경설정 파일의 소유자 및 그룹이 적절하여 부여되어있는지 확인한다.
권한이 600 이하로 설정되어 있어야 안전하다.
설치
In Windows
https://www.postgresql.org/download/
In macOS
= postgres.app 파일을 Application 폴더에 옮기기만 하면 된다.
https://postgresapp.com/downloads.html
참고
https://browndwarf.tistory.com/3
'OS > Database' 카테고리의 다른 글
[DBMS] Couchbase Database 기본지식 및 설치방법 (1655) | 2022.01.17 |
---|---|
[DBMS] CouchDB 정의 및 특징 (552) | 2022.01.13 |
[DBMS] Redis 정의 및 설치방법, 보안관점 (423) | 2021.11.10 |
[DBMS] Oracle 정의 및 특징 (426) | 2021.06.15 |
[DBMS] SQLite 정의 및 사용법(with Docker) (303) | 2021.06.15 |