Oracle的密码文件及远程SYSDBA登录

密码文件(password file)是一个可选的文件,允许远程SYSDBA或管理员访问数据库。

启动Oracle时,还没有数据库可以用来验证密码。在本地系统上启动Oracle时,Oracle会利用操作系统来执行这种认证。安装Oracle时,会要求完成完成的人指定管理员“组”。在Unix/Linux上,这个组一般默认为dba,在Windows上默认为OSDBA,不过也可以是平台上任何合法的组名。这个组很特殊,因为这个组中的任何用户都可以作为SYSDBA连接Oracle,而无需指定用户名或密码。

[[email protected] ~]# id mysql
uid=496(mysql) gid=495(mysql) groups=495(mysql),500(oinstall)
[[email protected] ~]# su - mysql
-bash-4.1$ export ORACLE_HOME=/u02/app/oracle/product/11.2.4/db1
-bash-4.1$ export ORACLE_SID=orcl
-bash-4.1$ cd $ORACLE_HOME/bin
-bash-4.1$ ./sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Dec 15 21:32:05 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied

Enter user-name: ^C
-bash-4.1$ su
Password: 
[[email protected] bin]# usermod -G dba mysql
[[email protected] bin]# id mysql
uid=496(mysql) gid=495(mysql) groups=495(mysql),501(dba)
[[email protected] bin]# exit
exit
-bash-4.1$ ./sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu Dec 15 21:32:36 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

[email protected]>show user
USER is "SYS"

现在可以连接数据库做管理工作,或启动关闭数据库。如果要从另外一台机器通过网络完成这个操作会怎么样呢?下面我使用@连接串来连接:

C:\Users\victor>sqlplus /@orcl as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 星期四 12月 15 21:42:04 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied

在网络上,对于SYSDBA的操作系统认证不再奏效,即使把很不安全的REMOTE_OS_AUTHENT参数设置为TRUE也不例外。所以操作系统认证不可行。因此密码文件应运而生了。

密码文件保存了一个用户名和密码列表,这些用户名和密码分别对应于通过网络远程认证为SYSDBA的用户。Oracle必须使用这个文件来认证用户,而不是数据库中存储的正常密码列表。

下面验证这种情况。首先,设置REMOTE_LOGIN_PASSWORDFILE,有三个值:NONE,意味着没有密码文件,不存在“远程SYSDBA登录”、SHARED,多个数据库可以使用同样的密码文件、EXCLUSIVE,只有一个数据库使用一个给定的密码文件。这里设置为EXCLUSIVE。

alter system set remote_login_passwordfile=exclusive scope=spfile;

修改这个参数需要重启数据库。

使用orapwd创建和填写这个初始的密码文件,密码文件位于$ORACLE_HOME/dbs目录中。

[[email protected] dbs]$ which orapwd
/u02/app/oracle/product/11.2.4/db1/bin/orapwd
[[email protected] dbs]$ orapwd
Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>

  where
    file - name of password file (required),
    password - password for SYS will be prompted if not specified at command line,
    entries - maximum number of distinct DBA (optional),
    force - whether to overwrite existing file (optional),
    ignorecase - passwords are case-insensitive (optional),
    nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).
    
  There must be no spaces around the equal-to (=) character.
[[email protected] dbs]$ pwd
/u02/app/oracle/product/11.2.4/db1/dbs
[[email protected] dbs]$ orapwd file=orapw$ORACLE_SID password=oracle entries=20
[[email protected] dbs]$ ls -l orapw$ORACLE_SID
-rw-r----- 1 oracle oinstall 3584 Dec 15 21:55 orapworcl

目前该文件中只有一个用户,也就是用户SYS,尽管数据库上还有其他SYSDBA账户,但它们还不在密码文件中。不过基于以上设置我们可以作为SYSDBA通过网络连接Oracle,即使Oracle没有启动,并且可以远程启动Oracle。

C:\Users\victor>sqlplus sys/[email protected] as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 星期四 12月 15 22:00:24 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup
ORACLE 例程已经启动。

Total System Global Area  784998400 bytes
Fixed Size                  2257352 bytes
Variable Size             754978360 bytes
Database Buffers           20971520 bytes
Redo Buffers                6791168 bytes
数据库装载完毕。
数据库已经打开。

注意:如果上边这一步遇到ORA-12505 "TNS:listener does not currently know of SID given in connect descriptor"说明没有配置数据库实例的静态监听。

创建了密码文件,那我们能不能看看密码文件里到底记录了什么内容呢,会不会把我们的密码泄漏呢?

密码文件是一个二进制文件是不能直接查看的,Linux上可以使用strings命令查看

[[email protected] dbs]$ strings orapworcl
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
mHD2

从输出可以看出密码文件中没有使用明文记录我们的密码而是记录了一些串码。

其实这个密码文件还和数据库中的一个视图v$pwfile_users有一些关系

V$PWFILE_USERS lists all users in the password file, and indicates whether the user has been granted the SYSDBA, SYSOPER, and SYSASM privileges.
USERNAME VARCHAR2(30) Name of the user that is contained in the password file
SYSDBA VARCHAR2(5) Indicates whether the user can connect with SYSDBA privileges (TRUE) or not (FALSE)
SYSOPER VARCHAR2(5) Indicates whether the user can connect with SYSOPER privileges (TRUE) or not (FALSE)
SYSASM VARCHAR2(5) Indicates whether the user can connect with SYSASM privileges (TRUE) or not (FALSE)
[email protected]>select * from v$pwfile_users;

USERNAME										   SYSDBA	   SYSOPER	   SYSASM
------------------------------------------------------------------------------------------ --------------- --------------- ---------------
SYS											   TRUE 	   TRUE 	   FALSE
--给用户zx赋予SYSDBA权限可以看到v$pwfile_users多了一条记录,而密码文件orapworcl也多了一行串码。
[email protected]>grant sysdba to zx;

Grant succeeded.

[email protected]>select * from v$pwfile_users;

USERNAME										   SYSDBA	   SYSOPER	   SYSASM
------------------------------------------------------------------------------------------ --------------- --------------- ---------------
SYS											   TRUE 	   TRUE 	   FALSE
ZX											   TRUE 	   FALSE	   FALSE

[email protected]>!strings /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
mHD2
7B06550956254585
--给用户zx赋予SYSOPER的权限,可以看到v$pwfile_users的zx行状态发生了变化,但是orapworcl没有变化
[email protected]>grant sysoper to zx;

Grant succeeded.

[email protected]>select * from v$pwfile_users;

USERNAME										   SYSDBA	   SYSOPER	   SYSASM
------------------------------------------------------------------------------------------ --------------- --------------- ---------------
SYS											   TRUE 	   TRUE 	   FALSE
ZX											   TRUE 	   TRUE 	   FALSE

[email protected]>!strings /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
mHD2
7B06550956254585
--移除密码文件再移回来,移除密码文件后v$pwfile_users变为空,移回后v$pwfile_users又有记录。
[email protected]>! mv /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl_orcl

[email protected]>select * from v$pwfile_users;

no rows selected

[email protected]>! mv /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl_orcl /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl

[email protected]>select * from v$pwfile_users;

USERNAME										   SYSDBA	   SYSOPER	   SYSASM
------------------------------------------------------------------------------------------ --------------- --------------- ---------------
SYS											   TRUE 	   TRUE 	   FALSE
ZX											   TRUE 	   TRUE 	   FALSE
--测试zx用户远程以SYSDBA登录
C:\Users\victor>sqlplus zx/[email protected] as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 星期四 12月 15 22:34:09 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show user;
USER 为 "SYS"
--回收用户zx的SYSDBA和SYSOPER权限,v$pwfile_users中的zx记录行没有了,密码文件orapworcl没有变化
[email protected]>revoke sysdba,sysoper from zx;

Revoke succeeded.

[email protected]>select * from v$pwfile_users;

USERNAME										   SYSDBA	   SYSOPER	   SYSASM
------------------------------------------------------------------------------------------ --------------- --------------- ---------------
SYS											   TRUE 	   TRUE 	   FALSE

[email protected]>!strings /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl
]\[Z
ORACLE Remote Password file
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
mHD2
7B06550956254585
--再次测试zx用户远程以SYSDBA登录,现在无法登录
C:\Users\victor>sqlplus zx/[email protected] as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on 星期四 12月 15 22:35:17 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

ERROR:
ORA-01017: invalid username/password; logon denied

参考:http://www.xifenfei.com/2011/12/vpwfile_users%E5%92%8C%E5%AF%86%E7%A0%81%E6%96%87%E4%BB%B6%E5%85%B3%E7%B3%BB.html

《9i10g11g编程艺术 深入数据库体系结构》

时间: 2024-10-03 03:45:01

Oracle的密码文件及远程SYSDBA登录的相关文章

ORACLE数据库物理结构之物理文件(v$logfile,v$datafile,v$controlfile,v$arcguved_log,v$parameter,密码文件,告警文件)位置

DATABAE=物理文件.构成物理文件的逻辑结构 查看数据库名 SQL> show parameter db_nam NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ db_name                              string      gaga01

oracle ORA-01991错误--重建密码文件问题

问题现象描述: 统计服务器测试没问题,刚好上次配置系统的时候有点问题,故重装一次,配置好安全策略(最近在研究如何新配置一台服务器的时候,第一时间配置好相关的安全设置,有空再写下来). 为了省事,直接冷备份oracle的数据文件,安装好oracle后,直接恢复到原来对应的目录.启动,出现: SQL> startupORACLE 例程已经启动. Total System Global Area  135338868 bytesFixed Size                   453492 b

【密码文件丢失--恢复-1】

以oracle10g作为测试版本,删除10g的密码文件: [[email protected] ~]$ rm /u01/oracle/10g/dbs/orapwjadl10g 远程登录数据库,密码文件在远程登录时才会起作用:(此时远程登录不能连接上DB) [[email protected] ~]$ sqlplus sys/[email protected]:1521/jadl10g as sysdba SQL*Plus: Release 10.2.0.5.0 - Production on T

oracle数据库密码文件创建与使

Oracle关系数据库系统以其卓越的性能获得了广泛的应用,而保证数据库安全性是数据库管理工作的重要内容.本文在总结Oracle数据库安全管理工作的基础上,对Oracle数据库系统密码文件的创建.使用和维护作了详细的介绍,供大家参考. 在Oracle数据库系统中,用户如果要以特权用户身份(INTERNAL/SYSDBA/SYSOPER)登录Oracle数据库可以有两种 身份验证的方法:即使用与操作系统集成的身份验证或使用Oracle数据库的密码文件进行身份验证.因此,管理好密码文件,对于控制授权用

Oracle 密码文件与用户密码的关系

今天一位同事接到一项任务是修改数据库SYS和SYSTEM用户的密码,老大在布置任务的时候还带了一句别忘了同步密码文件,于是想到了自己前几天写的一篇博客介绍Oracle密码文件的,当时只是写了如何创建密码文件,如何远程使用SYSDBA登录数据库做操作,但是并没有提到密码文件中用户的密码跟数据库中用户的密码是否有关系. 下面来测试一下,我用的平台是11.2.0.4 首先修改SYS的密码 [email protected]>alter user sys identified by zhaoxu; Us

Oracle非关键文件恢复,redo、临时文件、索引文件、密码文件

增量备份的应用在recovery阶段,不再restore阶段 了解数据库设置表: SQL>desc database_properties Name                                      Null?    Type ----------------------------------------- -------- ---------------------------- PROPERTY_NAME                             NO

Oracle非关键文件恢复,日志成员、临时文件、索引表空间、口令文件(密码文件)

关键性与非关键性 非关键性文件是指数据库和大多数应用程序没有它也能继续运行的文件.例如,如果数据库丢失了一个多路复用重做日志文件,仍可使用其它重做日志文件副本来保持数据库持续运行. 虽然丢失非关键性文件不会导致数据库崩溃,但它会削弱数据库的功能.例如: 丢失索引表空间会导致应用程序和查询的运行速度大幅减慢,或者,如果这些索引用于强制实施约束,则丢失后甚至会导致应用程序无法使用. 丢失联机重做日志组(只要不是当前联机日志组)会导致在 LGWR 下一次尝试写入组时数据库操作被挂起,直到生成新的日志文

oracle 密码文件文件

密码文件作用: 密码文件用于dba用户的登录认证. dba用户:具备sysdba和sysoper权限的用户,即oracle的sys和system用户. 本地登录: 1)操作系统认证: [[email protected] ~]$ sqlplus "/as sysdba" [[email protected] ~]$ sqlplus / as sysdba [[email protected] ~]$ sqlplus sys/tiger as sysdba 2)密码文件认证: [[ema

Oracle数据库任何用户密码都能以sysdba角色登入

* 本文相关环境:Windows 10,64位操作系统:Oracle 11gR2:toad for Oracle12.1 最近在学习Oracle数据库,使用Toad for Oracle来查看数据库的信息,发现在以sysdba角色登录数据库时,无论输入什么密码,均可以连接到数据库,以为是数据库又出故障了,带着疑问,查找资料.发现里面有很多的学问,下面简单记述一下. Oracle认证用户有两种方式:操作系统认证与口令认证.操作系统认证也叫本地认证. 操作系统认证:Oracle认为操作系统用户是可靠