加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 15:34:03 所属栏目:百科 来源:网络整理
导读:密码文件(password file)是一个可选的文件,允许远程SYSDBA或管理员访问数据库。 启动Oracle时,还没有数据库可以用来验证密码。在本地系统上启动Oracle时,Oracle会利用操作系统来执行这种认证。安装Oracle时,会要求完成完成的人指定管理员“组”。在Unix/

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

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

[root@rhel6~]#idmysql
uid=496(mysql)gid=495(mysql)groups=495(mysql),500(oinstall)
[root@rhel6~]#su-mysql
-bash-4.1$exportORACLE_HOME=/u02/app/oracle/product/11.2.4/db1
-bash-4.1$exportORACLE_SID=orcl
-bash-4.1$cd$ORACLE_HOME/bin
-bash-4.1$./sqlplus/assysdba

SQL*Plus:Release11.2.0.4.0ProductiononThuDec1521:32:052016

Copyright(c)1982,2013,Oracle.Allrightsreserved.

ERROR:
ORA-01017:invalidusername/password;logondenied


Enteruser-name:^C
-bash-4.1$su
Password:
[root@rhel6bin]#usermod-Gdbamysql
[root@rhel6bin]#idmysql
uid=496(mysql)gid=495(mysql)groups=495(mysql),501(dba)
[root@rhel6bin]#exit
exit
-bash-4.1$./sqlplus/assysdba

SQL*Plus:Release11.2.0.4.0ProductiononThuDec1521:32:362016

Copyright(c)1982,Oracle.Allrightsreserved.


Connectedto:
OracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProduction
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions

sys@ORCL>showuser
USERis"SYS"

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

C:Usersvictor>sqlplus/@orclassysdba

SQL*Plus:Release12.1.0.1.0Productionon星期四12月1521:42:042016

Copyright(c)1982,Oracle.Allrightsreserved.

ERROR:
ORA-01017:invalidusername/password;logondenied

在网络上,对于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@rhel6dbs]$whichorapwd
/u02/app/oracle/product/11.2.4/db1/bin/orapwd
[oracle@rhel6dbs]$orapwd
Usage:orapwdfile=<fname>entries=<users>force=<y/n>ignorecase=<y/n>nosysdba=<y/n>

where
file-nameofpasswordfile(required),password-passwordforSYSwillbepromptedifnotspecifiedatcommandline,entries-maximumnumberofdistinctDBA(optional),force-whethertooverwriteexistingfile(optional),ignorecase-passwordsarecase-insensitive(optional),nosysdba-whethertoshutouttheSYSDBAlogon(optionalDatabaseVaultonly).

Theremustbenospacesaroundtheequal-to(=)character.
[oracle@rhel6dbs]$pwd
/u02/app/oracle/product/11.2.4/db1/dbs
[oracle@rhel6dbs]$orapwdfile=orapw$ORACLE_SIDpassword=oracleentries=20
[oracle@rhel6dbs]$ls-lorapw$ORACLE_SID
-rw-r-----1oracleoinstall3584Dec1521:55orapworcl

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

C:Usersvictor>sqlplussys/oracle@orclassysdba

SQL*Plus:Release12.1.0.1.0Productionon星期四12月1522:00:242016

Copyright(c)1982,Oracle.Allrightsreserved.

已连接到空闲例程。

SQL>startup
ORACLE例程已经启动。

TotalSystemGlobalArea784998400bytes
FixedSize2257352bytes
VariableSize754978360bytes
DatabaseBuffers20971520bytes
RedoBuffers6791168bytes
数据库装载完毕。
数据库已经打开。

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

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

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

[oracle@rhel6dbs]$stringsorapworcl
][Z
ORACLERemotePasswordfile
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
mHD2

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

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

V$PWFILE_USERSlistsallusersinthepasswordfile,andindicateswhethertheuserhasbeengrantedtheSYSDBA,SYSOPER,andSYSASMprivileges.
USERNAMEVARCHAR2(30)Nameoftheuserthatiscontainedinthepasswordfile
SYSDBAVARCHAR2(5)IndicateswhethertheusercanconnectwithSYSDBAprivileges(TRUE)ornot(FALSE)
SYSOPERVARCHAR2(5)IndicateswhethertheusercanconnectwithSYSOPERprivileges(TRUE)ornot(FALSE)
SYSASMVARCHAR2(5)IndicateswhethertheusercanconnectwithSYSASMprivileges(TRUE)ornot(FALSE)
sys@ORCL>select*fromv$pwfile_users;

USERNAME										SYSDBA	SYSOPER	SYSASM
---------------------------------------------------------------------------------------------------------------------------------------
SYS											TRUE	TRUE	FALSE
--给用户zx赋予SYSDBA权限可以看到v$pwfile_users多了一条记录,而密码文件orapworcl也多了一行串码。
sys@ORCL>grantsysdbatozx;

Grantsucceeded.

sys@ORCL>select*fromv$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
ORACLERemotePasswordfile
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
mHD2
7B06550956254585
--给用户zx赋予SYSOPER的权限,可以看到v$pwfile_users的zx行状态发生了变化,但是orapworcl没有变化
sys@ORCL>grantsysopertozx;

Grantsucceeded.

sys@ORCL>select*fromv$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
ORACLERemotePasswordfile
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*fromv$pwfile_users;

norowsselected

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*fromv$pwfile_users;

USERNAME										SYSDBA	SYSOPER	SYSASM
---------------------------------------------------------------------------------------------------------------------------------------
SYS											TRUE	TRUE	FALSE
ZX											TRUE	TRUE	FALSE
--测试zx用户远程以SYSDBA登录
C:Usersvictor>sqlpluszx/zx@orclassysdba

SQL*Plus:Release12.1.0.1.0Productionon星期四12月1522:34:092016

Copyright(c)1982,Oracle.Allrightsreserved.


连接到:
OracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProduction
WiththePartitioning,DataMiningandRealApplicationTestingoptions

SQL>showuser;
USER为"SYS"
--回收用户zx的SYSDBA和SYSOPER权限,v$pwfile_users中的zx记录行没有了,密码文件orapworcl没有变化
sys@ORCL>revokesysdba,sysoperfromzx;

Revokesucceeded.

sys@ORCL>select*fromv$pwfile_users;

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

sys@ORCL>!strings/u02/app/oracle/product/11.2.4/db1/dbs/orapworcl
][Z
ORACLERemotePasswordfile
INTERNAL
AB27B53EDC5FEF41
8A8F025737A9097A
mHD2
7B06550956254585
--再次测试zx用户远程以SYSDBA登录,现在无法登录
C:Usersvictor>sqlpluszx/zx@orclassysdba

SQL*Plus:Release12.1.0.1.0Productionon星期四12月1522:35:172016

Copyright(c)1982,Oracle.Allrightsreserved.

ERROR:
ORA-01017:invalidusername/password;logondenied


参考: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编程艺术 深入数据库体系结构》

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读