https://github.com/seonghobae/pg_user_management
https://github.com/seonghobae/pg_user_management
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/seonghobae/pg_user_management
- Owner: seonghobae
- Created: 2025-10-23T06:33:48.000Z (8 months ago)
- Default Branch: develop
- Last Pushed: 2025-10-31T10:38:47.000Z (8 months ago)
- Last Synced: 2026-04-04T10:52:30.439Z (2 months ago)
- Language: Go
- Size: 154 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# PostgreSQL User Management Admin Tool
PostgreSQL 사용자 및 권한을 관리하기 위한 CLI 도구입니다.
## 기능
1. **사용자 관리**
- 사용자 생성 (일반 사용자 또는 superuser)
- 사용자 수정 (권한 변경, 비밀번호 변경)
- 사용자 삭제
- 사용자 목록 조회
2. **인증 방법 지원**
- MD5
- SCRAM-SHA-256 (기본값, 권장)
3. **권한 관리**
- 데이터베이스 레벨 권한 (CONNECT)
- 스키마 레벨 권한 (USAGE)
- 테이블 레벨 권한 (SELECT, INSERT, UPDATE, DELETE, ALL)
- 특정 테이블 또는 스키마 내 모든 테이블에 권한 부여
- 스키마 내 모든 함수에 EXECUTE 권한 자동 부여
4. **pg_hba.conf 관리** ⭐ NEW!
- HBA 규칙 추가/삭제
- HBA 규칙 목록 조회
- PostgreSQL 설정 자동 리로드
- 백업 자동 생성
5. **세부 권한 제어**
- 테이블별 세부 권한 설정
- 함수에 대한 전체 액세스 권한
## 빌드
```bash
go build -o pg_user_admin ./cmd/pg_user_admin
```
크로스 플랫폼 빌드:
```bash
# Linux
GOOS=linux GOARCH=amd64 go build -o pg_user_admin-linux ./cmd/pg_user_admin
# macOS
GOOS=darwin GOARCH=amd64 go build -o pg_user_admin-macos ./cmd/pg_user_admin
# Windows
GOOS=windows GOARCH=amd64 go build -o pg_user_admin.exe ./cmd/pg_user_admin
```
## 환경 변수 설정
PostgreSQL 연결 정보는 환경 변수로 설정합니다:
```bash
export PGHOST=localhost # PostgreSQL 호스트 (기본값: localhost)
export PGPORT=5432 # PostgreSQL 포트 (기본값: 5432)
export PGUSER=postgres # PostgreSQL 관리자 사용자 (기본값: postgres)
export PGPASSWORD=yourpassword # PostgreSQL 관리자 비밀번호 (필수)
export PGDATABASE=postgres # PostgreSQL 데이터베이스 (기본값: postgres)
export PGSSLMODE=disable # SSL 모드 (기본값: disable)
```
## 사용 방법
### 1. 사용자 생성
일반 사용자 생성 (SCRAM-SHA-256 인증):
```bash
./pg_user_admin create-user -username=myuser -password=secret -auth=scram-sha-256
```
Superuser 생성:
```bash
./pg_user_admin create-user -username=admin -password=secret -superuser -auth=scram-sha-256
```
MD5 인증 방식으로 사용자 생성:
```bash
./pg_user_admin create-user -username=myuser -password=secret -auth=md5
```
로그인 불가능한 사용자 생성:
```bash
./pg_user_admin create-user -username=myuser -password=secret -login=false
```
### 2. 사용자 수정
비밀번호 변경:
```bash
./pg_user_admin modify-user -username=myuser -password=newsecret -auth=scram-sha-256
```
Superuser 권한 부여:
```bash
./pg_user_admin modify-user -username=myuser -superuser
```
Superuser 권한 제거:
```bash
./pg_user_admin modify-user -username=myuser -no-superuser
```
로그인 권한 제거:
```bash
./pg_user_admin modify-user -username=myuser -no-login
```
### 3. 사용자 삭제
```bash
./pg_user_admin delete-user -username=myuser
```
### 4. 사용자 목록 조회
```bash
./pg_user_admin list-users
```
### 5. 권한 부여 (GRANT)
특정 테이블에 SELECT, INSERT 권한 부여:
```bash
./pg_user_admin grant -username=myuser -schema=public -table=users -privileges=SELECT,INSERT
```
스키마 내 모든 테이블에 SELECT 권한 부여:
```bash
./pg_user_admin grant -username=myuser -schema=public -privileges=SELECT
```
스키마 내 모든 테이블에 모든 권한 부여:
```bash
./pg_user_admin grant -username=myuser -schema=public -privileges=ALL
```
스키마 내 모든 함수에 EXECUTE 권한 부여 및 테이블 권한 부여:
```bash
./pg_user_admin grant -username=myuser -schema=public -privileges=SELECT,INSERT,UPDATE,DELETE -grant-functions
```
데이터베이스 접속 권한 부여:
```bash
./pg_user_admin grant -username=myuser -database=mydb
```
### 6. 권한 회수 (REVOKE)
특정 테이블에서 권한 회수:
```bash
./pg_user_admin revoke -username=myuser -schema=public -table=users -privileges=INSERT,UPDATE
```
스키마 내 모든 테이블에서 권한 회수:
```bash
./pg_user_admin revoke -username=myuser -schema=public -privileges=ALL
```
### 7. 사용자 권한 조회
```bash
./pg_user_admin list-privileges -username=myuser
```
### 8. pg_hba.conf 관리
HBA 규칙 목록 조회:
```bash
./pg_user_admin hba-list
```
HBA 규칙 추가 (특정 네트워크에서 사용자 접속 허용):
```bash
./pg_user_admin hba-add -user=myuser -database=mydb -address=192.168.1.0/24 -method=scram-sha-256 -type=host
```
HBA 규칙 추가 (로컬 연결):
```bash
./pg_user_admin hba-add -user=myuser -database=mydb -method=scram-sha-256 -type=local
```
HBA 규칙 삭제:
```bash
./pg_user_admin hba-remove -user=myuser -database=mydb -address=192.168.1.0/24 -method=scram-sha-256 -type=host
```
PostgreSQL 설정 리로드 (HBA 규칙 활성화):
```bash
./pg_user_admin hba-reload
```
## 일반적인 사용 시나리오
### 시나리오 1: 읽기 전용 사용자 생성
```bash
# 1. 사용자 생성
./pg_user_admin create-user -username=readonly -password=secret -auth=scram-sha-256
# 2. 데이터베이스 접속 권한 부여
./pg_user_admin grant -username=readonly -database=mydb
# 3. 스키마 내 모든 테이블에 SELECT 권한 및 함수 실행 권한 부여
./pg_user_admin grant -username=readonly -schema=public -privileges=SELECT -grant-functions
```
### 시나리오 2: 특정 테이블만 관리할 수 있는 사용자 생성
```bash
# 1. 사용자 생성
./pg_user_admin create-user -username=appuser -password=secret -auth=scram-sha-256
# 2. 데이터베이스 접속 권한 부여
./pg_user_admin grant -username=appuser -database=mydb
# 3. users 테이블에 모든 권한 부여
./pg_user_admin grant -username=appuser -schema=public -table=users -privileges=ALL
# 4. products 테이블에 SELECT, INSERT 권한 부여
./pg_user_admin grant -username=appuser -schema=public -table=products -privileges=SELECT,INSERT
# 5. 모든 함수 실행 권한 부여
./pg_user_admin grant -username=appuser -schema=public -grant-functions
```
### 시나리오 3: 완전한 권한을 가진 관리자 사용자 생성
```bash
# Superuser로 생성
./pg_user_admin create-user -username=dbadmin -password=secret -superuser -auth=scram-sha-256
```
## 보안 고려사항
1. **인증 방법**: 가능하면 SCRAM-SHA-256를 사용하세요 (MD5보다 안전)
2. **비밀번호**: 강력한 비밀번호를 사용하세요
3. **최소 권한 원칙**: 필요한 최소한의 권한만 부여하세요
4. **환경 변수**: PGPASSWORD는 안전하게 관리하세요 (.env 파일 사용 권장)
## 프로젝트 구조
```
pg_user_management/
├── cmd/
│ └── pg_user_admin/
│ └── main.go # CLI 진입점
├── internal/
│ ├── auth/
│ │ └── config.go # 인증 방법 관리
│ ├── database/
│ │ └── connection.go # 데이터베이스 연결
│ ├── permission/
│ │ └── manager.go # 권한 관리
│ └── user/
│ └── manager.go # 사용자 관리
├── pkg/
│ └── config/
│ └── config.go # 설정 관리
├── go.mod
└── README.md
```
## 요구사항
- Go 1.16 이상
- PostgreSQL 9.6 이상
- 관리자 권한을 가진 PostgreSQL 계정
## 라이선스
MIT License