密码文件(password file)是一个可选的文件,允许远程SYSDBA或管理员访问数据库。
启动Oracle时,还没有数据库可以用来验证密码。在本地系统上启动Oracle时,Oracle会利用操作系统来执行这种认证。安装Oracle时,会要求完成完成的人指定管理员“组”。在Unix/Linux上,这个组一般默认为dba,在Windows上默认为OSDBA,不过也可以是平台上任何合法的组名。这个组很特殊,因为这个组中的任何用户都可以作为SYSDBA连接Oracle,而无需指定用户名或密码。
[root@rhel6 ~]# id mysql uid=496(mysql) gid=495(mysql) groups=495(mysql),500(oinstall) [root@rhel6 ~]# 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: [root@rhel6 bin]# usermod -G dba mysql [root@rhel6 bin]# id mysql uid=496(mysql) gid=495(mysql) groups=495(mysql),501(dba) [root@rhel6 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 sys@ORCL>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目录中。
[oracle@rhel6 dbs]$ which orapwd /u02/app/oracle/product/11.2.4/db1/bin/orapwd [oracle@rhel6 dbs]$ orapwd Usage: orapwd file=目前该文件中只有一个用户,也就是用户SYS,尽管数据库上还有其他SYSDBA账户,但它们还不在密码文件中。不过基于以上设置我们可以作为SYSDBA通过网络连接Oracle,即使Oracle没有启动,并且可以远程启动Oracle。
C:\Users\victor>sqlplus sys/oracle@orcl 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命令查看
[oracle@rhel6 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) sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE --给用户zx赋予SYSDBA权限可以看到v$pwfile_users多了一条记录,而密码文件orapworcl也多了一行串码。 sys@ORCL>grant sysdba to zx; Grant succeeded. sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE ZX TRUE FALSE FALSE sys@ORCL>!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没有变化 sys@ORCL>grant sysoper to zx; Grant succeeded. sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE ZX TRUE TRUE FALSE sys@ORCL>!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又有记录。 sys@ORCL>! mv /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl_orcl sys@ORCL>select * from v$pwfile_users; no rows selected sys@ORCL>! mv /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl_orcl /u02/app/oracle/product/11.2.4/db1/dbs/orapworcl sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE ZX TRUE TRUE FALSE --测试zx用户远程以SYSDBA登录 C:\Users\victor>sqlplus zx/zx@orcl 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没有变化 sys@ORCL>revoke sysdba,sysoper from zx; Revoke succeeded. sys@ORCL>select * from v$pwfile_users; USERNAME SYSDBA SYSOPER SYSASM ------------------------------------------------------------------------------------------ --------------- --------------- --------------- SYS TRUE TRUE FALSE sys@ORCL>!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/zx@orcl 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编程艺术 深入数据库体系结构》
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。