1. 测试环境:

小机类型:HP RX8640(IA)
操作系统版本:Windows 2003 Server EE
数据库版本:Oracle 9.2.0.8
数据库名称:IATEST
操作系统控制:Windows域
域名称:domain
主机名称:prodoradb.domain.cn

2. 主机配置 – sqlnet.ora文件:

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

SQLNET.AUTHENTICATION_SERVICES= (NTS)

3. 主机配置 – 用户组

ORA_DBA组:
Administrator (本机管理员)
domain\doadmin (域控管理员用户)
domain\dba01 (Oracle的DBA用户)

4. 数据库配置

SQL> select name from v$database;

NAME
---------
IATEST

SQL> show parameter remote

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------
remote_archive_enable                string      true
remote_dependencies_mode             string      TIMESTAMP
remote_listener                      string
remote_login_passwordfile            string      EXCLUSIVE
remote_os_authent                    boolean     FALSE
remote_os_roles                      boolean     FALSE

5. 用domain\dba01登陆到主机上,测试OS认证sys用户登陆

C:\>sqlplus /nolog

SQL*Plus: Release 9.2.0.8.0 - Production on 星期五 10月 31 13:49:22 2008

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL> conn / as sysdba
Connected.
SQL> select name from v$database;

NAME
---------
IATEST

可以看到,本机通过OS认证登陆数据库是可行的。

6. 远程客户机配置 – sqlnet.ora文件

SQLNET.AUTHENTICATION_SERVICES = (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

客户机上和主机上都设置为允许OS认证登陆

7. 远程客户机配置 – tnsnames.ora文件

IATEST =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.241.5.11)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = iatest)
    )
  )

8. 用domain\dba01登陆到远程客户上,测试OS认证sys用户登陆

C:\>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 10月 31 14:21:58 2008

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

SQL> conn sys/1@iatest as sysdba
已连接。
SQL> conn sys/2@iatest as sysdba
已连接。
SQL> conn /@iatest as sysdba
已连接。
SQL> show user
USER 为 "SYS"

可以看到,在客户机上同样可以通过OS认证登陆到数据库

9. 修改参数remote_login_passwordfile=NONE,重复以上测试,同样成功。

10. 远程客户机修改配置 – sqlnet.ora文件

# SQLNET.AUTHENTICATION_SERVICES = (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)

11. 用domain\dba01再次登陆到远程客户上,测试OS认证sys用户登陆

C:\>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期五 10月 31 14:29:57 2008

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

SQL> conn sys/1@iatest as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied

SQL> conn sys/2@iatest as sysdba
ERROR:
ORA-01017: invalid username/password; logon denied

12. 同时测试不修改远程客户机的sqlnet.ora,而对主机的sqlnet.ora进行如上修改,测试结果一致。

结论:
1. 在一个Windows域控中的服务器和客户机,只要开启了OS认证的开关,都能通过OS认证登陆,而无视其它参数的设置。
2. 主机关闭OS认证开关,则可以杜绝OS认证登陆;远程机上关闭,则只能杜绝该终端的OS认证登陆。
3. 同时可以推断,Windows域管理的方式,可以欺骗Oracle,让其误认为域用户登陆的远程机为主机。

建议:
1. 对于生产用数据库,尽可能不要使用Windows操作系统。
2. 即使使用Windows操作系统,也尽可能不要将其放入域控中。
3. 如果以上皆不可满足,为了安全起见,一定要在服务器端,关闭OS认证开关。

Trackback

no comment untill now

Add your comment now

切换到手机版