제가 schemagate를 위해 발표했던 모든 수치는 저의 자체 테스트에서 나온 것입니다. 이번 달에 SIGMOD'27 논문이 정확히 schemagate가 존재하는 문제를 위한 공개 벤치마크(Benchmarking Text-to-SQL under Role-Based Access Control)를 발표했습니다. 그래서 저는 이를 실행해 보았습니다.
테스트 과정
각 질문에는 역할(role)과 그 역할이 읽을 수 있는 열 목록이 함께 제공됩니다. 만약 답변에 해당 역할이 볼 수 없는 열이 필요하다면, 올바른 응답은 "죄송합니다. 답변할 수 없습니다."여야 합니다. 저자들은 자체 평가 도구로 점수를 매겼습니다. 저는 이 코드를 한 줄도 변경하지 않았습니다.
그들의 주요 발견은 제런 종류의 도구들에게 불편한 내용입니다. 제한된 열을 단순히 숨기기만 해도 모델이 여전히 답변합니다. 그들은 남아 있는 열들로부터 무언가를 짜깁기하여 답을 만듭니다. BIRD에서, 그들이 제시한 최선의 "스키마 숨기기" 설정조차도 거절해야 할 질문의 27%에 대해 답변했습니다.
schemagate가 다르게 하는 점
모든 질문에 대해 세 가지 일이 발생합니다:
- 역할의 정책이 가시성(visibility)이 됩니다. 모델은 숨겨진 테이블이나 열, 심지어 그 이름조차 볼 수 없습니다.
- 한 줄의 지침을 통해 모델에게 자신의 뷰가 부분적이라는 것을 알리지만, 무엇이 부족한지는 말하지 않습니다. 만약 질문에 필요한 데이터가 보이지 않는다면, 즉흥적으로 답변하는 대신 거절해야 합니다.
- 모든 쿼리는 실행되기 전에 범위 확인(scope check)을 통과합니다. 정책 외부의 어떤 것에도 접근하려는 SQL은 거부됩니다.
결과
논문의 최고 성능 기록 모델(Claude Sonnet 4.5)과 동일한 조건으로, 5회 시도, 저자들의 점수입니다:
| AC-F1 | 답변했어야 할 경우 (answered when it should refuse) | 금지된 데이터를 읽은 SQL (SQL that read forbidden data) |
|---|
| BIRD, schemagate | 90.1 | 5.4% | 0 |
| ... | | | |
BIRD에서는 논문의 최고 설정보다 우수합니다. Spider에서는 동등합니다. 어느 경우에도 어떤 쿼리도 역할이 볼 수 없는 데이터를 읽지 않았습니다. 범위 확인은 이를 측정된 비율이 아닌 보장으로 만듭니다.
그리고 논문의 최고 설정은 모델에게 전체 스키마와 정책을 보여줍니다. schemagate는 모델이 제한된 것을 결코 보지 못하게 하면서도 이 수치를 얻어냅니다.
범위 확인(scope check)을 제거하자 BIRD에서 잘못된 답변 비율이 두 배로 증가했습니다 (5.4%에서 11.3%로). 한 줄 알림(one-line notice)은 100개의 질문에 대해 테스트되었는데, 알림이 없을 때는 잘못된 답변 비율이 16%였으나, 알림을 적용했을 때는 5%였습니다.
한 가지 놀라운 점은: 모델에게 BIRD의 컬럼 설명을 제공하는 것이 상황을 더 나쁘게 만들었다는 것입니다. 보이는 컬럼에 대한 더 좋은 주석(notes)이 오히려 모델이 거부했어야 할 질문들에 대해 우회 경로를 찾도록 도왔습니다.
솔직한 주의사항 (The honest caveats)
- 저는 테스트 세트의 일부인 100개의 BIRD 질문에 대해 알림의 문구를 선택했습니다. Spider는 어떤 선택에도 관여하지 않았으므로, 이 결과가 두 가지 중 더 깨끗합니다.
- 하나의 모델은 논문에서 열세 개를 테스트했습니다.
- 제가 사용하는 BIRD 데이터베이스는 2024년 버전이며, 논문에서는 2025년 버전을 사용했습니다.
이 알림은 schemagate 1.6.0부터 기본적으로 제공됩니다. 실행을 재현하려면 benchmarks/rbac_text2sql.py를 사용하고, 평가자 보고서는 benchmarks/results/rbac/에서 확인할 수 있습니다.
pip install schemagate · GitHub