sql >> Database teknologi >  >> RDS >> Oracle

Hvordan krypteres adgangskoden i Oracle?

Her giver jeg et eksempel på at kryptere adgangskoden i Oracle ved hjælp af DBMS_CRYPTO-pakken.

For at demonstrere dette har jeg oprettet følgende tabel til at gemme bruger-id (USER_ID) varchar2 datatype og til at gemme den krypterede adgangskode (ENC_PSW) rådatatype.

Opret 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))
/

Et eksempel på kryptering af adgangskode i Oracle

Nu gennem følgende PL/SQL-program gemmer vi adgangskoden mypassword123 for bruger-id'et SCOTT . Nøglen er den vitale del for kryptering, fordi du skal bruge den samme nøgle for at dekryptere den. Du kan bruge enhver alfanumerisk nøgle på 16 tegn. For mere information om DBMS_CRYPTO-pakken, se Oracle-dokumentationen.

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;
/

Output

Encrypted=132BEDB1C2CDD8F23B5A619412C27B60
PL/SQL procedure successfully completed.

Tjek dataene i ENC_DATA-tabellen:

SELECT * FROM enc_data;
USER_ID	ENC_PSW
SCOTT	132BEDB1C2CDD8F23B5A619412C27B60

I ovenstående eksempel krypterede den adgangskoden til bruger-id'et SCOTT og blev gemt i tabellen enc_data. Nu nedenfor er PL/SQL-programmet til at hente adgangskoden og dekryptere den.

Et eksempel på dekryptering af adgangskode i 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;
/

Output

Decrypted=mypassword123
PL/SQL procedure successfully completed.

Se også:

  • Hvordan skjules adgangskoden i Oracle Forms?
  • Skift Sys-brugeradgangskode i Oracle
  1. Forstå Workload Analyzer til at kortlægge ydeevneflaskehalse

  2. Hvordan tester man, om en MySQL-forespørgsel lykkedes med at ændre databasetabeldata?

  3. Tips til læse-/skrivelåse afhængigt af transaktionsisolationsniveau i MSSQL

  4. Fejl ved indlæsning af oci8.so med Ubuntu server 17.04 php 7 og apache2