일반 사용자 계정에서는 GRANT OPTION(또는 WITH GRANT OPTION)을 없애고,
필요한 “권한 위임 기능”은 ROLE을 통해서만 하도록 구조를 바꾸면 됩니다.

 

1. GRANT OPTION 가진 일반 사용자 계정 찾기

DBA / 시스템 계정이 아닌데 Grant_priv='Y'인 계정이 바로 조치 대상

 

사용자별 부여된 Role 확인 방법

SHOW GRANTS FOR '<User>'@'<Host>';

 

 

2. 일반 사용자에게서 GRANT OPTION 제거

조치 대상 계정에 대해 직접 가진 GRANT OPTION을 제거

 

 

3. ROLE 기반 구조로 재설계 (WITH GRANT OPTION은 ROLE에만)

이제 권한 자체는 ROLE에 부여하고,
일반 사용자는 ROLE만 부여받아서 쓰도록 만드는 단계

 

4. 일반 사용자에게는 ROLE만 부여 (직접 GRANT OPTION 없음)

 

 

5. 검증 단계 (정책 준수 여부 확인)

 

 

 

 

 

 

 

 

 

 

 

'#DEV > 데이터베이스' 카테고리의 다른 글

INNER JOIN과 OUTER JOIN의 차이  (0) 2021.08.23
관계대수와 관계해석  (0) 2021.07.15
데이터 무결성  (0) 2021.07.14
데이터베이스의 설계 단계  (0) 2021.07.14
스키마 정의 및 종류  (0) 2021.07.14

 JPA에서 복합키를 사용하려면 별도의 ID 클래스가 필요

package com.poc_lotte_chatbot.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.IdClass;
import jakarta.persistence.Table;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@IdClass(ResocTopicRelId.class)
@Entity
@Table(name = "resoc_topic_rel", schema = "chatbi")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class ResocTopicRel {

    @Column(name = "org_party_id", nullable = false, length = 10)
    private String orgPartyId;

    @Id
    @Column(name = "resoc_id", nullable = false, precision = 10)
    private BigDecimal resocId;

    @Column(name = "resoc_gubun_code", nullable = false, length = 5)
    private String resocGubunCode;

    @Column(name = "resoc_name", nullable = false, length = 100)
    private String resocName;

    @Column(name = "prompt_topic_type", length = 100)
    private String promptTopicType;

    @Id
    @Column(name = "hist_str_date", nullable = false)
    private LocalDateTime histStrDate;

    @Id
    @Column(name = "hist_end_date", nullable = false)
    private LocalDateTime histEndDate;
}

역할:
  - 실제 데이터베이스 테이블을 매핑하는 엔티티 클래스
  - 테이블의 모든 컬럼(PK + 일반 컬럼)을 포함

  특징:
  - @IdClass(ResocTopicRelId.class): 복합키 클래스를 지정
  - @Id 어노테이션이 3개: 복합키를 구성하는 각 필드에 표시
  - 일반 컬럼들도 포함: orgPartyId, resocGubunCode, resocName, promptTopicType

  쓰임:
  - CRUD 작업의 대상
  - 비즈니스 로직에서 데이터를 담는 객체
  - Repository를 통한 데이터 조회/저장

 

package com.poc_lotte_chatbot.entity;

import jakarta.persistence.Embeddable;
import lombok.*;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class ResocTopicRelId implements Serializable {
    private BigDecimal resocId;
    private LocalDateTime histStrDate;
    private LocalDateTime histEndDate;
}

  역할:
  - 테이블의 복합 기본키(Composite Primary Key)를 표현하는 클래스
  - resoc_topic_rel 테이블의 PK는 3개 컬럼으로 구성: (resoc_id, hist_str_date, hist_end_date)
  - JPA에서 복합키를 사용하려면 별도의 ID 클래스가 필요

  특징:
  - @Embeddable: 다른 엔티티에 포함될 수 있는 클래스임을 표시
  - Serializable 구현: JPA 복합키 요구사항
  - equals()와 hashCode() 구현 필요: @EqualsAndHashCode로 자동 생성

  쓰임:
  - 엔티티의 고유 식별자 역할
  - 엔티티 조회, 비교, 해싱 작업에 사용
  - Repository에서 findById(ResocTopicRelId id) 형태로 사용

'#DEV > JPA' 카테고리의 다른 글

JPA 메서드 네이밍 규칙  (0) 2025.10.31
Spring Data JPA Query Method  (0) 2025.10.23

+ Recent posts