在检索口令是否与用户名相同的第一种方法中,实际上并不算可取。
假设原先用户名与口令并不相同,而在检索口令过程中,正好有业务程序在操作,那么修改口令做检查的时候可能导致业务无法操作,安全性不高。
甚至过多的业务程序错误登陆,会导致用户被lock。
那么推荐第二种方法。
创建以一个字母为名字的role,通过加密role,检查加密role的口令值,看看role加密的口令值是否与用户的口令值相同,即可得出用户口令是否与名字相同的结论。
测试如下:
管理员A:
SQL> CREATE USER ZC IDENTIFIED BY ZC;
设置ZC用户的口令为大写ZC ,与用户名相同
管理员B:
SQL> SELECT NAME,PASSWORD FROM sys.user$ WHERE TYPE#=1 AND NAME=’ZC’;
NAME PASSWORD
—————————— ——————————
ZC 931282A72FB31E22
管理员B此时发现用户ZC加密后的口令是<931282A72FB31E22>
管理员B创建role,role名字为Z,口令为CZC,注意此处<名字+口令>正好是ZCZC。
正好是<用户名+假设的口令> : <ZC+ZC>
SQL> CREATE ROLE Z IDENTIFIED BY CZC;
Role created
SQL> SELECT NAME,PASSWORD FROM sys.user$ WHERE TYPE#=0 AND NAME=’Z';
NAME PASSWORD
—————————— ——————————
Z 931282A72FB31E22
检查后发现加密后的role口令值也是<931282A72FB31E22>。
结论:
那么即可得出结论,用户ZC的口令也是ZC,与用户名相同。