Cloud SQL의 파라미터화된 보안 뷰 개요

MySQL용 Cloud SQL의 파라미터화된 보안 뷰는 SQL을 지원하면서 애플리케이션에 데이터 보안 및 행 수준 액세스 제어를 제공합니다. 이러한 뷰는 데이터 값 추출(열에서 특정 데이터 부분을 가져오는 프로세스)을 지원하며 프롬프트 인젝션 공격으로부터 보호하는 데 도움이 됩니다. 파리미터화된 보안 뷰를 사용하면 최종 사용자가 액세스해야 하는 데이터만 보도록 하는 데 도움이 됩니다.

파라미터화된 보안 뷰는 MySQL 뷰의 확장 프로그램으로, 뷰 정의에서 애플리케이션별 이름이 지정된 뷰 파라미터를 사용할 수 있습니다. 이 기능은 쿼리와 명명된 파라미터의 값을 사용하는 인터페이스를 제공합니다. 뷰는 이러한 값으로 쿼리를 실행하며, 이 값은 쿼리 실행 전반에 사용됩니다.

파라미터화된 보안 뷰 예

다음 예시에서는 WHERE 절에 세션 변수를 추가하여 테이블에 파라미터화된 보안 뷰를 만드는 방법을 보여줍니다.

-- Create a view with a parameter

CREATE VIEW v_orders AS
SELECT * FROM orders
WHERE customer_id = @local_customer_id AND year >= @earliest_year;

그런 다음 뷰의 매개변수를 설정하고 쿼리를 실행할 수 있습니다.

-- Set the parameter and query

SELECT /*+ SET_VIEW_VARS(local_customer_id=5, earliest_year=2021) */ * FROM v_orders;

-- Or query through a stored procedure

CALL mysql.execute_parameterized_query(
    'SELECT * FROM db.v_orders',
    'local_customer_id = 5, earliest_year = 2021');

사용 사례

대규모 언어 모델 (LLM)은 민감한 데이터를 노출하는 SQL 쿼리를 생성할 수 있습니다.

파라미터화된 보안 뷰는 데이터베이스 수준에서 데이터 보안을 관리합니다. 특히 자연어에서 변환된 쿼리와 같이 신뢰할 수 없는 소스의 임시 쿼리를 관리합니다. 예를 들어 파라미터화된 보안 뷰를 사용하여 사용자가 '내 주문 보여줘'와 같은 자연어로 쿼리를 실행할 수 있는 애플리케이션에 데이터 보안을 제공할 수 있습니다.

파라미터화된 보안 뷰를 사용하여 MySQL용 Cloud SQL이 이 쿼리를 실행하는 방식에 다음 요구사항을 적용할 수 있습니다.

  • 쿼리는 데이터베이스 파라미터화된 보안 뷰에 나열된 데이터베이스 객체와 열만 읽습니다.
  • 쿼리는 쿼리를 제출한 사용자와 연결된 데이터베이스 행만 읽습니다. 반환된 행은 사용자의 테이블 행과 데이터 관계가 있습니다.

보안 및 액세스 제어 구성에 대한 자세한 내용은 파라미터화된 보안 뷰 사용을 참고하세요.

파라미터화된 보안 뷰는 최종 사용자가 데이터베이스 테이블에서 신뢰할 수 없는 쿼리(예: 자연어 쿼리)를 실행할 수 있을 때 발생하는 보안 위험을 완화하는 데 도움이 됩니다. 보안 위험에는 다음이 포함됩니다.

  • 사용자가 프롬프트 인젝션 공격을 제출하고 기본 모델을 조작하여 애플리케이션이 액세스할 수 있는 모든 데이터를 표시하려고 시도할 수 있습니다.
  • 자연어-SQL (NL2SQL) 모델이 데이터 보안상의 이유로 적절한 범위보다 더 넓은 SQL 쿼리를 생성할 수 있습니다. 이 보안 위험으로 인해 선의로 작성된 사용자 쿼리에 대한 응답에서 민감한 정보가 노출될 수 있습니다.

파라미터화된 보안 뷰를 사용하면 신뢰할 수 없는 쿼리가 데이터를 가져올 수 있는 테이블과 열을 정의할 수 있습니다. 이러한 뷰를 사용하면 개별 애플리케이션 사용자가 사용할 수 있는 행의 범위를 제한할 수 있습니다. 이러한 제한을 통해 사용자가 쿼리를 어떻게 작성하든 애플리케이션 사용자가 자연어 쿼리를 통해 볼 수 있는 데이터를 엄격하게 제어할 수도 있습니다.

예를 들어 고객 주문을 추적하는 애플리케이션이 있을 수 있습니다. 지원 에이전트가 애플리케이션에서 '고객 12345의 주문 상태는 뭐야?'라고 묻습니다. 이 시나리오에서 애플리케이션은 고객 ID를 기반으로 하는 세션 변수가 있는 파라미터화된 보안 뷰를 사용할 수 있습니다. 파라미터화된 보안 뷰는 고객 ID 12345에 연결되고 액세스할 수 있는 행만 반환하는 쿼리를 사용합니다.

파라미터화된 보안 뷰를 사용하면 개별 애플리케이션 사용자가 사용할 수 있는 행의 범위를 제한할 수 있습니다. 이 제어를 통해 사용자가 쿼리를 어떻게 작성하든 데이터 보안이 보장됩니다.

데이터 보안

파라미터화된 보안 뷰는 다음 방법을 사용하여 애플리케이션 개발자에게 데이터 보안 및 행 액세스 제어를 제공합니다.

  • MySQL 파라미터화된 보안 뷰는 악의적으로 선택된 함수와 연산자가 뷰가 작업을 완료할 때까지 행에서 값을 전달받지 못하도록 하여 행 수준 보안을 제공합니다.
  • 이름이 지정된 뷰 파라미터를 사용하면 값으로 파라미터화된 데이터베이스의 제한된 뷰를 허용할 수 있습니다. 값은 최종 사용자 인증과 같은 애플리케이션 수준 보안을 기반으로 애플리케이션에서 제공합니다.

  • 파라미터화된 뷰에 액세스하는 쿼리에 대한 추가 제한사항을 적용하여 지정된 파라미터 값을 기반으로 뷰에서 검사를 이스케이프하는 공격을 방지합니다. 자세한 내용은 쿼리 제한사항을 참고하세요.

사용자 관리 간소화

파라미터화된 보안 뷰를 사용하면 각 최종 사용자마다 별도의 데이터베이스 사용자나 역할을 만들어야 할 수도 있는 방식 대신 단일 데이터베이스 역할로 모든 최종 사용자를 지원할 수 있습니다. 이를 통해 각 최종 사용자가 자신의 데이터에만 액세스해야 하는 애플리케이션의 사용자 및 연결 관리를 간소화할 수 있습니다.

예를 들어 사용자가 특정 고객의 주문만 볼 수 있어야 하는 애플리케이션의 경우, 최종 사용자 식별자를 파라미터로 사용하는 단일 파라미터화된 보안 뷰를 정의할 수 있습니다. 이 뷰를 사용하면 기본 테이블이 아닌 뷰에 대한 액세스 권한이 있는 단일 데이터베이스 역할이 모든 사용자를 처리할 수 있으므로, 사용자 관리와 데이터베이스 연결이 간소화됩니다.

제한사항

  • 매개변수화된 보안 뷰는 MySQL용 Cloud SQL 버전 8.0.43 이상에서만 지원됩니다. 이전 버전의 MySQL에서 매개변수화된 보안 뷰를 만들려고 하면 Cloud SQL에서 오류를 반환합니다.

  • WHERE, HAVING 또는 ON 절 외부에서는 변수를 지정할 수 없습니다.

  • 파라미터화된 보안 뷰에서는 EXPLAIN를 사용할 수 없습니다.

  • 파라미터화된 보안 뷰를 쿼리할 때는 제한사항이 있습니다. 자세한 내용은 쿼리 제한사항을 참고하세요.

다음 단계