業務場景:在做安全等保問題,需要將原來保存的用戶明文密碼改成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;
然后業務場景是要將原來的明文密碼改成密文密碼,同事用了游標去寫,不過我沒有用游標也可以寫,思路都是遍歷原來的數據,然后全部更新
游標方法參考代碼:
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);