68f85f3736
- 첫 로그인 비번 강제 변경 (RUN_082): FORCE_PASSWORD_CHANGE 컬럼, ForcePasswordChangeGuardFilter, /auth/change-password API + 페이지 - 테넌트 일관성 가드: TenantConsistencyGuardFilter 로 JWT.company_code ↔ 서브도메인 company_code 대조, CompanyResolver 가 (db_name, company_code) 동시 반환 - 회사 관리 확장 (RUN_083 audit log, RUN_084 lifecycle 컬럼): CompanyAdmin/Members/Templates/Lifecycle/AuditLog 서비스 + CompanyMgmtController + SuperAdminGuard - 회사 관리 UI: CompanyAccordionRow 탭화 + 모달 4종 (AdminInfo/Deactivate/Delete/RecopyTemplates) + AuditLogDrawer + csvExport - 프로비저닝 마법사: force_password_change 토글 반영 - 프론트 인증: storage 이벤트 멀티탭 동기화, 403 errorCode (PASSWORD_CHANGE_REQUIRED / CROSS_TENANT_REJECTED / TENANT_NOT_RESOLVED) 전역 리다이렉트 - 기타: StartupSchemaMigrator, OS별 도커 기동 스크립트, CLAUDE.md 트래킹 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.2 KiB
2.2 KiB
082 마이그레이션 — 첫 로그인 비밀번호 강제 변경 컬럼
작성일: 2026-04-24
작성자: gbpark
관련: 회사 프로비저닝 FORCE_PW_CHANGE 토글 실제 동작 구현
목적
Step 3 마법사의 "첫 로그인 시 비밀번호 변경 강제" 토글이 실제로 동작하도록,
USER_INFO 테이블에 플래그 컬럼을 추가한다.
- 프로비저닝 시 관리자 계정 생성 시점에 플래그 true 로 INSERT
- 로그인 시 플래그 true 면 프론트가
/change-password로 강제 이동 - 비밀번호 변경 성공 시 플래그 false 로 클리어
추가 컬럼
| 컬럼 | 타입 | 기본값 | 용도 |
|---|---|---|---|
FORCE_PASSWORD_CHANGE |
BOOLEAN | FALSE |
true 면 로그인 성공 직후 비밀번호 변경 강제. 변경 완료 시 false 로 갱신 |
PASSWORD_CHANGED_AT는 일단 추가하지 않음 — 필요해지면 후속 마이그레이션.
SQL
-- 082: 첫 로그인 비밀번호 강제 변경 플래그
ALTER TABLE USER_INFO
ADD COLUMN IF NOT EXISTS FORCE_PASSWORD_CHANGE BOOLEAN DEFAULT FALSE;
실행
1) 메타 DB (= 프로비저닝 스키마 원본)
신규 회사 DB 는 SchemaCopier 가 메타 DB 를 pg_dump --schema-only 로 복제하므로,
메타 DB 에만 컬럼 추가하면 이후 신규 회사는 자동 반영된다.
psql -h 183.99.177.40 -U postgres -d invyone <<'SQL'
ALTER TABLE USER_INFO
ADD COLUMN IF NOT EXISTS FORCE_PASSWORD_CHANGE BOOLEAN DEFAULT FALSE;
SQL
2) 기존 회사 DB 들
이미 프로비저닝된 회사 DB 에도 동일 ALTER 필요. DB 이름 목록은 메타 DB 의
COMPANY_MNG.DB_NAME 에서 확인:
psql -h 183.99.177.40 -U postgres -d invyone -c \
"SELECT DB_NAME FROM COMPANY_MNG WHERE DB_STATUS='active';"
각 DB 에 대해:
for DB in $(psql -h 183.99.177.40 -U postgres -d invyone -t -c \
"SELECT DB_NAME FROM COMPANY_MNG WHERE DB_STATUS='active'"); do
psql -h 183.99.177.40 -U postgres -d "$DB" -c \
"ALTER TABLE USER_INFO ADD COLUMN IF NOT EXISTS FORCE_PASSWORD_CHANGE BOOLEAN DEFAULT FALSE;"
done
롤백
ALTER TABLE USER_INFO DROP COLUMN IF EXISTS FORCE_PASSWORD_CHANGE;