103 lines
4.0 KiB
SQL
103 lines
4.0 KiB
SQL
-- ============================================
|
|
-- Dewey 애플리케이션 데이터베이스 설정 스크립트
|
|
-- ============================================
|
|
-- 이 스크립트는 postgres superuser로 실행해야 합니다.
|
|
-- 실행 방법: psql -U postgres -f database_setup.sql
|
|
|
|
-- 1. dewey 사용자 생성 (이미 존재하면 스킵)
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT FROM pg_user WHERE usename = 'dewey') THEN
|
|
CREATE USER dewey WITH PASSWORD '0bk1rWu98mGl5ea3';
|
|
RAISE NOTICE 'dewey 사용자가 생성되었습니다.';
|
|
ELSE
|
|
RAISE NOTICE 'dewey 사용자가 이미 존재합니다.';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- 2. dewey_memory 데이터베이스 생성 (이미 존재하면 스킵)
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT FROM pg_database WHERE datname = 'dewey_memory') THEN
|
|
CREATE DATABASE dewey_memory OWNER dewey;
|
|
RAISE NOTICE 'dewey_memory 데이터베이스가 생성되었습니다.';
|
|
ELSE
|
|
RAISE NOTICE 'dewey_memory 데이터베이스가 이미 존재합니다.';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- 3. dewey_memory 데이터베이스에 연결
|
|
\c dewey_memory
|
|
|
|
-- 3. pgvector 확장 설치 (superuser 권한 필요)
|
|
CREATE EXTENSION IF NOT EXISTS vector;
|
|
|
|
-- 4. dewey 사용자에게 필요한 최소 권한만 부여
|
|
-- (보안을 위해 최소한의 권한만 부여)
|
|
GRANT CONNECT ON DATABASE dewey_memory TO dewey;
|
|
GRANT USAGE ON SCHEMA public TO dewey;
|
|
GRANT CREATE ON SCHEMA public TO dewey;
|
|
|
|
-- 5. 기존 테이블/시퀀스에 대한 권한 부여
|
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO dewey;
|
|
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO dewey;
|
|
|
|
-- 6. 향후 생성될 테이블/시퀀스에 대한 기본 권한 설정
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO dewey;
|
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO dewey;
|
|
|
|
-- 7. dewey 사용자가 확장을 생성할 수 없도록 명시적으로 제한
|
|
-- (확장 생성은 superuser만 가능하므로 이미 제한되어 있음)
|
|
-- 하지만 혹시 모를 권한을 명시적으로 제거
|
|
REVOKE CREATE ON DATABASE dewey_memory FROM dewey;
|
|
|
|
-- 8. dewey 사용자가 다른 사용자를 생성하거나 권한을 부여할 수 없도록 제한
|
|
-- (이미 dewey는 일반 사용자이므로 불필요하지만 명시적으로 확인)
|
|
DO $$
|
|
BEGIN
|
|
-- dewey가 superuser인지 확인하고 제거 (혹시 모를 경우 대비)
|
|
IF EXISTS (
|
|
SELECT 1 FROM pg_user WHERE usename = 'dewey' AND usesuper = true
|
|
) THEN
|
|
ALTER USER dewey WITH NOSUPERUSER;
|
|
RAISE NOTICE 'dewey 사용자의 superuser 권한이 제거되었습니다.';
|
|
ELSE
|
|
RAISE NOTICE 'dewey 사용자는 이미 일반 사용자입니다.';
|
|
END IF;
|
|
|
|
-- dewey가 데이터베이스를 생성할 수 없도록 제한
|
|
IF EXISTS (
|
|
SELECT 1 FROM pg_user WHERE usename = 'dewey' AND usecreatedb = true
|
|
) THEN
|
|
ALTER USER dewey WITH NOCREATEDB;
|
|
RAISE NOTICE 'dewey 사용자의 CREATEDB 권한이 제거되었습니다.';
|
|
ELSE
|
|
RAISE NOTICE 'dewey 사용자는 이미 CREATEDB 권한이 없습니다.';
|
|
END IF;
|
|
|
|
-- dewey가 다른 사용자를 생성할 수 없도록 제한
|
|
IF EXISTS (
|
|
SELECT 1 FROM pg_user WHERE usename = 'dewey' AND usecreaterole = true
|
|
) THEN
|
|
ALTER USER dewey WITH NOCREATEROLE;
|
|
RAISE NOTICE 'dewey 사용자의 CREATEROLE 권한이 제거되었습니다.';
|
|
ELSE
|
|
RAISE NOTICE 'dewey 사용자는 이미 CREATEROLE 권한이 없습니다.';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- 9. 권한 확인
|
|
\echo '=== dewey 사용자 권한 확인 ==='
|
|
\du dewey
|
|
|
|
\echo '=== public 스키마 권한 확인 ==='
|
|
\dn+ public
|
|
|
|
\echo '=== pgvector 확장 확인 ==='
|
|
SELECT extname, extversion FROM pg_extension WHERE extname = 'vector';
|
|
|
|
\echo '=== 스크립트 실행 완료 ==='
|
|
\echo 'dewey 사용자는 이제 최소한의 권한만 가지고 있습니다.'
|
|
\echo '애플리케이션은 테이블/인덱스 생성 및 데이터 조작만 가능합니다.'
|
|
|