使用者介面遮罩

本節所述的功能可用來取得以純文字形式儲存在資料庫中的資料,並先將值遮罩後再對使用者 (或外部系統) 呈現。此功能包括讓部分使用者能夠使用安全性組態來檢視未遮罩的資料。系統允許將不同的遮罩規則套用至不同的欄位。例如,遮罩信用卡號碼的方式可以與社會安全號碼不同。

下列主題說明如何遮罩欄位值。

識別要遮罩的資料

識別以純文字形式儲存但向使用者顯示時應遮罩的資料。例如,想像您已識別信用卡號碼和人員的聯邦身分證字號 (例如,在美國為社會安全號碼或稱 SSN)。每個識別的欄位可在整個系統的不同使用者介面中顯示和維護,但指定欄位的遮罩規則則可能是統一的,不論資料的顯示位置為何。

無法遮罩主索引鍵。無法設定定義為資料列唯一識別碼的欄位來進行遮罩。將主索引鍵所包含的欄位遮罩會導致在嘗試更新記錄時發生問題。此限制也適用於維護物件上 XML 資料欄中「列表」所包含的元素。列表中的一或多個元素必須定義為列表的主要識別碼。請確定列表中的主索引鍵元素不是需要遮罩的元素。

包含不同「類型」的列表成員。假設有一個具有包含人員識別碼之列表的頁面。您可以設定系統,讓人員社會安全號碼的遮罩規則與其駕照號碼不同。如果您的實作有這類需求,所遮罩欄位的列表就應該包含每個遮罩規則的項目。

針對每個欄位,如果有部分使用者可以在一或多個使用者介面上看到未遮罩的資料,便需要安全性組態。如果應該在應用程式的所有頁面對所有使用者遮罩某個欄位的值,則不需要安全性組態。

安全性組態

請為每個欄位定義一個有兩個授權等級的安全性類型

  • 1 - 只能看到已遮罩的元素

  • 2 - 只能看到未遮罩的元素

請將所有安全性類型連結至您選擇的應用服務。建議您將每個遮罩導向的安全性類型連結至單一應用服務 (例如 CM_​MASK),因為這可讓您更容易授與存取權。

針對每個安全性類型,請識別哪些使用者可以看到其未遮罩的資料,以及哪些使用者只能看到其已遮罩的資料。如果已遮罩和未遮罩的使用者可納入現有的使用者群組中,便不需額外的使用者群組。否則,請為已遮罩和未遮罩的使用者建立新群組。

定義每個安全性類型的使用者群組之後,請將每個使用者群組連結至應用服務 (即上面所定義)。將使用者群組連結至應用服務時,您將定義與該應用服務連結之每個安全性類型的授權等級。如果使用者群組的使用者應看到未遮罩的安全性類型欄位值,請將授權等級設為 2;否則請將其設為 1。

備註:更新遮罩值。系統支援允許看到遮罩值的使用者更新值。針對遮罩的數字,遮罩值通常全都是 9。如果可能允許使用者更新遮罩的數字,建議為使用者設定可查看未遮罩數字的授權。否則,會有邊角案例的情況,就是使用者會看到遮罩的數字,並需要將該數字更新成與遮罩值完全相符的值。在此情況下,將不會進行更新,因為系統不會將其辨識為變更。
備註:請排清快取。請記住,每當您變更存取權限時,如果希望變更立即生效,都應該排清安全性快取 (在應用程式的 URL 上輸入 flushAll.jsp)。

設定遮罩演算法

您必須為每個遮罩規則與安全性類型的組合建立資料遮罩演算法 (使用功能組態 - 資料遮罩的演算法實體值)。這些演算法可判斷使用者是否有權檢視未遮罩的指定欄位,如果沒有,應如何遮罩該欄位。

基準套件提供兩種演算法類型。這兩種類型都支援設定組態來允許一組使用者看到未遮罩的資料。參數會擷取上述所定義用來評估此項的應用服務、安全性類型及授權等級。

  • F1-MASK:這是用於遮罩英數字元資料。其參數設計成可處理大多數遮罩需求。您可以使用參數來設定要遮罩多少資料,以及要使用哪個遮罩字元。如需詳細資訊,請參考演算法類型描述。
  • F1-MASKNBR:這是用於遮罩數字。如需詳細資訊,請參考演算法類型描述。

決定欄位的顯示方式

遮罩組態會依據擷取欄位來存取使用者介面的方式而有所不同。因此,就遮罩一個「邏輯」欄位 (例如人員的社會安全號碼) 而言,可能需要多個組態項目來涵蓋所有存取方式。請複查顯示指定欄位的每個使用者介面,並建立下列類目:

  • 欄位是一個藉由叫用業務物件、業務服務或服務指令檔來擷取的元素

  • 欄位會儲存為特設特性

  • 欄位會顯示在固定的維護頁面上 (因此會藉由叫用頁面服務來擷取欄位)

  • 欄位會顯示在固定的搜尋頁面上 (因此會藉由叫用搜尋服務來擷取欄位)

為每個遮罩的元素建立功能組態

建立功能類型為資料遮罩的功能組態。每個要遮罩之欄位與用來顯示資料之方法的組合都需要一個選項類型為欄位遮罩的選項項目。值將會包含參考適當資料遮罩演算法的記憶碼,以及依據擷取欄位以供顯示的方式而有所不同的組態,如以下所述。

結構型物件欄位遮罩

針對透過結構型物件呼叫存取並在 UI 對應中顯示的資料,要遮罩的欄位必須在其結構定義中參考中繼資料欄位名稱:field="fld_​name", alg="algorithm name"

如果元素參考結構中的 mdField,則那就是用來識別遮罩規則的欄位。如果沒有 mdField 參考而只有 mapField 參考,則那就是用來識別遮罩規則的欄位。例如,如果您想要遮罩信用卡號碼,讓我們假設結構中定義的欄位如下:

<creditCard mdField="CCNBR" mapField="EXT_ACCT_ID"/>

在此情況下,選項值應該為 field="CCNBR", alg="algorithm name"。結果值如果是 field="EXT_​ACCT_​ID", alg="algorithm name",則不會產生遮罩。

您也可以指定 "where" 子句。如果資料位於只需遮罩特定類型之資料的列表中,這對該資料會相當有用:field="fld_​name", alg="algorithm name", where="fld_​name='value'"

例如,人員可以有 ID 集合,而只有 'SSN' (社會安全號碼) 類型的 ID 應被遮罩。如果包含其人員 ID 集合在內的人員資料會透過業務物件呼叫顯示在 UI 對應上,讓我們假設該集合是以下列方式定義:

<personIDs type="list" mapChild=CI_PER_ID">
  <isPrimaryId mapField="PRIM_SW"/>
  <idType mapField="ID_TYPE_CD"/>
  <personIdNumber mapField="PER_ID_NBR"/>
</personIds>

選項值可能看起來像這樣:field="PER_​ID_​NBR", alg="algorithm name", where="ID_​TYPE_​CD='SSN'"

請注意下列結構型遮罩的重點:

  • 'where' 欄位的限制。雖然結構導向元素之 'where' 子句的主要用途是根據「類型」來遮罩列表中的特定元素,但也可以根據另一個欄位的值來遮罩結構中的單一欄位。例如,想像客戶提交一個定義 ID 類型與 ID 值的註冊表單。雖然此資料不在列表中,但實作仍可能會想要只有在 ID 類型為 "SSN" 時才遮罩 ID 值。只有當 'where' 子句中的元素在結構中是「旁系」,架構才能夠根據 'where' 子句來遮罩結構中的元素。

    • 如果要遮罩的元素在列表中,'where' 子句中的元素就必須在相同的列表中。

    • 如果要遮罩的元素對應至資料表中的真實資料欄,則 'where' 子句中的元素必須也對應至資料表中的真實資料欄。

    • 如果要遮罩的元素以單一元素的形式對應至資料表中的 XML 資料欄,'where' 子句中的元素就必須以單一元素的形式對應至相同的 XML 資料欄。

  • 多個功能選項項目用於同一欄位。系統中的不同結構可以有可根據不同條件來遮罩的相似類型資料。例如,想像一個具有以不同方式擷取或參考人員識別碼之不同結構的實作:

    • 一個結構會擷取不含任何對應「類型」記錄的單一人員 ID,且應該一律使用 CM_​SSN_​MASK 演算法將其遮罩:

      <personSSN mapXML=BO_DATA_AREA mdField=PER_ID_NBR/>
    • 一個結構會擷取人員 ID 與對應的 ID 類型,且如果類型為 "SSN",便應該以 CM_​SSN_​MASK 演算法將其遮罩,而如果類型為 "FEIN",則應該以 CM_​FEIN_​MASK 演算法將其遮罩。

      <personIdType mapXML=BO_DATA_AREA mdField=ID_TYPE_CD/>
      <personId mapXML=BO_DATA_AREA mdField=PER_ID_NBR/>
    • 一個結構會擷取人員 ID 與對應的 ID 類型,且其遮罩規則與前一個結構相同,但針對「ID 類型」代碼使用不同的欄位名稱。(例如,如果此結構之使用者介面上的「ID 類型」需要不同的標籤,便可能發生此情況。)

      <personIdType mapXML=BO_DATA_AREA mdField=CM_ID_TYPE/>
      <personId mapXML=BO_DATA_AREA mdField=PER_ID_NBR/>

    針對此情況,功能選項可能看起來會像這樣:

    1. field="PER_​ID_​NBR", alg="CM_​SSN_​MASK"

    2. field="PER_​ID_​NBR", alg="CM_​SSN_​MASK", where="ID_​TYPE_​CD='SSN'"

    3. field="PER_​ID_​NBR", alg="CM_​FEIN_​MASK", where="ID_​TYPE_​CD='FEIN'"

    4. field="PER_​ID_​NBR", alg="CM_​SSN_​MASK", where="CM_​ID_​TYPE='SSN'"

    5. field="PER_​ID_​NBR", alg="CM_​FEIN_​MASK", where="CM_​ID_​TYPE='FEIN'"

    針對每個結構,系統會先找出元素是否適用於任何遮罩選項。它會為 PER_​ID_​NBR 欄位找出 5 個遮罩選項。然後會判斷是否有任何旁系元素符合 'where' 子句。
    • 如果有多個旁系元素符合 'where' 子句,便會發出執行時間錯誤。例如,如果結構有一個參考 "mdField=ID_​TYPE_​CD" 的元素並有一個參考 "mdField=CM_​ID_​TYPE" 的元素,這便是錯誤。此外,如果有多個元素參考 mdField=ID_​TYPE_​CD",這也是錯誤。

    • 如果有一個且僅有一個旁系元素符合 'where' 子句,該元素的值便會與 'where' 子句中定義的值進行比較。如果在值上找到相符,就會套用適當的遮罩演算法。如果找不到任何相符 (例如,人員 ID 類型為 "LICENSE"),則會依原狀顯示元素。

    • 如果沒有任何旁系元素符合 'where' 子句,且有無 'where' 子句的功能選項 (上面的選項 1) 存在,便會套用無 'where' 子句之選項的遮罩演算法。

  • 變更 'where' 子句中的值。如果您的實作允許一些使用者變更根據某個條件來遮罩部分資料的記錄,建議您設計讓使用者介面在 'where' 子句中的值發生變更時重設遮罩的值。例如,如果防止某位使用者檢視某個人員的社會安全號碼,但允許該使用者對該人員的記錄進行更新,則變更「人員 ID 類型」的值應該會重設「人員 ID 編號」。這會確保該使用者不會藉由只是變更 ID 類型就將社會安全號碼「取消遮罩」。

使用頁面維護來維護的記錄

針對透過頁面維護服務呼叫存取的資料,請指出資料所在的資料表名稱和欄位名稱:table="table_​name", field="fld_​name", alg="algorithm name"

例如,如果是使用頁面維護來顯示和維護人員記錄及其識別碼集合,則選項值應該是 table="CI_​PER_​ID", field="PER_​ID_​NBR", alg="algorithm name"

您也可以指定 "where" 子句:table="table_​name", field="fld_​name", where="fld_​name='value'", alg="algorithm name"

如果資料位於只需遮罩特定類型之資料的下階資料表中,這對該資料會相當有用。以人員 ID 為例,table="CI_​PER_​ID", field="PER_​ID_​NBR", alg="algorithm name", where="ID_​TYPE_​CD='SSN'"

特性資料

針對儲存為特性的資料,請直接指出特性類型:CHAR_​TYPE_​CD='char type', alg="algorithm name"

這只需定義一次,不論特性類型可能位於哪個特性實體。請注意,僅支援特設特性。

遮罩資料總管區域或資訊字串中的欄位

在資料總管區域中通常是使用 SQL 直接從資料庫擷取資料。在此情況下不會自動套用任何遮罩。如果資料總管區域結果中有應該遮罩的資料,就必須透過呼叫業務服務來套用遮罩。

同樣地,維護物件資訊演算法也無法使用業務物件互動來取得資料。基於效率考量,它可以使用 SQL 來存取資料。透過 SQL 擷取資料時,不會套用任何遮罩。若要先對字串套用遮罩再將其包含在資訊字串中,就必須藉由呼叫業務服務來套用遮罩。

系統會提供兩個可被呼叫來判斷遮罩規則是否適用於特定欄位的業務服務。

  • F1-TableFieldMask。遮罩資料表欄位。此業務服務會接收資料表名稱、欄位名稱及一或多個欄位值。如果適用遮罩,便會傳回已遮罩的值。

  • F1-SchemaFieldMask。遮罩結構欄位。此業務服務會接收結構名稱與類型、XPath 及欄位值。如果適用遮罩,便會傳回已遮罩的值。

搜尋服務結果

針對顯示在「固定」搜尋頁面上的資料,會透過搜尋服務呼叫來擷取該資料。請指出搜尋名稱和要遮罩的適當欄位,以及遮罩演算法。例如:search="SearchServiceName", field="PER_​ID_​NBR", where="ID_​TYPE_​CD='SSN'", alg="algorithm name"

若要尋找搜尋服務的名稱,請啟動討論中的搜尋,在篩選區域中按一下滑鼠右鍵,然後選擇檢驗。搜尋 "serviceName"。服務名稱便會列在該處。若要尋找要遮罩的欄位名稱,請搜尋「小工具資訊」。應該會找到兩個結果,一個提供給篩選區域,另一個則給結果區域。此結果區域會在每個欄位的前面加上文字 "SEARCH_​RESULTS"。x$ 的後面為欄位名稱。定義欄位名稱時,請不要參考 x$。請注意,"where" 陳述式僅適用於也包含在搜尋結果中的欄位。

其他遮罩資訊

下列各點提供可協助您進行遮罩組態的其他資訊:

  • 如果示範資料庫包含資料遮罩功能組態,請複查設定,因為它可能會包含與您自己的遮罩規則相符的遮罩規則。

  • 在資料輸入頁面上,使用者可能能夠輸入或變更已遮罩的資料 (例如銀行帳號),但後續無法看見所新增或變更的資料。

  • 外部系統可以藉由透過 Web 服務執行服務呼叫來要求資訊。請記住,有些 Web 服務要求有對資料進行遮罩的需求,有些則無。例如,對外部系統的人員資訊同步要求而言,人員的社會安全號碼不需要遮罩;然而,對同樣擷取人員資訊,但卻用在顯示的 Web 自助服務應用程式要求來說,人員的社會安全號碼就必須遮罩。若要實作此類型的需求,就必須將不同的使用者與每個要求建立關聯,且這些使用者必須屬於具有不同存取權限的個別使用者群組。

  • 如果維護物件包含保存 XML 文件的欄位,而服務呼叫直接叫用該維護物件的服務程式,則在已將決定業務物件演算法外掛至維護物件中,並已如以上所述保護個別業務物件結構中元素的情況下,系統將會遮罩欄位中的個別 XML 元素。