sql >> Database >  >> RDS >> Oracle

Hoe wachtwoord versleutelen in Oracle?

Hier geef ik een voorbeeld om het wachtwoord in Oracle te coderen met behulp van het DBMS_CRYPTO-pakket.

Om dit aan te tonen, heb ik de volgende tabel gemaakt om het gebruikers-ID (USER_ID) varchar2-gegevenstype op te slaan en om het gecodeerde wachtwoord (ENC_PSW) onbewerkte gegevenstype op te slaan.

Tabel maken

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

Een voorbeeld om wachtwoord in Oracle te versleutelen

Nu zullen we via het volgende PL/SQL-programma het wachtwoord mypassword123 . opslaan voor de gebruikers-ID SCOTT . Sleutel is het essentiële onderdeel voor codering, want om deze te decoderen, moet u dezelfde sleutel gebruiken. U kunt elke alfanumerieke toets met een lengte van 16 tekens gebruiken. Raadpleeg de Oracle-documentatie voor meer informatie over het DBMS_CRYPTO-pakket.

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

Uitvoer

Encrypted=132BEDB1C2CDD8F23B5A619412C27B60
PL/SQL procedure successfully completed.

Controleer de gegevens in de ENC_DATA-tabel:

SELECT * FROM enc_data;
USER_ID	ENC_PSW
SCOTT	132BEDB1C2CDD8F23B5A619412C27B60

In het bovenstaande voorbeeld versleutelde het het wachtwoord voor de gebruikers-ID SCOTT en opgeslagen in de enc_data-tabel. Hieronder vindt u het PL/SQL-programma om het wachtwoord op te halen en te decoderen.

Een voorbeeld om het wachtwoord in Oracle te decoderen

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

Uitvoer

Decrypted=mypassword123
PL/SQL procedure successfully completed.

Zie ook:

  • Hoe wachtwoord in Oracle Forms verbergen?
  • Sys-gebruikerswachtwoord wijzigen in Oracle
  1. SQL Server REPLACE() vs TRANSLATE():wat zijn de verschillen?

  2. hoe het type waarde in postgres te controleren

  3. Opgeslagen SQL-aanroepprocedure voor elke rij zonder een cursor te gebruiken

  4. Service Broker configureren voor asynchrone verwerking