database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 5854 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 5854
PostgreSQL 8 : Group,User관리
작성자
조성준(openphp)
작성일
2005-01-30 06:17:25ⓒ
2005-01-30 20:09:25ⓜ
조회수
20,554

홈페이지 : http://www.openphp.com , http://www.openpython.com

 

안녕 하십니까? 조성준 입니다.

WARN  : 미천한 실력이니 도움이 않되셔도 나쁜넘이라는 소리만 말아주싶시요.

PostgreSQL의 그룹/계정관리에 관한 설명입니다. 권한 부분은 다른장에서 설명합니다.


PostgreSQL의 Access에 대한것이 좀 세분화되어 있습니다. 

pg_hba.conf에는 접속자의 접속방법(TCP/IP,UDS[Unix Domain Socket]) , IP Block,Password Encrypt Method
시스템 카탈라고 테이블의 pg_user와 pg_group등으로 처리되는 그룹,계정,권한 시스템으로 구분되어 집니다.

이번장에서 설명드린것은 그룹관 계정에 관한것으로, PostgreSQL은 계정에 대해서는 SQL문을 이용한 방법과
실행파일형태의 프로그램을 통해 처리가 가능하도록 준비되어 있습니다.

이는 외부에서의 조작이나(디비접속없이,쉘명령처리를 요할때나) 설치초기에 빠른작업을 위한것으로 보이나
이런말은 문서에 언급되어 있지는 않지만 저의 추축입니다.^^..



미리 알고갑시다! : PostgreSQL에서는 패스워드가 MD5가 기본화 되어있습니다.
MD5는 복호화 즉 역해석이 불가능하게 됩니다.
(어디보니 MD5의 문제점을 발견했다는식의 애기로 SHA1으로 가야한다느니 하던데 쩝!.주워들은거라~)

계정 생성이나 변경들의 패스워드문자에 대한 암호화해서 넣을것이냐, 아니면 그냥 TEXT로만 할것이냐
라는 옵션이 따릅니다. 암호화 해서 입력하게 되면. 다시는 복원이 불가능하게 됩니다.

고로 패스워드를 까먹어 알아내는건 거의불가능이기에 주의를 요하지만.
요즘의 대부분의 *nix 머신들이 md5로 패스워드를 쓰고 있기에 뭐 마찬가지다.

Reference문서에도 보면 아주아주 옛날 PostgreSQL Client를 쓸경우?(버전은 모르지만 정말오래된 모양)
문제가 발생한다고 주의요망이라고 써놓게는 했습니다.
아므튼 선택을 잘하셔야 합니다. 일단 암호화 하시는게 장땡입니다.


먼저 제공된 실행파일(프로그램)을 통한 방법을 알려드리겠습니다.

- createuser ,dropuser -

두개의 파일은 PostgreSQL을 설치하신 폴더의 bin/ 폴더안에 나란히 있습니다.
(그외의 것도있는데 이는 따로 다른장에서 설명합니다.)

단촐시 딸랑 두개뿐입니다. 거의 설치시에만 쓰세요~ 라는 압박감이 들지만. 이로도 쓸만한것이 많습니다.
Shell로만 구성한 Hosting 자동화 도구제작이라던지에 쓸만 하답니다.^^. -.-' 아닌가?

인용 또는 결과 :

[postgres@mail bin]$ ./createuser --help
createuser creates a new PostgreSQL user.

Usage:
  createuser [OPTION]... [USERNAME]

Options:
  -a, --adduser             유저생성 권한 부여
  -A, --no-adduser          유저생성 권한 부여 않함
  -d, --createdb            디비생성 권한 부여
  -D, --no-createdb         디비생성 권한 부여
  -P, --pwprompt            패스워드 입력을 위한 프롬프트
  -E, --encrypted           패스워드 암호화
  -N, --unencrypted         패스워드 비암호화(cleat text password)
  -i, --sysid=SYSID         구분용 SYSID
  -e, --echo                show the commands being sent to the server
  -q, --quiet               don't write any messages
  --help                    show this help, then exit
  --version                 output version information, then exit

Connection options:
  -h, --host=HOSTNAME       접속용 IP나Hostname또는 Unix Domain Socket 위칠
  -p, --port=PORT           서버 Port (디폴트 5432)
  -U, --username=USERNAME   접속 유저명
  -W, --password            접속 유저의 패스워드

If one of -a, -A, -d, -D, and USERNAME is not specified, you will

be prompted interactively.

Report bugs to <pgsql-bugs@postgresql.org>.

[root@good /root]$
_


자 createuser 명령에 parameter(argument)들이 즐비합니다. 실제 사용할 부분이며, 몇가지 예제로 방법으로 알려드리겠습니다.


* 단순히 계정생성 실행 방법 *

인용 또는 결과 :

[postgres@ bin]$ 
./createuser
Enter name of user to add: 
openphp <-- 유저명입력
Shall the new user be allowed to create databases? (y/n) 
n <-- 디비생성권한
Shall the new user be allowed to create more new users? (y/n) 
n <-- 유저생성권한
Password: 
************
CREATE USER
[postgres@ bin]$ _

[root@good /root]$
_


여기서 약간 상황이 달리 나오시는 분이 계실겁니다. Password부분인데 제가 테스트하는 환경이 모든 접근에 대한
Master User인 postgres에 대한 패스워드를 입력한상태라 그렇습니다. 않나오셔도 상관없습니다.

먼저 유저명을 입력하고 나면 2가지의 질문이 있는데, 처음은 디비생성권한 과 유저생성권한입니다.
일반적인 시스템의 경우라면 당연히 no를 해야 하지만. 일분 관리권한자가 다중일경우를 대비한것입니다.

* 계정생성 한줄 실행 방법 *

인용 또는 결과 :

[postgres@ bin]$ 
./createuser -h /tmp -p 5432 -U postgres -W -A -D -P -E openphp
Enter password for new user: ********** <-- 신규생성계정의 패스워드
Enter it again: ********** <-- 다시한번
Password: ********** <-- 마스터계정인 Postgres에 대한 패스워드
CREATE USER
[postgres@ bin]$ _

[root@good /root]$
_


역시 위의 경우 마지막의 마스터유저에 대한 패스워드는 않나올수도 있습니다.
다음은 각명령에 대한 설명드립니다.


-h /tmp

    /tmp 로 설정한다는 것은 뒤에 나올 -p 5432즉 PostgreSQL의 Unix Domain Socket인 /tmp/.s.PG5432 파일로 연결 한다는 뜻입니다.
    원격일경우는 여기에 PostgreSQL Server의 IP나 HostName을 넣어주시면 됩니다.


-p 5432

    않해주셔도 되는 부분입니다만 해당 포트를 변경하실경우 하셔야 합니다.


-U postgres

    마스터유저 명을 기명하는것인데 만약에 마스터 유저(시스템유저)로 로그인되어 있다면 그 이름을 자동으로 가져오므로
    설정하실 필요가 없습니다.


-W

    마스터 유저의 패스워드를 묻는것인데 없어도 됩니다. pg_hda.conf에서 이미 패스워드를 요청하도록 셋팅되었기때문에


-A

    -A는 유저 생성권한이 없습니다. -a로 주면 유저 생성권한을 줍니다.


-D

    -D는 디비 생성권한이 없습니다. -d로 주면 디비 생성권한을 줍니다.


-P

    주의! 신규 사용자의 패스워드를 주겠다는것입니다. 기본적으로 패스워드없이 생성되는데 이옵션을 넣으셔야 합니다.


-E

    패스워드 저장을 MD5로 암호화 하겠다는 것입니다.


openphp

    신규 생성 계정명


자 여기따기 생성이 일단락 완료 되었습니다.

* dropuser *

drop user는 매우 단촐합니다. 연결 접속명령과 계정명만 있으면 바로 삭제가 가능합니다.
당연히 마스터 유저일때만이죠.

인용 또는 결과 :

[postgres@ bin]$ ./dropuser --help
dropuser removes a PostgreSQL user.

Usage:
  dropuser [OPTION]... [USERNAME]

Options:
  -e, --echo                show the commands being sent to the server
  -i, --interactive         prompt before deleting anything
  -q, --quiet               don't write any messages
  -h, --host=HOSTNAME       접속용 IP나Hostname또는 Unix Domain Socket 위칠
  -p, --port=PORT           서버 Port (디폴트 5432)
  -U, --username=USERNAME   접속 유저명
  -W, --password            접속 유저의 패스워드
  --help                    show this help, then exit
  --version                 output version information, then exit

Report bugs to <pgsql-bugs@postgresql.org>.
[postgres@ bin]$ 

[root@good /root]$
_


중요한건 위에 한글 설명된것 뿐입니다. 

* 단순히 계정 지우기 *

인용 또는 결과 :

[postgres@ bin]$ ./dropuser 
Enter name of user to drop: 
openphp
Password: 
************
DROP USER
[postgres@ bin]$ 

[root@good /root]$
_


단순히 실행한것은 PostgreSQL Server Local에서 실행했기 때문이죠.
계정명과 마스터유저의 패스워드만 넣으면 바로 삭제 됩니다.

만약 해당계정과 연결된 디비의 Owner(주인)인 경우 에러가 나는데 이때는 디비를 먼저 삭제하던지
다른 계정으로 옮긴후 지우셔야 합니다.

만약에 원격에 서버가 있는 경우 createuser에서 사용한바와 같이 연결 옵션을 넣어 주시면 됩니다.




- CREATE/ALTER/DROP GROUP -

자 이번에는 디비에 접속하여 쿼리를 통한 계정 관리를 설명드리겠습니다.

잠깐! : PostgreSQL은 기본접속이 디비가 반드시있어야 접속이 가능합니다.
저도 아직 방법이 없나 문서를 보지만 아직 찾지 못하였습니다.

그래서 최소한 psql을 사용하실려면 디비를 만들어 주여야만 합니다.

그냥 시스템 계정명과 같이 하실려면 createdb만 하시면 매우 간단합니다.
이부분은 제가 현재 문서들을 처음부터 다시보면서 자료정리중이니 찾으면 수정하겠습니다.


인용 또는 결과 :

[postgres@ postgres]$ 
psql
Password: 
Welcome to psql 8.0.0, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# 
_

[root@good /root]$
_


현재 위의 경우는 postgres database로 접근 된것과 같습니다. 즉.! psql이라는 PostgreSQL SQL Client Tool을
디비 명을 뒤에 붙이지 않으면 Shell의 환경 변수중 USERNAME을 가져오기때문에 이렇습니다.
웹호스팅이나 ASP,Virtual Hosting을 생각 하시는분은 고려하시기 바랍니다.

psql 에 대한 자세한설명은 psql 장에서 따로 설명드립니다.

psql의 기는중에 Help page를 보는 방법은 
\d SQL문을 하면 아주 간단하고 단출하게 help가 나옵니다.

* create/alter/drop group *

인용 또는 결과 :

postgres=# \h 
CREATE GROUP
Command:     CREATE GROUP
De<script>ion: define a new user group
Syntax:
CREATE GROUP name [ [ WITH ] option [ ... ] ]

where option can be:

     SYSID gid
   | USER  username [, ...]


[root@good /root]$
_


CREATE GROUP은 보이는바와 같이 GROUP생성 SQL문으로 ANSI-SQL에서는 Role이랑 비슷합니다.
하지만 PostgreSQL의 CREATE GROUP은 ROLE명령과는 상당히 Simple그 자체입니다 T.T;;언젠가 늘어 나겠지

SYSID 라고 하는 부분은 내부의 GROUP ID와 같은 구분용 숫자로된 코드입니다. 만약에 이를 설정하지 않으면
그리고 GROUP이 존재하지 않으면 숫자 100부터 +1씩 카운트 됩니다. 1~99까지는 아주 핵심적인 그룹을 위한것으로
이는 계정 생성때도 동일함으로 시스템과 직관적 관계의 관리자의 경우를 제외하면 자동으로 설정되게 두는걸 추천.!

USER부분은 이미 유저가 생성되어 있어야 가능합니다. 기존에 유저가 있는데 이유저들을 이번에 생성하는
그룹에 포함하고 싶을때 ,(콤마) 구분으로 주욱 붙이시면 됩니다.

인용 또는 결과 :

(1) CREATE GROUP 그룹명;
(2) CREATE GROUP 그룹명 WITH USER openphp,openpython,opencopyleft;
(3) CREATE GROUP 그룹명 WITH SYSID 100 USER openphp;
(4) CREATE GROUP 그룹명 WITH SYSID 100;

[root@good /root]$
_


SQL문을 4가지 나옵니다. 따로 설명 않들여도 이해하실듯 싶네요. 


인용 또는 결과 :

postgres=# \h 
ALTER GROUP
Command:     ALTER GROUP
De<script>ion: change a user group
Syntax:
ALTER GROUP groupname ADD USER username [, ... ]
ALTER GROUP groupname DROP USER username [, ... ]

ALTER GROUP groupname RENAME TO newname

[root@good /root]$
_


alter는 변경의 의미이며 아래 예제를 통해 설명 드리겠습니다.

인용 또는 결과 :

(1) ALTER GROUP 그룹명 ADD USER test,superman,batman,assari;
(2) ALTER GROUP 그룹명 DROP USER assari;
(3) ALTER GROUP 그룹명 RENAME TO 새로룬그룹명;

[root@good /root]$
_


SQL문으로는 3가지 타입이 나오는데
(1)은 기존 그룹에 추가적으로 유저를 그룹에 포함시킨다.
(2)는 그룹에 포함된 유저에 대해 해당 그룹에 제외 시킨다.
(3)는 그룹명을 바꾸는 역활을 합니다.

인용 또는 결과 :

postgres=# \h 
DROP GROUP 
Command:     DROP GROUP
De<script>ion: remove a user group
Syntax:
DROP GROUP name

[root@good /root]$
_


인용 또는 결과 :

(1)DROP GROUP 그룹명;

[root@good /root]$
_


자 그룹을 생성 하였다면, 지지고 뽑고 다하셨을 겁니다. 그렇다면 설정된 그룹을 리스트를 보고 싶으시다면,

인용 또는 결과 :

postgres=# 
\dg
     List of groups
 Group name  | Group ID 
-------------+----------
 grp_openphp |      100
(1 row)

postgres=# 
select * from pg_group;
   groname   | grosysid | grolist 
-------------+----------+---------
 grp_openphp |      100 | {100}
(1 row)

[root@good /root]$
_


명령이 총 2가지 방법이 존재하는데 하나는 psql의 메타코맨드 명령인 \dg와 PostgreSQL의 카탈로그 테이블인
pg_group을 직접 쿼리로 열어 보는 것입니다.

psql의 Meta Command명령어와 PostgreSQL의 카라로그 테이블에 관한것은 다른장에서 설명드립니다.

위에서 보시는바와 같이 pg_group에는 필드가 총 3개가 있습니다.
grouname은 그룹명 , groupsysid는 SYSID , grouplist는 해당 그룹에 속해진 계정의 SYSID입니다.

계정에 대한 리스트는 다음과 같습니다.

인용 또는 결과 :

postgres=# 
\du
                            List of users
   User name   | User ID |         Attributes         |    Groups     
---------------+---------+----------------------------+---------------
 openphp       |     100 | create database            | {grp_openphp}
 postgres      |       1 | superuser, create database | 
(2 rows)

postgres=# 
select * from pg_user;
    usename    | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig 
---------------+----------+-------------+----------+-----------+----------+----------+-----------
 postgres      |        1 | t           | t        | t         | ******** |          | 
 openphp       |      100 | t           | f        | f         | ******** |          | 
(2 rows)

[root@good /root]$
_


위와 같이 해당 계정에 대한 정보를 보실수 있습니다.




- CREATE USER - 

이번에는 계정 생성입니다. createdb 프로그램 실행때와는 다른부분이 더 있습니다.

인용 또는 결과 :

postgres=# \h CREATE USER
Command:     CREATE USER
De<script>ion: define a new database user account
Syntax:
CREATE USER name [ [ WITH ] option [ ... ] ]

where option can be:
    
      SYSID uid 
    | CREATEDB | NOCREATEDB
    | CREATEUSER | NOCREATEUSER
    | IN GROUP groupname [, ...]
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'abstime'

[root@good /root]$
_


SYSID uid 

    SYSID는 위에어도 설명드린바와 같이 내부적인 숫자형 번호입니다. 역시 지정없으면 100부터 +1씩 증가합니다.
    기본적으로 마스터유저인 postgres에 대해서는 1번이 부여되어 있습니다. 왜! Super User니깐.!


CREATEDB | NOCREATEDB

    생성하는 계정에 대해 디비생성 권한을 부여할것이냐 말것이냐. 기본은 NOCREATEDB

    CREATEDB     : 디비생성권한 부여함
    NOCREATEDB   : 디비생성권한 부여않함


CREATEUSER | NOCREATEUSER

    생성하는 계정이 또다른 계정을 생성할수 있는 권한 부여여부. 기본은 NOCREATEUSER

    CREATEUSER   : 유저생성권한 부여함
    NOCREATEUSER : 유저생성권한 부여함


IN GROUP groupname [, ...]

    해당 유저가 속할 그룹을 표기하는 것으로 한계정이 여러개의 그룹에 포함될수 있습니다.
    ,(콤마) 구분으로 이름을 나열해주시면 됩니다.


[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'

    패스워드 설정으로 기본적으로 유저 생성에는 패스워드가 기본이 되지 않습니다. 반드시 추가 해주시는 걸 잊지마십시요.

    ENCRYPTED    : 패스워드를 MD5로 암호화 해서 입력 (복호화가 불가능하므로 추후 변경이외에는 알수없음)
    UNENCRYPTED  : 패스워드를 일반 문자열로 입력 (일단 문자열로 패스워드 열람이 가능)

    PASSWORD '신규패스워드'


VALID UNTIL 'abstime'

    이 설정은 System Account에서도 있는설정으로 계정에 설정된 패스워드에 대한 만료시간을 두어
    설정한 날짜시간까지만 그 패스워드를 쓸수있고, 그 이후로는 이전 패스워드로는 접근이 불가능 하게 됩니다.

    유용할때가 있습니다. 월단위 비용결재를 받는다거나할때. 설정은 UNIX TIMESTAMP방식으로 입력하며,
    만약에 2005-01-01 로 넣으면 2005년 01월 01시 00분 00초 로 자동 설정됩니다.

    설정하지 않을시에는 무한정 쓰실수 있습니다.



인용 또는 결과 :

postgres=# 
create user openphp NOCREATEDB NOCREATEUSER IN GROUP grp_openphp ENCRYPTED PASSWORD 'dkanrjsk'  VALID UNTIL '2005-01-01 03:43';
CREATE USER
postgres=# select * from pg_user;
    usename    | usesysid | usecreatedb | usesuper | usecatupd |  passwd  |        valuntil        | useconfig 
---------------+----------+-------------+----------+-----------+----------+------------------------+-----------
 postgres      |        1 | t           | t        | t         | ******** |                        | 
 openphp       |      100 | f           | f        | f         | ******** | 2005-01-01 03:43:00+09 | 
(2 rows)





postgres-test=# \du
                            List of users
   User name   | User ID |         Attributes         |    Groups     
---------------+---------+----------------------------+---------------
 openphp       |     100 |                            | {grp_openphp}
 postgres      |       1 | superuser, create database | 
 test          |     101 |                            | 
(3 rows)


postgres=# 
create user test;
CREATE USER
postgres=# 
select * from pg_user;
    usename    | usesysid | usecreatedb | usesuper | usecatupd |  passwd  |        valuntil        | useconfig 
---------------+----------+-------------+----------+-----------+----------+------------------------+-----------
 postgres      |        1 | t           | t        | t         | ******** |                        | 
 openphp       |      100 | f           | f        | f         | ******** | 2005-01-01 03:43:00+09 | 
 test          |      101 | f           | f        | f         | ******** |                        | 
(3 rows)

postgres-test=# [/b]select * from pg_shadow;[/b]
    usename    | usesysid | usecreatedb | usesuper | usecatupd |               passwd                |        valuntil        | useconfig 
---------------+----------+-------------+----------+-----------+-------------------------------------+------------------------+-----------
 postgres      |        1 | t           | t        | t         | md5******************************** |                        | 
 openphp       |      100 | f           | f        | f         | md5******************************** | 2005-01-01 03:43:00+09 | 
 test          |      101 | f           | f        | f         |                                     |                        | 
(3 rows)

[root@good /root]$
_


위 create user SQL문중에 NOCREATEDB,NOCREATEUSER 부분은 사실 않넣어 주어도 자동으로 부여되게 때문에 권한을 줄때만 넣어주시면 됩니다.
VALID UNTIL에 년-월-일 시:분 까지만 넣었지만 실제는 자동으로 00과 Time Zone 번호가 들어가게 됩니다.

실제적으로 insert into 로 직접 입력할수 있으나 그건 추천드리지 않는 부분이고, 추후 호환성 문제를 생각 하신다면 처음부터 
손가락에 길을 들여 놓지 않는것이 상책입니다.(주의!. 시스템 카탈로그 테이블을 절때 건들지 않는 것이 상책.!)


- ALTER USER -

Alter User는 User의 설정값을 변경하는 SQL문으로 CREATE USER와는 달리 2가지의 추가적인 옵션을 제공합니다.

인용 또는 결과 :

postgres=# \h 
ALTER USER 
Command:     ALTER USER
De<script>ion: change a database user account
Syntax:
ALTER USER name [ [ WITH ] option [ ... ] ]

where option can be:

    CREATEDB | NOCREATEDB
    | CREATEUSER | NOCREATEUSER 
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' 
    | VALID UNTIL 'abstime'

ALTER USER name RENAME TO newname

ALTER USER name SET parameter { TO | = } { value | DEFAULT }
ALTER USER name RESET parameter

[root@good /root]$
_


나머지 사항은 CREATE USER와 동일하기때문에 추가설명을 드리지 않겠습니다.

ALTER USER name RENAME TO newname

    이 SQL문은 기존의 계정명을 변경하는 것입니다.


ALTER USER name SET parameter { TO | = } { value | DEFAULT }

    이부분은 SET SQL문에 대한 장에서 알려드리는 부분이지만 PostgreSQL에서는 PGDATA/postgresql.conf에서
    모든 셋팅을 하게 됩니다. 하지만 PostgreSQL에서는 유저별로 postgresql.conf에서 시스템과
    직접적인 셋팅을 제외한 부분에 대해서는 유저별로 셋팅이 가능합니다. 그것을 설정하는 것으로
    CREATE USER에서 지원이 없다는것이 약간은 아이러니하지만 유저별로 sequence scan은 false로 둔다거나하는것을

    셋팅할수 있는 것으로 이 부분은 SET SQL문에 대한 설명하는 장에서 다시 알려드리겠습니다.


ALTER USER name RESET parameter

    이 부분도 위와 마찬가지인데 위에서 설정한값을 Reset하는 것으로 SET SQL문에 대해 설명하는 장에서 알려드리겠습니다.




- DROP USER -

인용 또는 결과 :

postgres=# \h 
DROP USER  
Command:     DROP USER
De<script>ion: remove a database user account
Syntax:
DROP USER name

[root@good /root]$
_


역시 지우는 건 매우 간단하다. 
DROP USER 유저명 만으로 간단히 해결이 됩니다.
다만 맨 위에어도 언급했듯이 해당 계정과 연결된 디비가 있는 경우
에러가 나므로 약간의 주의를 요합니다.

[Top]
No.
제목
작성자
작성일
조회
5918view를 이용한 column 접근 권한 제어
김상기
2005-02-22
8725
5878initdb 없이 template1 데이터베이스 새로 만들기
김상기
2005-02-08
9647
5870pg_restore 사용법 [1]
김상기
2005-02-04
22449
5854PostgreSQL 8 : Group,User관리
조성준
2005-01-30
20554
5853PostgreSQL 8 : pg_hda.conf - 보정중 [2]
조성준
2005-01-30
11415
5845PostgreSQL 8 : Install -한글부분수정 [3]
조성준
2005-01-28
28017
5834PostgreSQL 8 : PostgreSQL.conf 설정하기 [2]
조성준
2005-01-25
17177
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.459초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다