Oracle12C加密,Oracle12c-19c如何防止安全检查查出弱密码?

ORACLE数据库在安全方面可靠度绝对完善,包括数据库用户的密码加密,在之前的老版本中如10G及以前,密码在dba_user.password显示密文, 由于使用的是DES加密,很容易从网上找到解密密文的方法,可以现在都12C–19C了,之前分享过《Oracle 12c 关于密码(password)的几个新特性小结》都已经引入了新的密码hash算法,怎么还经常能收到安全检查提示数据库用户有弱密码? 他们还能解密12c以后的PBKDF2的SHA512哈希算法? 那也太牛了吧,经常让DBA去改弱密码,DBA不能忍,于是研究一下怎么回事。

从安全提供12c数据库中个人用户密码的密文发现是类似“FC110DD5268B2BB5“这种短值,不应该呀,从哪取到的?USER$.password列。从11g以后密码区分大小写的值就已经存在了user$.spare4,但是为了向前兼容,在user$.password列还有以前老版本的不区分大小写密文。安全室就是从USER$.password列取到的值做的解密, 如果让他取不到这个值,自然也就解不了密。

到12c了为什么user$.password 有的数据库环境还有值?而有的没有? 是因为有些数据库为了应用或数据库客户端向低版本兼容,在$ORACLE_HOME/netword/admin/sqlnet.ora中的SQLNET.ALLOWED_LOGON_VERSION_SERVER 配置了如8等值,这个问题我在

如果我们的客户端11.2.0.3以上,则没有必要配置低于version 12的值, 下面测试不同version对于user$.password的影响。

测试版本Oracle 19.3

[oracle@zcloud ~]$ for i in 8 9 10 11 12 12a; do

> echo "change version $i ..."

> echo "SQLNET.ALLOWED_LOGON_VERSION_SERVER="$i > $ORACLE_HOME/network/admin/sqlnet.ora;

> sqlplus -s / as sysdba< create user c##anbob$i identified by anbob1;

> exit;

> EOF

> done;

change version 8 ...

User created.

change version 9 ...

User created.

change version 10 ...

User created.

change version 11 ...

User created.

change version 12 ...

User created.

change version 12a ...

User created.

SQL> col name for a30

SQL> col password for a50

SQL> col password_ver for a30

SQL>

SQL> select decode(bitand(u.spare1, 65536), 65536, NULL, decode(

2 REGEXP_INSTR(

3 NVL2(u.password, u.password, ' '),

4 '^ $'

5 ),

6 0,

7 decode(length(u.password), 16, '10G ', NULL),

8 ''

9 ) ||

10 decode(

11 REGEXP_INSTR(

12 REGEXP_REPLACE(

13 NVL2(u.spare4, u.spare4, ' '),

14 'S:000000000000000000000000000000000000000000000000000000000000',

15 'not_a_verifier'

16 ),

17 'S:'

18 ),

19 0, '', '11G '

20 ) ||

21 decode(

22 REGEXP_INSTR(

23 NVL2(u.spare4, u.spare4, ' '),

24 'T:'

25 ),

26 0, '', '12C '

27 ) ||

28 decode(

29 REGEXP_INSTR(

30 REGEXP_REPLACE(

31 NVL2(u.spare4, u.spare4, ' '),

32 'H:00000000000000000000000000000000',

33 'not_a_verifier'

34 ),

35 'H:'

36 ),

37 0, '', 'HTTP '

38 )) password_ver,name,password from user$ u where name like 'C##ANBOB%';

PASSWORD_VER NAME PASSWORD

------------------------------ ------------------------------ --------------------------------------------------

10G 11G 12C C##ANBOB10 0852D701E1A4619C

10G 11G 12C C##ANBOB11 298571205D180182

11G 12C C##ANBOB12

12C C##ANBOB12A

10G 11G 12C C##ANBOB8 AC6D78B1D13E979E

10G 11G 12C C##ANBOB9 9DDA94FCEAA503BA

Note:

当SQLNET.ALLOWED_LOGON_VERSION_SERVER在12及12A时,user$.password列就不再有值。

Note: 本文的目的当然不是为了掩耳盗铃, 有些弱密码还是不建议使用,数据库也有自带的verify_function可以做为最基本的验证,我们也有自定义该方法,修改时过滤弱密码表,也是一种不错的方法。

打赏

8732971891f4ba05583674ca6b8145ac.png微信扫一扫,打赏作者吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值