Data Masking از طریق Data Pump

در زمان انتقال اطلاعات از یک بانک عملیاتی به یک بانک تستی، ممکن است نیاز باشد تا اطلاعات حساس به طور شفاف به بانک مقصد منتقل نشوند در این صورت اگر از data pump برای جابجایی دیتا استفاده می کنیم، می توانیم در زمان برگرداندن دیتا با دستور impdp، داده های حساس را دستکاری کنیم. این کار، از طریق پارامتر REMAP_DATA و یک function(که از قبل در بانک تستی موجود است)، قابل انجام خواهد بود.

REMAP_DATA=[schema.]tablename.column_name:[schema.]pkg.function

در ادامه قصد داریم جدولی که یکی از فیلدهای ان شامل کدملی می باشد، را با کمک Data Pump، از بانکی به بانک دیگر منتقل کنیم به طوریکه کدملی افراد در بانک مقصد، به صورت تصادفی پر شده باشند:

–in prod DB:

SQL> create table usef.person(id number,national_id number(10),name varchar2(9));

Table created.

SQL> insert into usef.person values(1,2064150841,’USEF’);

1 row created.

SQL> commit;

Commit complete.

[oracle@myhost ~]$ expdp dumpfile=mydump directory=frm tables=usef.person

Processing object type TABLE_EXPORT/TABLE/TABLE

. . exported “USEF”.”PERSON”                             5.953 KB       1 rows

Job “SYS”.”SYS_EXPORT_TABLE_01″ successfully completed at Wed Nov 14 10:57:59 2018 elapsed 0 00:00:30

قبل از import کردن اطلاعات در بانک تستی، تابعی را در این بانک ایجاد می کنیم که کدملی را به عنوان ورودی دریافت کرده و عدد تصادفی ای را برمیگرداند:

–in test DB:

SQL>create or replace package usef.mypkg as

  function myfunc(national_id number) return number;

end;

/

SQL>create or replace package body usef.mypkg as

  function myfunc(national_id number) return number as

  begin

    return translate(national_id, 1234567890, 1111111111);

  end;

end;

/

همانطور که می بینید، قرار است تابع myfun، کدملی را دریافت کند و در خروجی عدد 1 را برگرداند.

با دستور زیر، با کمک تابع myfunc، جدول person را در بانک مقصد(تست) برمیگردانیم به طوریکه کدملی افراد با عدد یک پر شده باشند:

[oracle@myhost ~]$ impdp dumpfile=mydump directory=frm tables=usef.person remap_data=usef.person.national_id:usef.mypkg.myfunc

Processing object type TABLE_EXPORT/TABLE/TABLE_DATA

. . imported “USEF”.”PERSON”                             5.953 KB       1 rows

Job “SYS”.”SYS_IMPORT_TABLE_01″ successfully completed at Wed Nov 14 12:25:03 2018 elapsed 0 00:00:25

حال با رجوع به جدول person، خواهیم دید که کدملی ثبت شده، به عدد دیگری تبدیل شده است:

select * from usef.person;

دیدگاهتان را بنویسید