[Developer] #573 normalize vector access whitelist

This commit is contained in:
devmrko
2026-06-30 16:33:59 +09:00
parent a9c58fa854
commit e0fbf1e0c5
8 changed files with 234 additions and 43 deletions

View File

@@ -268,15 +268,20 @@ public class OrdsProbeService {
}
static String vectorEffectiveSql(ProtectedObject object, String predicate) {
String vpdFilter = isAllowAllPredicate(predicate) ? "" : " AND (" + predicate + ")";
return "SELECT chunk_id, document_id, chunk_no, title, chunk_text, source_uri, tech_tag, score"
+ " FROM (SELECT d.chunk_id, d.document_id, d.chunk_no, d.title, d.chunk_text,"
+ " d.source_uri, d.tech_tag, VECTOR_DISTANCE(d.embedding, TO_VECTOR(:embedding), COSINE) AS score"
+ " FROM " + object.owner() + "." + object.objectName() + " d"
+ " WHERE d.embedding IS NOT NULL AND (" + predicate + ")"
+ " WHERE d.embedding IS NOT NULL" + vpdFilter
+ " ORDER BY score) ranked_chunks"
+ " WHERE ROWNUM <= LEAST(GREATEST(NVL(:row_limit, 10), 1), 100)";
}
private static boolean isAllowAllPredicate(String predicate) {
return predicate != null && predicate.trim().replaceAll("\\s+", " ").equals("1 = 1");
}
private String findVpdPredicate(String bearerToken, ProtectedObject object) {
try {
return jdbcTemplate.execute((ConnectionCallback<String>) connection -> {