在迁移数据库的时候,如果不知道旧用户的密码,可以通过密文密码来创建用户。
1 创建测试用户
SQL> create user dave identified by cndba;
User created.
SQL> grant connect,resource to dave;
Grant succeeded.
SQL> col name for a20
SQL> col password for a50
SQL> set lines 160
SQL> select user#,name,password from user$ where name='DAVE';
USER# NAME PASSWORD
---------- --------------- --------------------------
90 DAVE 6031FF6608F9922F
2 使用密码创建同密码用户
SQL> create user cndba identified by values '6031FF6608F9922F';
User created.
SQL> grant connect,resource to cndba;
Grant succeeded.
SQL> grant connect, resource to dave2 identified by values '6031FF6608F9922F';
Grant succeeded.
SQL> col name for a20
SQL> col password for a50
SQL> set lines 160
SQL> select user#,name,password from user$ where name in ('DAVE','DAVE2','CNDBA');
USER# NAME PASSWORD
---------- --------------- ----------------------------------------
91 CNDBA 6031FF6608F9922F
90 DAVE 6031FF6608F9922F
92 DAVE2 6031FF6608F9922F
我们这里先验证,会发现一个问题:
SQL> conn dave/cndba
Connected.
SQL> conn CNDBA/cndba
ERROR:
ORA-01017: invalid username/password; logon denied
SQL> conn dave2/cndba
ERROR:
ORA-01017: invalid username/password; logon denied
三个用户的密码密文一样,但是后面新建的 2 个缺无法登录。 这里就是需要注意的部分,Oracle 用户的密文密码是和用户相关联的,只有用户名和密码匹配的情况下,这个密文密码才能使用,简单的说,就是这个密码只属于对应的用户,其他用户使用这个密码就会提示密码不正确。
两个不同的用户即使密码相同,它们的密文密码并不相同。验证如下:
SQL> create user u1 identified by dave;
User created.
SQL> create user u2 identified by dave;
User created.
SQL> col name for a20
SQL> col password for a30
SQL> set lines 160
SQL> select user#,name,password from user$ where name in ('U1','U2');
USER# NAME PASSWORD
---------- -------------------- ------------------------------
93 U1 91229A968EED9624
94 U2 E7F5CD5EF910E6D6
可以看到,密码确实不一样。
因为我们这里使用密文密码的方式只能在新的,同版本的数据库上创建同名的用户。
我们这里直接删除用户在创建来验证:
SQL> drop user dave;
User dropped.
SQL> create user dave identified by values '6031FF6608F9922F';
User created.
SQL> grant connect,resource to dave;
Grant succeeded.
SQL> conn dave/cndba
Connected.
上面强调版本,是因为 Oracle 在不同的版本里对数据库的加密算法不一样:
- 10g中使用基于DES的版本,
- 11g中,它使用基于SHA1密码的版本,从11g第1版开始的区分大小写的密码,
- 12c中使用基于SHA-2的SHA-512密码版本,对用户密码哈希进行了改进。通过使用基于PBKDF2的SHA512哈希算法,替代过去简单的SHA1哈希加密,使得密码哈希更安全。
SQL> col username for a20
SQL> select username,PASSWORD_VERSIONS from dba_users where rownum<2;
USERNAME PASSWORD_VERSIONS
-------------------- ---------------------------------------------------
SYS 11G 12C
上述的前提是不知道原有账户的密码的解决方案,如果是版本的迁移,直接直接通过明文密码来创建用户即可。
版权声明:本文为博主原创文章,未经博主允许不得转载。