阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

225次阅读
没有评论

共计 7241 个字符,预计需要花费 19 分钟才能阅读完成。

密码文件 (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=<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.
[oracle@rhel6 dbs]$ pwd
/u02/app/oracle/product/11.2.4/db1/dbs
[oracle@rhel6 dbs]$ orapwd file=orapw$ORACLE_SID password=oracle entries=20
[oracle@rhel6 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/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

更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-12/138686.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计7241字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中