{"id":47974231,"url":"https://github.com/seonghobae/pg_user_management","last_synced_at":"2026-04-04T10:52:30.951Z","repository":{"id":321149299,"uuid":"1081689973","full_name":"seonghobae/pg_user_management","owner":"seonghobae","description":null,"archived":false,"fork":false,"pushed_at":"2025-10-31T10:38:47.000Z","size":158,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2026-04-04T10:52:30.439Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seonghobae.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-23T06:33:48.000Z","updated_at":"2025-10-28T02:35:58.000Z","dependencies_parsed_at":"2025-10-28T04:19:41.579Z","dependency_job_id":"c3a9015c-2539-475c-83e7-7c3a47493b0d","html_url":"https://github.com/seonghobae/pg_user_management","commit_stats":null,"previous_names":["seonghobae/pg_user_management"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/seonghobae/pg_user_management","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonghobae%2Fpg_user_management","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonghobae%2Fpg_user_management/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonghobae%2Fpg_user_management/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonghobae%2Fpg_user_management/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seonghobae","download_url":"https://codeload.github.com/seonghobae/pg_user_management/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seonghobae%2Fpg_user_management/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31397055,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-04T10:52:30.514Z","updated_at":"2026-04-04T10:52:30.728Z","avatar_url":"https://github.com/seonghobae.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PostgreSQL User Management Admin Tool\n\nPostgreSQL 사용자 및 권한을 관리하기 위한 CLI 도구입니다.\n\n## 기능\n\n1. **사용자 관리**\n   - 사용자 생성 (일반 사용자 또는 superuser)\n   - 사용자 수정 (권한 변경, 비밀번호 변경)\n   - 사용자 삭제\n   - 사용자 목록 조회\n\n2. **인증 방법 지원**\n   - MD5\n   - SCRAM-SHA-256 (기본값, 권장)\n\n3. **권한 관리**\n   - 데이터베이스 레벨 권한 (CONNECT)\n   - 스키마 레벨 권한 (USAGE)\n   - 테이블 레벨 권한 (SELECT, INSERT, UPDATE, DELETE, ALL)\n   - 특정 테이블 또는 스키마 내 모든 테이블에 권한 부여\n   - 스키마 내 모든 함수에 EXECUTE 권한 자동 부여\n\n4. **pg_hba.conf 관리** ⭐ NEW!\n   - HBA 규칙 추가/삭제\n   - HBA 규칙 목록 조회\n   - PostgreSQL 설정 자동 리로드\n   - 백업 자동 생성\n\n5. **세부 권한 제어**\n   - 테이블별 세부 권한 설정\n   - 함수에 대한 전체 액세스 권한\n\n## 빌드\n\n```bash\ngo build -o pg_user_admin ./cmd/pg_user_admin\n```\n\n크로스 플랫폼 빌드:\n\n```bash\n# Linux\nGOOS=linux GOARCH=amd64 go build -o pg_user_admin-linux ./cmd/pg_user_admin\n\n# macOS\nGOOS=darwin GOARCH=amd64 go build -o pg_user_admin-macos ./cmd/pg_user_admin\n\n# Windows\nGOOS=windows GOARCH=amd64 go build -o pg_user_admin.exe ./cmd/pg_user_admin\n```\n\n## 환경 변수 설정\n\nPostgreSQL 연결 정보는 환경 변수로 설정합니다:\n\n```bash\nexport PGHOST=localhost          # PostgreSQL 호스트 (기본값: localhost)\nexport PGPORT=5432               # PostgreSQL 포트 (기본값: 5432)\nexport PGUSER=postgres           # PostgreSQL 관리자 사용자 (기본값: postgres)\nexport PGPASSWORD=yourpassword   # PostgreSQL 관리자 비밀번호 (필수)\nexport PGDATABASE=postgres       # PostgreSQL 데이터베이스 (기본값: postgres)\nexport PGSSLMODE=disable         # SSL 모드 (기본값: disable)\n```\n\n## 사용 방법\n\n### 1. 사용자 생성\n\n일반 사용자 생성 (SCRAM-SHA-256 인증):\n```bash\n./pg_user_admin create-user -username=myuser -password=secret -auth=scram-sha-256\n```\n\nSuperuser 생성:\n```bash\n./pg_user_admin create-user -username=admin -password=secret -superuser -auth=scram-sha-256\n```\n\nMD5 인증 방식으로 사용자 생성:\n```bash\n./pg_user_admin create-user -username=myuser -password=secret -auth=md5\n```\n\n로그인 불가능한 사용자 생성:\n```bash\n./pg_user_admin create-user -username=myuser -password=secret -login=false\n```\n\n### 2. 사용자 수정\n\n비밀번호 변경:\n```bash\n./pg_user_admin modify-user -username=myuser -password=newsecret -auth=scram-sha-256\n```\n\nSuperuser 권한 부여:\n```bash\n./pg_user_admin modify-user -username=myuser -superuser\n```\n\nSuperuser 권한 제거:\n```bash\n./pg_user_admin modify-user -username=myuser -no-superuser\n```\n\n로그인 권한 제거:\n```bash\n./pg_user_admin modify-user -username=myuser -no-login\n```\n\n### 3. 사용자 삭제\n\n```bash\n./pg_user_admin delete-user -username=myuser\n```\n\n### 4. 사용자 목록 조회\n\n```bash\n./pg_user_admin list-users\n```\n\n### 5. 권한 부여 (GRANT)\n\n특정 테이블에 SELECT, INSERT 권한 부여:\n```bash\n./pg_user_admin grant -username=myuser -schema=public -table=users -privileges=SELECT,INSERT\n```\n\n스키마 내 모든 테이블에 SELECT 권한 부여:\n```bash\n./pg_user_admin grant -username=myuser -schema=public -privileges=SELECT\n```\n\n스키마 내 모든 테이블에 모든 권한 부여:\n```bash\n./pg_user_admin grant -username=myuser -schema=public -privileges=ALL\n```\n\n스키마 내 모든 함수에 EXECUTE 권한 부여 및 테이블 권한 부여:\n```bash\n./pg_user_admin grant -username=myuser -schema=public -privileges=SELECT,INSERT,UPDATE,DELETE -grant-functions\n```\n\n데이터베이스 접속 권한 부여:\n```bash\n./pg_user_admin grant -username=myuser -database=mydb\n```\n\n### 6. 권한 회수 (REVOKE)\n\n특정 테이블에서 권한 회수:\n```bash\n./pg_user_admin revoke -username=myuser -schema=public -table=users -privileges=INSERT,UPDATE\n```\n\n스키마 내 모든 테이블에서 권한 회수:\n```bash\n./pg_user_admin revoke -username=myuser -schema=public -privileges=ALL\n```\n\n### 7. 사용자 권한 조회\n\n```bash\n./pg_user_admin list-privileges -username=myuser\n```\n\n### 8. pg_hba.conf 관리\n\nHBA 규칙 목록 조회:\n```bash\n./pg_user_admin hba-list\n```\n\nHBA 규칙 추가 (특정 네트워크에서 사용자 접속 허용):\n```bash\n./pg_user_admin hba-add -user=myuser -database=mydb -address=192.168.1.0/24 -method=scram-sha-256 -type=host\n```\n\nHBA 규칙 추가 (로컬 연결):\n```bash\n./pg_user_admin hba-add -user=myuser -database=mydb -method=scram-sha-256 -type=local\n```\n\nHBA 규칙 삭제:\n```bash\n./pg_user_admin hba-remove -user=myuser -database=mydb -address=192.168.1.0/24 -method=scram-sha-256 -type=host\n```\n\nPostgreSQL 설정 리로드 (HBA 규칙 활성화):\n```bash\n./pg_user_admin hba-reload\n```\n\n## 일반적인 사용 시나리오\n\n### 시나리오 1: 읽기 전용 사용자 생성\n\n```bash\n# 1. 사용자 생성\n./pg_user_admin create-user -username=readonly -password=secret -auth=scram-sha-256\n\n# 2. 데이터베이스 접속 권한 부여\n./pg_user_admin grant -username=readonly -database=mydb\n\n# 3. 스키마 내 모든 테이블에 SELECT 권한 및 함수 실행 권한 부여\n./pg_user_admin grant -username=readonly -schema=public -privileges=SELECT -grant-functions\n```\n\n### 시나리오 2: 특정 테이블만 관리할 수 있는 사용자 생성\n\n```bash\n# 1. 사용자 생성\n./pg_user_admin create-user -username=appuser -password=secret -auth=scram-sha-256\n\n# 2. 데이터베이스 접속 권한 부여\n./pg_user_admin grant -username=appuser -database=mydb\n\n# 3. users 테이블에 모든 권한 부여\n./pg_user_admin grant -username=appuser -schema=public -table=users -privileges=ALL\n\n# 4. products 테이블에 SELECT, INSERT 권한 부여\n./pg_user_admin grant -username=appuser -schema=public -table=products -privileges=SELECT,INSERT\n\n# 5. 모든 함수 실행 권한 부여\n./pg_user_admin grant -username=appuser -schema=public -grant-functions\n```\n\n### 시나리오 3: 완전한 권한을 가진 관리자 사용자 생성\n\n```bash\n# Superuser로 생성\n./pg_user_admin create-user -username=dbadmin -password=secret -superuser -auth=scram-sha-256\n```\n\n## 보안 고려사항\n\n1. **인증 방법**: 가능하면 SCRAM-SHA-256를 사용하세요 (MD5보다 안전)\n2. **비밀번호**: 강력한 비밀번호를 사용하세요\n3. **최소 권한 원칙**: 필요한 최소한의 권한만 부여하세요\n4. **환경 변수**: PGPASSWORD는 안전하게 관리하세요 (.env 파일 사용 권장)\n\n## 프로젝트 구조\n\n```\npg_user_management/\n├── cmd/\n│   └── pg_user_admin/\n│       └── main.go              # CLI 진입점\n├── internal/\n│   ├── auth/\n│   │   └── config.go            # 인증 방법 관리\n│   ├── database/\n│   │   └── connection.go        # 데이터베이스 연결\n│   ├── permission/\n│   │   └── manager.go           # 권한 관리\n│   └── user/\n│       └── manager.go           # 사용자 관리\n├── pkg/\n│   └── config/\n│       └── config.go            # 설정 관리\n├── go.mod\n└── README.md\n```\n\n## 요구사항\n\n- Go 1.16 이상\n- PostgreSQL 9.6 이상\n- 관리자 권한을 가진 PostgreSQL 계정\n\n## 라이선스\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseonghobae%2Fpg_user_management","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseonghobae%2Fpg_user_management","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseonghobae%2Fpg_user_management/lists"}