oracle数据库存储过程success with compilation error (oracle数据库字段加密解密)

文章介绍了如何解决在Oracle中普通用户创建加密存储过程时遇到的权限问题,以及在使用Navicat时出现的乱码问题。通过登录sys用户授权,使用DBMS_CRYPTO包进行加密和解密操作,并调整客户端字符集以匹配服务器字符集来避免乱码。
摘要由CSDN通过智能技术生成

使用普通用户写存储过程加密报错

  1. 解决方式

登录sys用户执行 grant execute on dbms_crypto to 用户

这样就完美解决,普通用户使用创建加密存储过程报错问题

--解码方法
CREATE OR REPLACE FUNCTION F_DECRYPT_NUMBER(ENCRYPTED_RAW IN RAW)
  RETURN VARCHAR2 IS
  DECRYPT_RAW RAW(48);
  --KEY_NUMBER  NUMBER(32) := 12345746456456454;

  KEY_NUMBER    VARCHAR2(32) := '12456789';
  KEY_RAW       RAW(128) :=  UTL_RAW.CAST_TO_RAW(KEY_NUMBER);
  -- KEY_RAW     RAW(128) := UTL_RAW.CAST_FROM_NUMBER(KEY_NUMBER);
  BEGIN
    DECRYPT_RAW := DBMS_CRYPTO.DECRYPT(SRC => ENCRYPTED_RAW,
                                       TYP => DBMS_CRYPTO.DES_CBC_PKCS5,
                                       KEY => KEY_RAW);
    RETURN UTL_I18N.RAW_TO_CHAR(DECRYPT_RAW, 'AL32UTF8');
  END;


--加密方法
CREATE OR REPLACE FUNCTION F_ENCRYPT_NUMBER(NUMBER_IN IN VARCHAR2)
  RETURN RAW IS
  NUMBER_IN_RAW RAW(128) := UTL_I18N.STRING_TO_RAW(NUMBER_IN, 'AL32UTF8');
  KEY_NUMBER    VARCHAR2(32) := '123456789';
  --  KEY_RAW       RAW(128) := UTL_RAW.CAST_FROM_NUMBER(KEY_NUMBER);
  KEY_RAW       RAW(128) :=  UTL_RAW.CAST_TO_RAW(KEY_NUMBER);
  ENCRYPTED_RAW RAW(128);
  BEGIN
    ENCRYPTED_RAW := DBMS_CRYPTO.ENCRYPT(SRC => NUMBER_IN_RAW,
                                         TYP => DBMS_CRYPTO.DES_CBC_PKCS5,
                                         KEY => KEY_RAW);
    RETURN ENCRYPTED_RAW;
  END;

第二步 测试(以上使用sqlplus是能正常显示的,用navicat乱码)

加密:select F_ENCRYPT_NUMBER(‘123456’) from dual;
解密:select F_DECRYPT_NUMBER(F_ENCRYPT_NUMBER(‘123456’)) from dual;
在这里插入图片描述

1.第一步确认服务端使用的字符集

使用select userenv(‘language’) from dual;命令查询服务端字符集
在这里插入图片描述

2.第二步配置客户端字符集

  • 将客户端的字符集配置成与服务端字符集一致
  • 比如确认服务端字符集为“SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  • 通编辑数据库连接,在高级选项中,选择对应的客户端字符集及编码

在这里插入图片描述

关于乱码问题大家可以用上面的方法去解决,由于本人多次更改编码,没有更改成功。希望大家更改成功的可以留在评论区的连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不一样的老墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值