sql >> Databasteknik >  >> RDS >> Oracle

Hur krypterar man lösenordet i Oracle?

Här ger jag ett exempel för att kryptera lösenordet i Oracle med paketet DBMS_CRYPTO.

För att demonstrera detta har jag skapat följande tabell för att lagra användar-ID (USER_ID) varchar2-datatyp och för att lagra rådatatypen för krypterade lösenord (ENC_PSW).

Skapa tabell

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

Ett exempel för att kryptera lösenord i Oracle

Nu genom följande PL/SQL-program kommer vi att lagra lösenordet mypassword123 för användar-ID:t SCOTT . Nyckeln är den avgörande delen för kryptering eftersom du måste använda samma nyckel för att dekryptera den. Du kan använda vilken alfanumerisk tangent som helst med 16 tecken. För mer information om DBMS_CRYPTO-paketet, 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;
/

Utdata

Encrypted=132BEDB1C2CDD8F23B5A619412C27B60
PL/SQL procedure successfully completed.

Kontrollera data i ENC_DATA-tabellen:

SELECT * FROM enc_data;
USER_ID	ENC_PSW
SCOTT	132BEDB1C2CDD8F23B5A619412C27B60

I exemplet ovan krypterade den lösenordet för användar-ID SCOTT och lagrades i tabellen enc_data. Nu nedan är PL/SQL-programmet för att hämta lösenordet och dekryptera det.

Ett exempel för att dekryptera lösenord 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;
/

Utdata

Decrypted=mypassword123
PL/SQL procedure successfully completed.

Se även:

  • Hur döljer man lösenordet i Oracle Forms?
  • Ändra Sys-användarlösenord i Oracle
  1. Hur man kontrollerar om en lagrad procedur finns innan den skapas

  2. Kontrollera en tabell för tidsöverlappning?

  3. Trunkera alla tabeller i en MySQL-databas med ett kommando?

  4. Hur väljer man en specifik kolumn från rumsdatabasen givet en specifik parameter i rumsfrågan?