반응형

앞서 리눅스 centos에 postgreSQL을 설치해 보았다.
https://hippalus.tistory.com/649

이제 설치된 리눅스 postgreSQL에 어플리케이션으로 접속하여 DB를 조회해 볼 예정인데 일단 손쉬운 node.js로 구현해보려 한다.

일전에 로컬 DB에 user를 만들었을 당시엔 편의상 pgAdmin에서 생성( https://hippalus.tistory.com/648 )했는데 이번엔 리눅스 서버에 설치된 postgreSQL에 계정을 psql을 이용해 생성해보고 어플리케이션에서 접근할 테이블과 관련한 권한 설정도 진행해보려 한다.
지금은 tester 라는 계정을 만들며 작업을 진행하겠다.
이미 앞전 포스팅에서 tester와 testdb를 만든 상태라면 2번과 3번은 패싱~

1. 리눅스 터미널에 su 계정으로 접속되어 있단 가정하에 먼저 su계정에서 postgres계정으로 전환하자.
su - postgres
psql을 입력 후 엔터를 친다.

2. 커맨드 상태에서 CREATE USER tester WITH PASSWORD '적당한 암호';

엔터를 치면 CREATE ROLE 이라고 나와야 한다.

3. testdb라는 테스트용 DB를 만들어본다.(이미 만든 상태라면 pass)
CREATE DATABASE testdb;

4. 일단 여기까지 기본 준비는 끝이고 이제 본격적으로 어플리케이션에서 tester의 설정을 만져보려한다.
tester 계정은 단순히 어플리케이션단에서 SELECT, INSERT, UPDATE, DELETE 정도의 권한만 부여받은채로 실행될 계정이다.
이용자가 사용할 계정인데 SUPER USER 권한이 부여된채로 노출됐다가 무슨 일이 생길지 모르기 때문이다.

내가 사용할 DB는 testdb이므로 testdb로 실행해야 하므로 testdb로 사용 DB를 바꿔준다.
\c testdb 를 입력하고 엔터
그럼 이렇게 뜰 것이다.


5. 이제 해야 할 일은 이 testdb에서 table이 생성될 때 마다 자동으로 programuser 계정으로 SELECT, INSERT, UPDATE, DELETE 권한이 부여되게 만들어야 한다.

'public' 스키마의 모든 테이블에 대한 기본 권한 부여
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO tester ;

만약 이전에 생성한 테이블들이 있다면 아래처럼 한 번 더 실행해준다.
'public' 스키마의 모든 테이블에 대해 'appuser'에게 권한 부여
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO tester;

참고로 취소는 다음과 같다.
'public' 스키마의 모든 테이블에 대한 기본 권한 취소
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE SELECT, INSERT, UPDATE, DELETE ON TABLES FROM tester;

'public' 스키마의 모든 테이블에 대한 권한 취소
REVOKE SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public FROM tester;

6. 테이블이 만들어질 때마다 tester계정에 해당 테이블을 SELECT, INSERT, UPDATE, DELETE권한이 자동으로 부여되게 만들었으니 board_tbl을 만들자.
CREATE TABLE IF NOT EXISTS public.board_tbl
(
    b_idx integer NOT NULL,
    b_title text COLLATE pg_catalog."default" NOT NULL,
    b_content text COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT board_tbl_pkey PRIMARY KEY (b_idx)
);

7. 이제 기본 DB의 user작업은 끝났다.
node.js로 board_tbl을 select해보겠다.
insert 문을 이용해 데이터를 넣어보자.
insert into board_tbl (b_idx, b_title, b_content) values (1, 'title', 'content');
insert into board_tbl (b_idx, b_title, b_content) values (2, 'title2', 'content2');
insert into board_tbl (b_idx, b_title, b_content) values (3, 'title3', 'content3');

8. 드디어 node.js 프로그래밍
(node.js설치는 검색해서 알아서~)

node.js에서 postgreSQL을 접근하려면 pg 모듈을 설치해야 한다.
npm i pg를 터미널에서 입력하면 잘 설치 된다.

그다음 실제 소스 구현이다.
app.js라는 파일을 만들고 아래와 같이 타이핑하자.

const { Client } = require('pg');

// PostgreSQL 연결 정보 설정
const client = new Client({
  user: 'tester', //아까 생성한 어플리케이션용 계정
  host: '000.000.000.000', //postgreSQL이 설치된 서버의 ip
  database: 'testdb', //생성한 DB명
  password: '적당한암호', //어플리케이션용 계정의 비밀번호
  port: 5432, // PostgreSQL 기본 포트 번호
});

// PostgreSQL 데이터베이스에 연결
client.connect();

// board_tbl 테이블에서 데이터 조회
client.query('SELECT * FROM board_tbl', (err, res) => {
  if (err) {
    console.error('error :', err);
    return;
  }
  console.log('result :');
  for (let row of res.rows) {
    console.log(row);
  }
  // 데이터베이스 연결 종료
  client.end();
});

저장 후 실행
node app.js 엔터
잘~ 나온다.

만약 정보가 틀리거나 권한이 없거나 그러면 이런 오류를 발견하게 될 것이다.
반응형
Posted by Hippalus
,