Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Penyamaran data Oracle

Masalah ini mudah diselesaikan dalam 12c dengan fungsi STANDARD_HASH .

Solusi di versi sebelumnya hanya sedikit lebih rumit. Buat pembungkus sederhana di sekitar DBMS_CRYPTO yang berfungsi seperti STANDARD_HASH:

--Imitation of the 12c function with the same name.
--Remember to drop this function when you upgrade!
create or replace function standard_hash(
    p_string varchar2,
    p_method varchar2 default 'SHA1'
) return varchar2 is
    v_method number;
    v_invalid_identifier exception;
    pragma exception_init(v_invalid_identifier, -904);
begin
    --Intentionally case-sensitive, just like the 12c version.
    if p_method = 'SHA1' then
        v_method := dbms_crypto.hash_sh1;
    --These algorithms are only available in 12c and above.
    $IF NOT DBMS_DB_VERSION.VER_LE_11 $THEN
        elsif p_method = 'SHA256' then
            v_method := dbms_crypto.hash_sh256;
        elsif p_method = 'SHA384' then
            v_method := dbms_crypto.hash_sh384;
        elsif p_method = 'SHA512' then
            v_method := dbms_crypto.hash_sh512;
    $END
    elsif p_method = 'MD5' then
        v_method := dbms_crypto.hash_md5;
    else
        raise v_invalid_identifier;
    end if;

    return rawToHex(dbms_crypto.hash(utl_raw.cast_to_raw(p_string), v_method));
end;
/

Anda mungkin perlu masuk dengan SYS dan memberikan akses kepada pengguna Anda ke DBMS_CRYPTO agar fungsi tersebut berfungsi:

grant execute on sys.dbms_crypto to <your_schema>;

Buat sinonim publik, berikan kepada semua orang, dan cara kerjanya persis sama.

create public synonym standard_hash for <schema with function>.standard_hash;
grant execute on standard_hash to public;

select standard_hash('Some text', 'MD5') from dual;
    9DB5682A4D778CA2CB79580BDB67083F

select standard_hash('Some text', 'md5') from dual;
    ORA-00904: : invalid identifier

Berikut adalah contoh sederhana penggunaan fungsi:

update some_table
set column1 = standard_hash(column1),
    column2 = standard_hash(column2);

Tetapi memperbarui data dalam jumlah besar bisa lambat. Mungkin lebih cepat untuk membuat tabel baru, membuang yang lama, mengganti nama yang baru, dll. Dan nilai hash mungkin lebih besar dari ukuran kolom, mungkin perlu untuk alter table some_table modify column1 varchar2(40 byte);

Saya heran betapa banyak produk dan alat yang ada untuk melakukan hal yang begitu sederhana.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Menemukan Nama Batasan di Oracle

  2. Bagaimana Menerapkan Independensi Basis Data dengan Entity Framework

  3. Bagaimana cara menetapkan nilai DEFAULT bersyarat ke kolom di Oracle tanpa menggunakan pemicu?

  4. Kesalahan SQL Loader:Bidang panjang variabel melebihi panjang maksimum.

  5. Tidak dapat terhubung ke Oracle melalui VBA - SQLSetConnectAttr Driver Gagal