方向從「意義相同(additive 雙欄)」改為「名稱完全相同(直接 rename)」。本表只列需改名或新增的欄位,未異動的不列。必填等級依 5 份 schema 的 required 抽出。
無衝突,直接 rename 成 OSCAL 名。
撞 PK id 或 Python 保留字 class/type。
新表/欄直接用 OSCAL 原名,無歷史包袱。
直接把現欄位改成 OSCAL 名。屬 breaking(要同步改 mapper / service / 查詢 / FE),但語言層無阻礙。
| 表 | 現名 → 異動後名稱 | OSCAL 出處 | 必填 |
|---|---|---|---|
| 多個(有 uuid 的 assembly) ssps / ssp 子表 / assessment_plans / assessment_results / result_datas / findings / oscal_parties / oscal_locations / catalogs / profiles … | uid → uuid | 各 assembly 的 uuid | Req |
ssp_control_implementations | control_identifier → control_id | ssp: implemented-requirement.control-id | Req |
ssp_control_implementation_objectives | statement_identifier → statement_id | ssp: statement.statement-id | Req |
assessment_result_datas | started_at → start | ar: result.start | Req |
assessment_result_datas | completed_at → end | ar: result.end | Opt |
assessment_result_evidences | reference_url → href | ar: relevant-evidence.href | Opt |
catalog_groups | description → title(現在 description 存的是顯示名 = OSCAL title) | catalog: group.title | Req |
.uid 都要改。(2) 只改「OSCAL 真的有 uuid」的表;catalog 的 group / control / part / parameter OSCAL 用 id token、沒有 uuid,它們的 uid 是我們內部發明的,不要改成 uuid(否則對不到 OSCAL)。這些欄位想用 OSCAL 原名會撞 PK 或 Python 語法。除非付出代價(改 PK 名),否則只能用近似名。
id token 撞我們的整數 PK id| 表 . 現欄位 | OSCAL 出處(想要的精準名) | 必填 | 為何擋住 / 折衷 |
|---|---|---|---|
catalog_controls.control_id(存 "AC-1") | catalog: control.id | Req | 精準名是 id → 撞整數 PK。折衷保留 control_id |
catalog_groups.name(存代碼) | catalog: group.id | Opt | 同上 → 折衷 group_id(仍非精準 id) |
catalog_control_parameters.param_id | catalog: parameter.id | Opt | 同上 → 保留 param_id |
oscal_roles.role_id | common: role.id | Req | 同上 → 保留 role_id |
| catalog_control_parts(無此欄) | catalog: part.id | Opt | 新增也只能 part_id(不能 id) |
id 全表改名(如 row_id / pk),讓 id 空出來給 OSCAL token。代價極大:動到每張表 PK、所有 relationship/FK、所有 .id 查詢、jedi-oscal + BE + FE。需你決定值不值得。| 表 . 現欄位 | OSCAL 出處(想要的精準名) | 必填 | 為何擋住 / 折衷 |
|---|---|---|---|
oscal_props.prop_class | common: property.class | Opt | class 是 Python 保留字,不能當屬性名 → 保留 prop_class(或 DB 欄叫 class、ORM 屬性仍 prop_class) |
oscal_parties.party_type | common: party.type | Req | type 會 shadow builtin → 不建議;保留 party_type |
ssp_components.component_type | ssp: system-component.type | Req | 同上 → 保留 component_type |
mapped_column("class", ...) 讓 DB 欄位名=class,但 ORM 屬性仍叫 prop_class。這樣 DB schema / 匯出 JSON key 精準,Python 端避開保留字——是 class/type 唯一可「DB 精準」的解。新表/欄沒有歷史包袱,欄位名一律取 OSCAL snake 原名(唯獨 token id 仍受 PK 牆限制,用 <entity>_id)。
| 新表 | OSCAL 原名欄位 | 必填 |
|---|---|---|
ssp_system_information_types | title Req · description Req · system(categorization) Opt* · base/selected(C/I/A impact) Opt* | — |
| security-impact-level(3 欄於 sys-char) | security_objective_confidentiality / _integrity / _availability | Opt* |
ssp_system_users | uuid Opt* · title · role_ids | — |
ssp_authorized_privileges | title Opt* · functions_performed Opt* | — |
ssp_by_components | component_uuid Opt* · uuid · description · implementation_status | — |
ssp_set_parameters | param_id Opt* · values Opt* | — |
ssp_diagrams | uuid Opt* · caption · description | — |
| 新表 | OSCAL 原名欄位 | 必填 |
|---|---|---|
assessment_result_finding_targets | type⚠ · target_id · status(state) · implementation_status | Req(finding 必填 target) |
assessment_result_observations | uuid · description · methods · collected | Opt* |
assessment_result_risks | uuid · title · description · statement · status | Opt* |
assessment_result_datas(補欄) | description(result.description) | Req |
| 新表 | OSCAL 原名欄位 | 必填 |
|---|---|---|
oscal_resources(back-matter) | uuid · title · description · rlink href · base64 value · citation text | Opt* |
oscal_hashes | value · algorithm | Opt* |
oscal_document_ids | identifier · scheme | Opt* |
oscal_revisions | version · title · published · last_modified · oscal_version | Opt* |
profile_imports | href · include_all · with_child_controls · matching | Req(profile 必填 imports) |
| import 欄(root 表) | import_profile / import_ssp / import_ap(OSCAL 為物件 import-*.href;扁平存 href 值) | Req |
finding_targets.type 與 set_parameters 的 values 等:若 ORM 屬性會撞 builtin(type/values),同牆 2 處理(DB 名精準、Python 屬性加後綴)。| 1 | PK id 那道牆:要不要為了精準把整數 PK 改名(row_id/pk)釋放 id?代價極大(全 codebase FK/查詢)。不改 → token-id 用 control_id/group_id 等近似名。 |
| 2 | class/type 牆:接受「DB 欄名精準、Python 屬性加後綴」(mapped_column("class") + 屬性 prop_class)嗎?這是唯一能讓 DB/匯出精準的解。 |
| 3 | uid → uuid 大改名:確認要做?成本最大(全 .uid 引用),且只改「OSCAL 有 uuid」的表。 |
| 4 | rename 是 breaking:每條改名都要同步 model / mapper / domain service / 查詢 / FE 欄位。建議與 FR-036 動表時一起做,並逐表驗證。 |