Files
vpd-permission-poc/database/adb/45_dds_mcp_local_end_user_test.sql

60 lines
2.1 KiB
SQL

-- ============================================================
-- 45_dds_mcp_local_end_user_test.sql
-- Catalog-level acceptance test for 44. Run as ADMIN.
-- The SSE/JDBC context assertion is performed by dds_vector_search after
-- the OCI IAM database-access token configuration is supplied.
-- ============================================================
WHENEVER SQLERROR EXIT SQL.SQLCODE
SET ECHO OFF
SET FEEDBACK ON
SET LINESIZE 220
SET PAGESIZE 200
DECLARE
v_missing_map NUMBER;
v_missing_end_user NUMBER;
v_missing_role NUMBER;
BEGIN
SELECT COUNT(*) INTO v_missing_map
FROM cb_app_user u
LEFT JOIN cb_dds_end_user_map m ON m.application_user_id = u.user_id
WHERE u.active = 'Y'
AND (m.application_user_id IS NULL OR m.publish_status <> 'PUBLISHED');
SELECT COUNT(*) INTO v_missing_end_user
FROM cb_dds_end_user_map m
JOIN cb_app_user u ON u.user_id = m.application_user_id AND u.active = 'Y'
LEFT JOIN dba_end_users eu ON eu.username = m.end_user_name
WHERE eu.username IS NULL;
SELECT COUNT(*) INTO v_missing_role
FROM cb_dds_end_user_map m
JOIN cb_app_user u ON u.user_id = m.application_user_id AND u.active = 'Y'
LEFT JOIN dba_data_role_grants rg
ON rg.grantee = m.end_user_name
AND rg.data_role = m.data_role_name
WHERE rg.data_role IS NULL;
IF v_missing_map <> 0 OR v_missing_end_user <> 0 OR v_missing_role <> 0 THEN
RAISE_APPLICATION_ERROR(-20944,
'DDS MCP publish validation failed: map=' || v_missing_map
|| ', end_user=' || v_missing_end_user || ', data_role=' || v_missing_role);
END IF;
END;
/
COLUMN user_name FORMAT A22
COLUMN end_user_name FORMAT A18
COLUMN data_role_name FORMAT A24
COLUMN grant_name FORMAT A34
SELECT u.user_name, m.end_user_name, m.data_role_name, m.grant_name,
CASE WHEN dg.grant_name IS NULL THEN 'DEFAULT_DENY' ELSE 'PUBLISHED' END AS vector_access
FROM cb_dds_end_user_map m
JOIN cb_app_user u ON u.user_id = m.application_user_id
LEFT JOIN dba_data_grants dg ON dg.grant_name = m.grant_name
WHERE u.active = 'Y'
ORDER BY m.application_user_id;
PROMPT Catalog validation passed. Next: call /dds/mcp/sse and dds_vector_search with a valid MCP Bearer.
EXIT;