業務場景:在作安全等保問題,須要將原來保存的用戶明文密碼改爲md5加密的密文密碼,數據庫是Oracle的數據庫
首先Oracle要管理員帳號登陸才能夠調md5函數,具體函數是DBMS_OBFUSCATION_TOOLKIT.MD5,網上不少教程都是基於這個函數而後進行封裝,代碼如安全
CREATE OR REPLACE FUNCTION MD5( passwd IN VARCHAR2) RETURN VARCHAR2 IS retval varchar2(32); BEGIN retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) ; RETURN LOWER(retval);--大小寫轉換 END;
而後業務場景是要將原來的明文密碼改爲密文密碼,同事用了遊標去寫,不過我沒有用遊標也能夠寫,思路都是遍歷原來的數據,而後所有更新函數
遊標方法參考代碼:oop
declare cursor c_user is --遊標 SELECT u.u_name,u.U_PASSWORD from USERS u; top_ten number:=0; begin for r_user in c_user loop --循環 --更新USERS的表 dbms_output.put_line(r_user.u_name); update USERS set U_PASSWORD = (select md5(r_user.U_PASSWORD) from dual) where U_NAME = r_user.u_name; end loop; end;
不用遊標或者存儲過程的SQL代碼參考:加密
update Users gu set gu.u_password = (select md5(gu.u_password) from dual);