GrantForge

    아키텍처와 보안

    멀티 테넌시와 데이터 격리

    테넌트가 데이터를 격리하는 방식, 플랫폼이 공유하는 데이터, 테넌트 간 작업의 제약.

    격리 방식

    플랫폼이 공유하는 데이터를 제외하면 모든 비즈니스 테이블에는 tenant_id 열이 있습니다. 요청이 들어오면 필터 체인이 로그인한 계정의 테넌트를 현재 스레드에 바인딩하고, Hibernate의 테넌트 필터가 자동으로 쿼리에 테넌트 조건을 추가하며, 쓸 때는 tenant_id를 자동으로 채웁니다. 비즈니스 코드는 테넌트 조건을 "잊어버릴" 수 없습니다.

    테넌트를 넘나들어야 하는 몇 가지 경우(예: 로그인 시 사용자 이름으로 계정을 찾기, 테넌트별 계정 수 세기, 백그라운드 예약 작업)는 반드시 명시적으로 "시스템 컨텍스트"에 들어가야 하므로, 코드 리뷰에서 한눈에 찾을 수 있습니다.

    공유와 독립

    플랫폼 공유 테넌트별 독립
    애플리케이션과 리소스 카탈로그, API 카탈로그, OAuth 클라이언트, 플러그인 계정, 부서, 사용자 그룹, 직위, 역할, 권한 부여, 배정, 데이터와 필드 정책, 직무 분리, 요청과 검토, 신원 소스, 데이터 서비스, 감사

    사용자 이름은 플랫폼 전체에서 유일하므로, 로그인할 때 테넌트를 선택할 필요가 없습니다.

    플랫폼 테넌트

    플랫폼 테넌트는 초기화 시 생성되며 비활성화할 수 없습니다. 이 테넌트의 관리자는 플랫폼이 공유하는 데이터와 다른 테넌트를 관리하며, 플랫폼 테넌트의 역할만 "전체 테넌트" 데이터 범위를 사용할 수 있습니다.

    ID

    모든 기본 키는 TSID입니다. 64비트, 시간 순서대로 증가하며, 클러스터 안에서는 노드 번호로 유일성이 보장됩니다. TSID는 JavaScript가 정확히 나타낼 수 있는 정수보다 크므로, JSON에서는 항상 문자열로 전달합니다. 클러스터의 각 인스턴스는 서로 다른 GRANTFORGE_ID_NODE가 필요합니다.

    GitHub에서 이 페이지 편집