docs/13: roteiro completo confirmado (Add Column) + investigação APEX_DATA_LOADING
Consolida tudo confirmado tela a tela nesta sessão: - Formulário 'Data Profile Column' completo (Column Type, Name, Data Type, Length condicional, Selector Type/Selector, Value Transformation). - Tabela final das 11 colunas do CMDB com Data Type/Length exatos, e das 22 de vulnerabilidades (incluindo a máscara de timestamp confirmada contra FIRST_OBSERVED/LAST_SEEN/RESURFACED_DATE já existentes). - Correção: ATTESTED_FLAG (e os 3 flags de vulnerabilidade) não usam Value Transformation - conversão true/false -> 1/0 é manual no Excel, mesma regra já documentada no capítulo 10 pra COFRE/SOX/etc. - Nova nota: investigação do pacote público APEX_DATA_LOADING (owner real APEX_240200.WWV_FLOW_DATA_LOADING_API) - só tem GET_FILE_PROFILE/LOAD_DATA (executar carga), não serve pra criar/editar colunas de um Data Profile. Não reabrir essa via. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -127,6 +127,20 @@ coluna, e um `JSON_OBJECT(*)` sobre o staging resolve isso corretamente.</p>
|
||||
arquivo, exatamente como já faz hoje em cada release.</p>
|
||||
</div>
|
||||
|
||||
<div class="callout danger">
|
||||
<div class="callout-title">Investigado e descartado: não existe atalho via SQL pra adicionar colunas</div>
|
||||
<p>Cogitamos usar o pacote público <code>APEX_DATA_LOADING</code> pra adicionar as colunas novas
|
||||
via script, em vez de formulário por formulário. Confirmado contra o dicionário de dados
|
||||
(<code>all_synonyms</code>/<code>all_arguments</code>, owner real
|
||||
<code>APEX_240200.WWV_FLOW_DATA_LOADING_API</code>): esse pacote só tem
|
||||
<code>GET_FILE_PROFILE</code> e <code>LOAD_DATA</code> — os dois servem pra <strong>executar</strong>
|
||||
uma carga usando uma Data Load Definition que já existe, não pra criar/editar colunas de um
|
||||
perfil. Não tem <code>CREATE_COLUMN_DEFINITION</code> nem equivalente. Conclusão: adicionar
|
||||
colunas num Data Profile só dá pra fazer pela UI do App Builder (como já vínhamos fazendo) ou
|
||||
pela API interna <code>wwv_flow_imp_shared</code> (descartada por risco, ver nota da seção
|
||||
anterior). Não vale reabrir essa investigação.</p>
|
||||
</div>
|
||||
|
||||
<div class="callout warning">
|
||||
<div class="callout-title">Passo a passo confirmado tela a tela — sem adivinhação</div>
|
||||
<p>A versão anterior deste capítulo sugeria "subir um arquivo de amostra para detectar colunas
|
||||
@@ -182,26 +196,86 @@ coluna, e um `JSON_OBJECT(*)` sobre o staging resolve isso corretamente.</p>
|
||||
(<code>DL_TECH_CMDB_V2</code> → <code>TB_26AI_TECH_CMDB</code>,
|
||||
<code>DL_TECH_VULNERABILIDADE_V3</code> → <code>TB_26AI_TECH_V2</code>).</p>
|
||||
|
||||
<div class="callout info">
|
||||
<div class="callout-title">A partir daqui, ainda não confirmado — preciso da próxima tela</div>
|
||||
<p>O próximo passo é abrir <code>DL_TECH_CMDB_V2</code> (ou a de vulnerabilidades) e clicar em
|
||||
<strong>Edit Data Profile</strong> pra adicionar as colunas novas da seção 3/4 — ainda não vi
|
||||
essa tela. Assim que tiver o print, completo o roteiro.</p>
|
||||
<ol start="11">
|
||||
<li>Abra <code>DL_TECH_CMDB_V2</code> → <strong>Edit Data Profile</strong> (confirma: mostra <code>XLSX</code>, 16 colunas — as originais, intactas).</li>
|
||||
<li>No topo da tela do Data Profile ("Settings"), o campo <strong>Name</strong> ainda mostra <code>Copy of DL_TECH_CMDB_V1</code> (é um objeto separado da Data Load Definition, o rename da etapa 9 não alcança aqui) — troca pra <code>DL_TECH_CMDB_V2</code> por organização (não é obrigatório funcionalmente).</li>
|
||||
<li>Pra cada coluna nova: botão verde <strong>Add Column</strong> → preenche o formulário → <strong>Create</strong>. Campos confirmados do formulário: <strong>Column Type</strong> (deixar <code>Data</code>), <strong>Name</strong>, <strong>Data Type</strong>, <strong>Length</strong> (só aparece pra Varchar2), <strong>Selector Type</strong> (deixar <code>Name</code>), <strong>Selector</strong> (mesmo texto do Name), <strong>Value Transformation</strong> (deixar <code>None</code> — ver nota abaixo).</li>
|
||||
</ol>
|
||||
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<tr><th>Name</th><th>Data Type</th><th>Length</th></tr>
|
||||
<tr><td><code>INSTALL_STATUS</code></td><td>Varchar2</td><td>100</td></tr>
|
||||
<tr><td><code>LIFE_CYCLE_STAGE_STATUS</code></td><td>Varchar2</td><td>100</td></tr>
|
||||
<tr><td><code>ASSIGNED_TO</code></td><td>Varchar2</td><td>255</td></tr>
|
||||
<tr><td><code>ATTESTATION_SCORE</code></td><td>Number</td><td>—</td></tr>
|
||||
<tr><td><code>ATTESTATION_STATUS</code></td><td>Varchar2</td><td>100</td></tr>
|
||||
<tr><td><code>ATTESTED_BY</code></td><td>Varchar2</td><td>255</td></tr>
|
||||
<tr><td><code>LOCATION</code></td><td>Varchar2</td><td>255</td></tr>
|
||||
<tr><td><code>ASSET_TAG</code></td><td>Varchar2</td><td>100</td></tr>
|
||||
<tr><td><code>U_SERVER_ROLE</code></td><td>Varchar2</td><td>255</td></tr>
|
||||
<tr><td><code>ATTESTED_FLAG</code></td><td>Varchar2</td><td>10</td></tr>
|
||||
<tr><td><code>U_FIM_DO_SUPORTE</code></td><td>Date</td><td>— (Format mask <code>DD-MM-YYYY</code>, Has Time Zone <strong>desligado</strong>)</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<p><strong>Confirmado:</strong> total final 27 colunas (16 originais + 11 novas).</p>
|
||||
|
||||
<div class="callout danger">
|
||||
<div class="callout-title">ATTESTED_FLAG: sem Value Transformation — conversão é manual no Excel</div>
|
||||
<p>Cogitei usar <strong>Value Transformation = Replace</strong> pra converter
|
||||
<code>Verdadeiro(a)/Falso(a)</code> em <code>1/0</code> automaticamente, mas o <code>Replace</code>
|
||||
só aceita <strong>um par</strong> busca/troca — não dá pra mapear dois valores diferentes numa
|
||||
coluna só. Verificando como as colunas booleanas que já existem (<code>COFRE</code>,
|
||||
<code>SOX</code>, <code>TENABLE</code>, <code>SIEM</code>, <code>EDR</code>,
|
||||
<code>APPLIANCE</code>, <code>É_VIRTUAL</code>) resolvem isso: nenhuma usa Value Transformation —
|
||||
a conversão sempre foi manual, feita na planilha Excel antes de subir (já documentado no
|
||||
capítulo 10). <code>ATTESTED_FLAG</code> segue a mesma regra: quem preparar a carga precisa
|
||||
converter a coluna <code>attested</code> de <code>Verdadeiro(a)</code>/<code>Falso(a)</code> pra
|
||||
<code>1</code>/<code>0</code> no Excel antes de subir. Nota também: essa coluna ficou como
|
||||
<code>VARCHAR2(10)</code> no banco (Passo 1), não <code>NUMBER</code> como as outras flags — uma
|
||||
inconsistência minha que não vale reabrir o Passo 1 pra corrigir, já que texto '1'/'0' funciona
|
||||
numa VARCHAR2 sem problema.</p>
|
||||
</div>
|
||||
|
||||
<p>Depois de ter as colunas novas adicionadas na cópia (roteiro a completar), os ajustes que já sei
|
||||
que vão ser necessários, pela tabela da seção 3/4:</p>
|
||||
<ul>
|
||||
<li><code>DEFINITION_CVSS3_BASE_SCORE</code>, <code>DEFINITION_EPSS_SCORE</code>, <code>PORT</code>, <code>TIME_TO_FIX</code>, <code>ATTESTATION_SCORE</code> → tipo <code>NUMBER</code>.</li>
|
||||
<li><code>LAST_FIXED</code>, <code>VULN_SLA_DATE</code>, <code>PATCH_PUBLISHED</code>, <code>VULNERABILITY_PUBLISHED</code> → data/timestamp.</li>
|
||||
<li><code>U_FIM_DO_SUPORTE</code> → data, máscara <code>DD-MM-YYYY</code>.</li>
|
||||
<li><code>ATTESTED_FLAG</code>, <code>CISA_KEV_FLAG</code>, <code>EXPLOITED_BY_MALWARE_FLAG</code>, <code>EXPLOITED_BY_NESSUS_FLAG</code> → transformação de valor <code>Verdadeiro(a)/true → 1</code>, <code>Falso(a)/false → 0</code> (mesma convenção já usada em <code>SOX</code>/<code>COFRE</code>/<code>TENABLE</code>/<code>SIEM</code>).</li>
|
||||
</ul>
|
||||
<h2>4.1 Mapeamento — DL_TECH_VULNERABILIDADE_V3 (repete o mesmo processo, 22 colunas)</h2>
|
||||
<p>Mesmo roteiro das etapas 11-13 acima, agora em <code>DL_TECH_VULNERABILIDADE_V3</code> (perfil
|
||||
original tem 18 colunas — confirmado, bate exatamente com o capítulo 10). Os 3 campos-flag também
|
||||
seguem a regra de conversão manual no Excel (não usar Value Transformation), igual
|
||||
<code>ATTESTED_FLAG</code> acima.</p>
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
<tr><th>Name</th><th>Data Type</th><th>Length / Config</th></tr>
|
||||
<tr><td><code>DEFINITION_CVE</code></td><td>Varchar2</td><td>4000</td></tr>
|
||||
<tr><td><code>DEFINITION_DESCRIPTION</code></td><td>Clob</td><td>—</td></tr>
|
||||
<tr><td><code>DEFINITION_SOLUTION</code></td><td>Clob</td><td>—</td></tr>
|
||||
<tr><td><code>DEFINITION_SYNOPSIS</code></td><td>Varchar2</td><td>4000</td></tr>
|
||||
<tr><td><code>SOFTWARE_VULNS</code></td><td>Clob</td><td>—</td></tr>
|
||||
<tr><td><code>DEFINITION_CVSS3_BASE_SCORE</code></td><td>Number</td><td>—</td></tr>
|
||||
<tr><td><code>DEFINITION_CVSS3_BASE_VECTOR</code></td><td>Varchar2</td><td>255</td></tr>
|
||||
<tr><td><code>DEFINITION_CPE</code></td><td>Varchar2</td><td>4000</td></tr>
|
||||
<tr><td><code>DEFINITION_EPSS_SCORE</code></td><td>Number</td><td>—</td></tr>
|
||||
<tr><td><code>CISA_KEV_FLAG</code></td><td>Number</td><td>— (true/false→1/0 manual no Excel)</td></tr>
|
||||
<tr><td><code>EXPLOITED_BY_MALWARE_FLAG</code></td><td>Number</td><td>— (idem)</td></tr>
|
||||
<tr><td><code>EXPLOITED_BY_NESSUS_FLAG</code></td><td>Number</td><td>— (idem)</td></tr>
|
||||
<tr><td><code>PORT</code></td><td>Number</td><td>—</td></tr>
|
||||
<tr><td><code>ASSET_OPERATING_SYSTEM</code></td><td>Varchar2</td><td>255</td></tr>
|
||||
<tr><td><code>LAST_FIXED</code></td><td>Timestamp with time zone</td><td>máscara <code>YYYY"-"MM"-"DD"T"HH24":"MI:SS.FF9TZR</code>, Has Time Zone <strong>ligado</strong> — mesma config já usada em <code>FIRST_OBSERVED</code>/<code>LAST_SEEN</code>/<code>RESURFACED_DATE</code> do perfil original</td></tr>
|
||||
<tr><td><code>TIME_TO_FIX</code></td><td>Number</td><td>—</td></tr>
|
||||
<tr><td><code>VULN_SLA_DATE</code></td><td>Timestamp with time zone</td><td>mesma máscara/config acima</td></tr>
|
||||
<tr><td><code>PATCH_PUBLISHED</code></td><td>Timestamp with time zone</td><td>mesma máscara/config acima</td></tr>
|
||||
<tr><td><code>VULNERABILITY_PUBLISHED</code></td><td>Timestamp with time zone</td><td>mesma máscara/config acima</td></tr>
|
||||
<tr><td><code>SOURCE_SCAN</code></td><td>Varchar2</td><td>100</td></tr>
|
||||
<tr><td><code>SCAN_ID</code></td><td>Varchar2</td><td>255</td></tr>
|
||||
<tr><td><code>SCAN_TARGET</code></td><td>Varchar2</td><td>255</td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<p><strong>Esperado:</strong> total final 40 colunas (18 originais + 22 novas).</p>
|
||||
|
||||
<p>Os arquivos <code>templates/sample_DL_TECH_CMDB_V2.xlsx</code> e
|
||||
<code>templates/sample_DL_TECH_VULNERABILIDADE_V3.xlsx</code> continuam úteis, só que num momento
|
||||
diferente do que eu disse antes: não servem pra criar o perfil, servem como planilha de teste (só
|
||||
o cabeçalho — adicione 5-10 linhas de ativos <code>AM...</code> com dado real antes de subir) pra
|
||||
validar a carga depois que o perfil estiver pronto, na seção 6.</p>
|
||||
<code>templates/sample_DL_TECH_VULNERABILIDADE_V3.xlsx</code> servem como planilha de teste (só o
|
||||
cabeçalho — adicione 5-10 linhas de ativos <code>AM...</code> com dado real, já com os flags
|
||||
convertidos pra 1/0, antes de subir) pra validar a carga depois que os dois perfis estiverem
|
||||
prontos, na seção 6.</p>
|
||||
|
||||
<h2>6. Como validar</h2>
|
||||
<p>Depois de rodar uma carga de teste pequena:</p>
|
||||
|
||||
Reference in New Issue
Block a user