Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak zaszyfrować hasło w Oracle?

Tutaj podaję przykład szyfrowania hasła w Oracle za pomocą pakietu DBMS_CRYPTO.

Aby to zademonstrować, utworzyłem poniższą tabelę do przechowywania typu danych ID użytkownika (USER_ID) varchar2 oraz do przechowywania nieprzetworzonego typu danych zaszyfrowanego hasła (ENC_PSW).

Utwórz tabelę

SET DEFINE OFF;
CREATE TABLE ENC_DATA
(
  USER_ID  VARCHAR2(20 BYTE),
  ENC_PSW  RAW(2000)
)
/

ALTER TABLE ENC_DATA ADD (
  CONSTRAINT ENC_DATA_PK
 PRIMARY KEY
 (USER_ID))
/

Przykład szyfrowania hasła w Oracle

Teraz za pomocą następującego programu PL/SQL będziemy przechowywać hasło mypassword123 dla identyfikatora użytkownika SCOTT . Klucz jest kluczową częścią szyfrowania, ponieważ aby go odszyfrować, musisz użyć tego samego klucza. Możesz użyć dowolnego klawisza alfanumerycznego o długości 16 znaków. Więcej informacji na temat pakietu DBMS_CRYPTO można znaleźć w dokumentacji Oracle.

SET SERVEROUTPUT ON;

DECLARE
   l_user_id    enc_data.USER_ID%TYPE := 'SCOTT';
   l_user_psw   VARCHAR2 (2000) := 'mypassword123';

   l_key        VARCHAR2 (2000) := '1234567890999999';
   l_mod NUMBER
         :=   DBMS_CRYPTO.ENCRYPT_AES128
            + DBMS_CRYPTO.CHAIN_CBC
            + DBMS_CRYPTO.PAD_PKCS5;
   l_enc        RAW (2000);
BEGIN
   l_user_psw :=
      DBMS_CRYPTO.encrypt (UTL_I18N.string_to_raw (l_user_psw, 'AL32UTF8'),
                           l_mod,
                           UTL_I18N.string_to_raw (l_key, 'AL32UTF8'));
   
      DBMS_OUTPUT.put_line ('Encrypted=' || l_user_psw);

   INSERT INTO enc_data (user_id, enc_psw)
       VALUES (l_user_id, l_user_psw);

   COMMIT;
END;
/

Wyjście

Encrypted=132BEDB1C2CDD8F23B5A619412C27B60
PL/SQL procedure successfully completed.

Sprawdź dane w tabeli ENC_DATA:

SELECT * FROM enc_data;
USER_ID	ENC_PSW
SCOTT	132BEDB1C2CDD8F23B5A619412C27B60

W powyższym przykładzie zaszyfrowało hasło dla identyfikatora użytkownika SCOTT i zostało zapisane w tabeli enc_data. Teraz poniżej znajduje się program PL/SQL do pobierania hasła i odszyfrowywania go.

Przykład odszyfrowywania hasła w Oracle

SET SERVEROUTPUT ON;

DECLARE
   l_user_id    enc_data.user_id%TYPE := 'SCOTT';
   l_user_psw   RAW (2000);

   l_key        VARCHAR2 (2000) := '1234567890999999';
   l_mod NUMBER
         :=   DBMS_CRYPTO.ENCRYPT_AES128
            + DBMS_CRYPTO.CHAIN_CBC
            + DBMS_CRYPTO.PAD_PKCS5;
   l_dec        RAW (2000);
BEGIN
   SELECT enc_psw
     INTO l_user_psw
     FROM enc_data
    WHERE user_id = l_user_id;

   l_dec :=
      DBMS_CRYPTO.decrypt (l_user_psw,
                           l_mod,
                           UTL_I18N.STRING_TO_RAW (l_key, 'AL32UTF8'));
   DBMS_OUTPUT.put_line ('Decrypted=' || UTL_I18N.raw_to_char (l_dec));
END;
/

Wyjście

Decrypted=mypassword123
PL/SQL procedure successfully completed.

Zobacz też:

  • Jak ukryć hasło w formularzach Oracle?
  • Zmień hasło użytkownika Sys w Oracle
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. co dzieje się w fazie przecięcia adop w R12.2

  2. Zadeklaruj wyjątek zdefiniowany przez użytkownika przy użyciu metody RAISE_APPLICATION_ERROR w bazie danych Oracle

  3. Jak wypełnić tabelę kalendarza w Oracle?

  4. Oracle Search wszystkie tabele wszystkie kolumny dla ciągu znaków

  5. Kontrola DB zbliża się do śmierci