sql >> データベース >  >> RDS >> Oracle

Oracleでパスワードを暗号化する方法は?

    ここでは、DBMS_CRYPTOパッケージを使用してOracleでパスワードを暗号化する例を示しています。

    これを実証するために、ユーザーID(USER_ID)varchar2データ型を格納し、暗号化パスワード(ENC_PSW)rawデータ型を格納する次のテーブルを作成しました。

    テーブルの作成

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

    Oracleでパスワードを暗号化する例

    次のPL/SQLプログラムを使用して、パスワード mypassword123を保存します。 ユーザーIDSCOTT 。キーを復号化するには同じキーを使用する必要があるため、キーは暗号化にとって重要な部分です。 16文字の長さの任意の英数字キーを使用できます。 DBMS_CRYPTOパッケージの詳細については、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;
    /

    出力

    Encrypted=132BEDB1C2CDD8F23B5A619412C27B60
    PL/SQL procedure successfully completed.

    ENC_DATAテーブルのデータを確認してください:

    SELECT * FROM enc_data;
    USER_ID	ENC_PSW
    SCOTT	132BEDB1C2CDD8F23B5A619412C27B60

    上記の例では、ユーザーID SCOTTのパスワードを暗号化し、enc_dataテーブルに保存しました。以下は、パスワードをフェッチして復号化するためのPL/SQLプログラムです。

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

    出力

    Decrypted=mypassword123
    PL/SQL procedure successfully completed.

    関連項目:

    • OracleFormsでパスワードを非表示にする方法
    • OracleでSysユーザーのパスワードを変更する
    1. 破損したデータベースpostgresqlを修復します

    2. ネイティブライブラリsqljdbc_auth.dllはすでに別のクラスローダーにロードされています

    3. OracleFormsでPLAY_SOUNDする方法

    4. T-SQLのバグ、落とし穴、およびベストプラクティス–ウィンドウ関数