更新於 2024/01/02閱讀時間約 6 分鐘

Oracle動態密碼Redacted簡介

    CREATE TABLE kart_bilgileri (
    id NUMBER NOT NULL,
    musteri_id NUMBER NOT NULL,
    kart_no NUMBER NOT NULL,
    kart_string VARCHAR2(19) NOT NULL,
    bitis_tarihi DATE NOT NULL,
    guvenlik_no NUMBER NOT NULL,
    gecerlilik_tarihi DATE
    );
    INSERT INTO kart_bilgileri VALUES (1, 1000, 2013201320132013, '2013-2013-2013-2013', TRUNC(ADD_MONTHS(SYSDATE,12)), 123, NULL);
    INSERT INTO kart_bilgileri VALUES (2, 1001, 1989198919891989, '1989-1989-1989-1989', TRUNC(ADD_MONTHS(SYSDATE,12)), 234, NULL);
    INSERT INTO kart_bilgileri VALUES (3, 1002, 2018201820182018, '2018-2018-2018-2018', TRUNC(ADD_MONTHS(SYSDATE,12)), 345, NULL);
    INSERT INTO kart_bilgileri VALUES (4, 1003, 1453145314531453, '1453-1453-1453-1453', TRUNC(ADD_MONTHS(SYSDATE,12)), 456, NULL);
    INSERT INTO kart_bilgileri VALUES (5, 1004, 5710571057105710, '5710-5710-5710-5710', TRUNC(ADD_MONTHS(SYSDATE,12)), 567, NULL);
    COMMIT;
    --expression:用來做權限控制,套用policy給誰,
    --1=1即除了sys、system等系統帳號外,全部套用,
    --可以透過'SYS_CONTEXT(''SYS_SESSION_ROLES'',''MASK_ROLE'') = ''TRUE'''
    BEGIN
    DBMS_REDACT.add_policy(
    object_schema => 'SP101369',
    object_name => 'kart_bilgileri',
    column_name => 'kart_no',
    policy_name => 'redact_kart_info',
    function_type => DBMS_REDACT.full,
    expression => '1=1'
    );
    END;
    /
    select * from kart_bilgileri;
    #Sample 1:
    --部分遮罩
    --遮罩參數,不同data type參數不同,字串:5個,數字:3個,日期:使用日期專用子函數
    --字串的輸入參數說明:
    --ex: ' VVVVFVVVVFVVVV,VVVV-VVVV-VVVV,*,3,10 '
    --  前兩個參數:
    --    V:代表輸入字符串中可以編輯的每個字符。
    --    F:代表輸入字符串中可以被視為分隔符的每個字符。
    --   *:遮罩字符
    --  3:指定密文V字符的起始位置。
    --  10:指定密文 V 字符的結束位置。
    BEGIN
    DBMS_REDACT.alter_policy (
    object_schema => 'SP101369',
    object_name => 'kart_bilgileri',
    policy_name => 'redact_kart_info',
    action => DBMS_REDACT.modify_column,
    column_name => 'kart_no',
    function_type => DBMS_REDACT.partial,
    function_parameters => '1,1,12'
    );
    END;
    /
    #Sample 2:
    BEGIN
    DBMS_REDACT.alter_policy (
    object_schema => 'SP101369',
    object_name => 'kart_bilgileri',
    policy_name => 'redact_kart_info',
    action => DBMS_REDACT.modify_column,
    column_name => 'kart_no',
    function_type => DBMS_REDACT.RANDOM
    );
    END;
    /
    #跟Redaction 有關的系統視圖
    REDACTION_COLUMNS:
    描述數據庫中的所有編輯列,提供列所在的表或視圖的所有者、
    對象名稱、列名稱、編輯函數的類型、編輯函數的參數(如果有),以及編輯政策的描述。
    如果已創建策略表達式,則顯示默認的對象範圍策略表達式的 SQL 表達式。
    REDACTION_EXPRESSIONS:
    顯示現有策略表達式的名稱及其 SQL 表達式
    REDACTION_POLICIES:
    描述數據庫中的所有數據編輯策略。
    它包括有關對象所有者、對象名稱、策略名稱、策略表達式、
    策略是否啟用以及數據編輯策略的描述的信息。
    REDACTION_VALUES_FOR_TYPE_FULL:
    顯示使用完全密文的數據密文策略的當前密文值。
    要注意的是,當啟用REDACTION動態遮罩功能後,所有的Create Table As SELECT (CTAS)的功能將會被禁止,
    只有sys 帳號才能使用。
    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.