Oracle
 sql >> база данни >  >> RDS >> Oracle

Маскиране на данни на Oracle

Този проблем се решава лесно в 12c с функцията STANDARD_HASH .

Решението в предишните версии е само малко по-сложно. Създайте проста обвивка около DBMS_CRYPTO, която действа точно като 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;
/

Може да се наложи да влезете с SYS и да предоставите на вашия потребител достъп до DBMS_CRYPTO, за да работи функцията:

grant execute on sys.dbms_crypto to <your_schema>;

Създайте публичен синоним, дайте го на всички и той работи по абсолютно същия начин.

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

Ето прост пример за използване на функцията:

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

Но актуализирането на големи количества данни може да бъде бавно. Може да е по-бързо да създадете нова таблица, да премахнете старата, да преименувате новата и т.н. И хеш стойността може да е по-голяма от размера на колоната, може да е необходимо да alter table some_table modify column1 varchar2(40 byte);

Учудва ме колко много продукти и инструменти има за извършване на такова просто нещо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изпълним Oracle SQL оператори с VBScript

  2. Преобразувайте изхода от заявка на Oracle в json (Oracle / NodeJS)

  3. Как да промените приоритета за едновременна програма

  4. Как да инсталирате Oracle на Mac

  5. как да получите третия отчет, за да комбинирате данните за клиента и поръчката