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를 사용할 수 없습니다.
- 파라미터화된 보안 뷰를 쿼리할 때는 제한사항이 있습니다. 자세한 내용은 쿼리 제한사항을 참고하세요.