fix #477: filter vpd targets by schema

This commit is contained in:
devmrko
2026-06-26 06:07:27 +09:00
parent cf46b4ddd1
commit 0b81d5b1a1
6 changed files with 84 additions and 14 deletions

View File

@@ -48,7 +48,10 @@
SELECT owner, object_name, object_type
FROM all_objects
WHERE object_type IN ('TABLE', 'VIEW')
AND owner IN (SELECT owner FROM managed_owners)
AND (
(#{owner,jdbcType=VARCHAR} IS NULL AND owner IN (SELECT owner FROM managed_owners))
OR owner = UPPER(#{owner,jdbcType=VARCHAR})
)
AND owner NOT IN ('SYS', 'SYSTEM', 'ORDS_METADATA', 'ORDS_PUBLIC_USER')
AND owner NOT LIKE 'APEX\_%' ESCAPE '\'
AND owner NOT LIKE 'C##%'

View File

@@ -16,6 +16,33 @@
<div class="alert alert-success" th:if="${successMessage}" th:text="${successMessage}">등록되었습니다.</div>
<div class="alert alert-danger" th:if="${errorMessage}" th:text="${errorMessage}">처리할 수 없습니다.</div>
<section class="content-band">
<div class="section-heading">
<div>
<h2>VPD 적용 대상 Schema</h2>
<p class="section-subtitle">개별 적용 드롭다운에 표시할 TABLE/VIEW 스키마를 선택합니다.</p>
</div>
<span class="badge text-bg-secondary" th:text="${#lists.size(vpdTargets)}">0</span>
</div>
<form method="get" action="/vpd-filter-policies" class="inline-form">
<label>
Schema
<select class="form-select form-select-sm" name="schemaOwner" onchange="this.form.submit()">
<option value="" th:selected="${selectedSchemaOwner == null || selectedSchemaOwner == ''}">관리 대상 스키마</option>
<option th:each="owner : ${formOptions.schemaOwners()}"
th:value="${owner}"
th:text="${owner}"
th:selected="${owner == selectedSchemaOwner}"></option>
<option th:if="${selectedSchemaOwner != null && selectedSchemaOwner != '' && !#lists.contains(formOptions.schemaOwners(), selectedSchemaOwner)}"
th:value="${selectedSchemaOwner}"
th:text="${selectedSchemaOwner + ' / 조회 가능한 객체 없음'}"
selected></option>
</select>
</label>
<button class="btn btn-sm rw-btn-secondary" type="submit">조회</button>
</form>
</section>
<section class="content-band">
<div class="section-heading">
<h2>Filter 등록/수정</h2>

View File

@@ -30,10 +30,27 @@
<div class="section-heading">
<div>
<h2>VPD 적용 대상 TABLE/VIEW</h2>
<p class="section-subtitle">Oracle DB catalog 기준의 TABLE/VIEW 목록입니다. ORDS는 이 객체를 HTTP로 서빙하는 별도 레이어입니다.</p>
<p class="section-subtitle">Oracle DB catalog 기준의 TABLE/VIEW 목록입니다. Schema를 선택하면 해당 스키마 객체를 조회합니다.</p>
</div>
<span class="badge text-bg-secondary" th:text="${#lists.size(vpdTargets)}">0</span>
</div>
<form method="get" action="/vpd-policies" class="inline-form mb-3">
<label>
Schema
<select class="form-select form-select-sm" name="schemaOwner" onchange="this.form.submit()">
<option value="" th:selected="${selectedSchemaOwner == null || selectedSchemaOwner == ''}">관리 대상 스키마</option>
<option th:each="owner : ${formOptions.schemaOwners()}"
th:value="${owner}"
th:text="${owner}"
th:selected="${owner == selectedSchemaOwner}"></option>
<option th:if="${selectedSchemaOwner != null && selectedSchemaOwner != '' && !#lists.contains(formOptions.schemaOwners(), selectedSchemaOwner)}"
th:value="${selectedSchemaOwner}"
th:text="${selectedSchemaOwner + ' / 조회 가능한 객체 없음'}"
selected></option>
</select>
</label>
<button class="btn btn-sm rw-btn-secondary" type="submit">조회</button>
</form>
<div class="table-responsive">
<table class="table table-sm align-middle">
<thead>