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