oracle中的口令不是不能够与用户名相同吗?但为什么可以以sys/sys as sysdba这样的方式登录ORACLE数据库呢?
解答:
密码设成什么样式可以通过profile来约束,但是默认一般可以设置为与用户名同名;
另外sys/sys as sysdba这种登录方式一般用得都是操作系统验证方式,并不验证密码,你可以试试,随便输一个密码或者干脆不输入密码都可以的。例如:
sqlplus sys/123 as sysdba
sqlplus / as sysdba
进入后执行show user命令,会看到一样都是sys用户
sys/admin as sysdba
解锁用户和更改用户密码:
alter user scott account unlock;
SQL> alter user system identified by admin;
用户已更改。
SQL> alter user scott identified by tiger;
解释中现象:
Oracle的口令文件的作用是存放所有以sysdba或者sysoper权限连接数据库的用户的口令,如果想以sysdba权限远程连接数据库,必须使用口令文件,否则不能连上,由于sys用户在连接数据库时必须以sysdba or sysoper方式,也就是说sys用户要想连接数据库必须使用口令文件。安装完oracle,还没有给普通用户授予sysdba权限,口令文件中只存放了sys的口令,如果之后把sysdba权限授予了普通用户,那么此时会把普通用户的口令从数据库中读到口令文件中保存下来,这时必须要求数据库处于open状态。
如果数据库的sysdba是通过数据库认证的,那么密码的信息就保存在这个文件中,如果不小心把sys的密码忘记了该怎么办呢?
第一步,将Oracle的sysdba登录修改为os认证:
F:\oracleintall\intall1\product\11.2.0\dbhome_1\NETWORK\ADMIN\sqlnet.ora
sqlnet.ora文件修改为:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
这时候只要是属于ORA_DBA组的用户就可以不用密码而以sysdba登录数据库了,如sqlplus sys as sysdba,甚至是指定了一个错误的密码也可以登录sqlplus sys/aaaaa@orcl as sysdba;,因为这时候不检查密码,实际上根本不检查是不是sys用户,只要指定了as sysdba 任何用户都可以登录。
第二步,重新建立口令文件:orapwd file=Dorapwd file=F:\oracleintall\intall1\product\11.2.0\dbhome_1\database\PWDoracle.ora password=admin
第三步,将数据库登录改为数据库认证:(:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\sqlnet.ora)
SQLNET.AUTHENTICATION_SERVICES= (NONE)
这时候再以不正确的密码登录就会得到错误:ORA-01017: invalid username/password; logon denied
以第二步指定的密码则可以正确登录:sqlplus sys/admin@orcl as sysdba;
可以使用ORAPWD.EXE 工具修改密码。
把原来的密码文件可以删除的,再重建
开始菜单->运行->输入‘CMD’,打开命令提示符窗口,输入如下命令:
orapwd file=F:\oracleintall\intall1\product\11.2.0\dbhome_1\database\PWDoracle.ora password=sys