本测试参照了yangtingkun(杨廷琨)大师及ZALBB的文章。他们可是在2005年就在讨这个问题了,那时哥还在搞集成呢,差距真的不是一点点呀!
yangtingkun
http://blog.itpub.net/post/468/4223
ZALBB
http://www.itpub.net/showthread.php?s=&threadid=162971
我们知道,在oracle中有一个初始化参数os_authent_prefix,数据库中的外部用户名应该是OS_AUTHENT_PREFIX的值||操作系统的用户名。如果os_authent_prefix的值是'A',而操作系统用户名为B,则数据库中的外部验证用户名应该是'AB'。在Orale 10g中为了保持向后兼容,这个初始化参数值设为OPS$,当然在Oracle 10g中这个值可以设置为空。如果这个参数设为空时,数据库中的外部用户名与操作系统的用户名保持一致。
而windows下的注册表中包括一个OSAUTH_PREFIX_DOMAIN项。这个项在默认情况下没有明确列出,但是这项的默认值是TRUE。也就是说在注册表HKEY_LOCAL_MACHINE>SOFTWARE>ORACLE>KEY_OraDb10g_home目录下如果没有OSAUTH_PREFIX_DOMAIN这项,说明OSAUTH_PREFIX_DOMAIN为TRUE,这时进行操作系统验证需要在用户名和os_authent_prefix之间增加'主机名\'信息。当明确设置这项为false时,则规则和UNIX系统中的操作系统验证一致。OSAUTH_PREFIX_DOMAIN项设置的位置见下面3张图:
操作系统:WINDOWS 7 32位
机器名:zangblpc
Oracle版本:oracle 10.2.0.3
SQLNET.ORA文件配置(windows7):SQLNET.AUTHENTICATION_SERVICES= (NTS)
数据库中REMOTE_OS_AUTHENT参数值为:false
用于测试的操作系统用户名:zbl
OSAUTH_PREFIX_DOMAIN变量为默认值TRUE,OS_AUTHENT_PREFIX参数为默认值OPS$(当然OS_AUTHENT_PREFIX也可改成任意你想用的参数值,如:REM$)。测试过程如下
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on 星期一 8月 8 22:57:55 2011
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> set line 120
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
------------------------------------ ---------------------- -----------------
os_authent_prefix string OPS$
SQL>
SQL> create user "OPS$ZANGBLPC\ZBL" identified externally;
用户已创建。
SQL> grant connect to "OPS$ZANGBLPC\ZBL";
授权成功。
SQL>
注意这里创建OPS$ZANGBLPC\ZBL用户时必须用双引号引起来,否则会报ORA-00911: 无效字符的错误,这是因为这个里有特殊字符\,报错信息如下:
SQL> create user OPS$ZANGBLPC\ZBL identified externally;
create user OPS$ZANGBLPC\ZBL identified externally
*
第 1 行出现错误:
ORA-00911: 无效字符
SQL>
这个时候在操作系统中切换登录到zbl用户下,运行sqlplus /或sqlplus /nolog,connect /
C:\Users\ZBL>sqlplus /
SQL*Plus: Release 10.2.0.3.0 - Production on 星期一 8月 8 23:18:42 2011
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> show user
USER 为 "OPS$ZANGBLPC\ZBL"
SQL>
OSAUTH_PREFIX_DOMAIN变量为默认值TRUE,OS_AUTHENT_PREFIX参数为空值:
SQL> alter system set os_authent_prefix='' scope=spfile;
系统已更改。
SQL> startup force;
ORACLE 例程已经启动。
Total System Global Area 176160768 bytes
Fixed Size 1289532 bytes
Variable Size 92275396 bytes
Database Buffers 75497472 bytes
Redo Buffers 7098368 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
os_authent_prefix string
SQL> drop user "OPS$ZANGBLPC\ZBL" cascade;
用户已删除。
SQL> set wrap off
SQL> select username from dba_users where account_status='OPEN';
USERNAME
------------------------------------------------------------
SYSTEM
SYS
ZBLTEST1
MGMT_VIEW
PWD_MGR
SYSMAN
ZBLTEST
DBSNMP
ASSET_MGR
ZBLCHINA
ZANGBLPCZBL
USERNAME
------------------------------------------------------------
ZJJCK
ZJGLK
ADMINISTRATOR
已选择14行。
SQL> create user "ZANGBLPC\ZBL" identified externally;
用户已创建。
SQL> grant connect to "ZANGBLPC\ZBL";
授权成功。
SQL>
这个时候在操作系统中切换登录到zbl用户下,运行sqlplus /或sqlplus /nolog,connect /
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\ZBL>sqlplus /
SQL*Plus: Release 10.2.0.3.0 - Production on 星期一 8月 8 23:35:21 2011
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> show user
USER 为 "ZANGBLPC\ZBL"
SQL>
OSAUTH_PREFIX_DOMAIN变量为默认值FALSE,OS_AUTHENT_PREFIX参数为默认值OPS$(当然OS_AUTHENT_PREFIX也可改成任意你想用的参数值,如:REM$):
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
os_authent_prefix string
SQL> alter system set os_authent_prefix='OPS$' scope=spfile;
系统已更改。
SQL> startup force
ORACLE 例程已经启动。
Total System Global Area 176160768 bytes
Fixed Size 1289532 bytes
Variable Size 96469700 bytes
Database Buffers 71303168 bytes
Redo Buffers 7098368 bytes
数据库装载完毕。
数据库已经打开。
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
os_authent_prefix string OPS$
SQL> drop user "ZANGBLPC\ZBL" CASCADE;
用户已删除。
SQL> select username from dba_users where account_status='OPEN';
USERNAME
------------------------------------------------------------
SYSTEM
SYS
ZBLTEST1
MGMT_VIEW
PWD_MGR
SYSMAN
ZBLTEST
DBSNMP
ASSET_MGR
ZBLCHINA
ZANGBLPCZBL
USERNAME
------------------------------------------------------------
ZJJCK
ZJGLK
ADMINISTRATOR
已选择14行。
SQL> create user ops$zbl identified externally;
用户已创建。
SQL> grant connect to ops$zbl;
授权成功。
SQL>
这个时候在操作系统中切换登录到zbl用户下,运行sqlplus /或sqlplus /nolog,connect /
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\ZBL>sqlplus /
SQL*Plus: Release 10.2.0.3.0 - Production on 星期一 8月 8 23:53:07 2011
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> show user
USER 为 "OPS$ZBL"
SQL>
OSAUTH_PREFIX_DOMAIN变量为默认值FALSE,OS_AUTHENT_PREFIX参数为空值:
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
os_authent_prefix string OPS$
SQL> alter system set os_authent_prefix='' scope=spfile;
系统已更改。
SQL> startup force
ORACLE 例程已经启动。
Total System Global Area 176160768 bytes
Fixed Size 1289532 bytes
Variable Size 100664004 bytes
Database Buffers 67108864 bytes
Redo Buffers 7098368 bytes
数据库装载完毕。
数据库已经打开。
SQL> drop user ops$zbl cascade;
用户已删除。
SQL> select username from dba_users where account_status='OPEN';
USERNAME
------------------------------------------------------------
SYSTEM
SYS
PWD_MGR
ZBLTEST1
SYSMAN
DBSNMP
MGMT_VIEW
ASSET_MGR
ZBLCHINA
ZJJCK
ZJGLK
已选择11行。
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
os_authent_prefix string
SQL> create user zbl identified externally;
用户已创建。
SQL> grant connect to zbl;
授权成功。
SQL>
这个时候在操作系统中切换登录到zbl用户下,运行sqlplus /或sqlplus /nolog,connect /
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\ZBL>sqlplus /
SQL*Plus: Release 10.2.0.3.0 - Production on 星期二 8月 9 00:03:27 2011
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> show user
USER 为 "ZBL"
SQL>
数据库所在的主机的操作系统:WINDOWS 7 32位
客户端所在主机的操作系统:Oracle Enterpris Linux 5.5 x86-64
数据库主机机器名:zangblpc
Oracle数据库版本:Oracle 10.2.0.3
Oracel Client数据库版本:Oracle 10.2.0.5
SQLNET.ORA文件配置(数据库端):SQLNET.AUTHENTICATION_SERVICES= (NTS)
数据库中REMOTE_OS_AUTHENT参数值为:true
用于测试的操作系统用户名:zbl
数据库的监听地址为172.19.3.24,端口为1521
OSAUTH_PREFIX_DOMAIN变量为默认值FALSE,OS_AUTHENT_PREFIX参数为空值:
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
os_authent_prefix string OPS$
SQL> alter system set os_authent_prefix='' scope=spfile;
系统已更改。
SQL> startup force
ORACLE 例程已经启动。
Total System Global Area 176160768 bytes
Fixed Size 1289532 bytes
Variable Size 100664004 bytes
Database Buffers 67108864 bytes
Redo Buffers 7098368 bytes
数据库装载完毕。
数据库已经打开。
SQL> drop user ops$zbl cascade;
用户已删除。
SQL> select username from dba_users where account_status='OPEN';
USERNAME
------------------------------------------------------------
SYSTEM
SYS
PWD_MGR
ZBLTEST1
SYSMAN
DBSNMP
MGMT_VIEW
ASSET_MGR
ZBLCHINA
ZJJCK
ZJGLK
已选择11行。
SQL> show parameter os_authent_prefix
NAME TYPE VALUE
------------------------------------ ---------------------- ------------------------------
os_authent_prefix string
SQL> create user zbl identified externally;
用户已创建。
SQL> grant connect to zbl;
授权成功。
SQL>
在Oracle Client机器上创建zbl用户:
[root@amdocs43 ~]# useradd -g dba -G oinstall zbl
[root@amdocs43 ~]# passwd zbl
Changing password for user zbl.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@amdocs43 ~]# ping 172.19.3.24
PING 172.19.3.24 (172.19.3.24) 56(84) bytes of data.
64 bytes from 172.19.3.24: icmp_seq=1 ttl=128 time=0.220 ms
64 bytes from 172.19.3.24: icmp_seq=2 ttl=128 time=0.206 ms
64 bytes from 172.19.3.24: icmp_seq=3 ttl=128 time=0.290 ms
64 bytes from 172.19.3.24: icmp_seq=4 ttl=128 time=0.188 ms
--- 172.19.3.24 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 0.188/0.226/0.290/0.038 ms
[root@amdocs43 ~]#
这个时候在Linux主机中以zbl用户登录(当然这台机机需要已经安装了Oracle Client),在客户机的$ORACLE_HOME/network/admin/tnsnames.ora文件里添加如下内容:
MYDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.19.3.24)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydb)
)
)
[zbl@amdocs43 ~]$ tnsping mydb
TNS Ping Utility for Linux: Version 10.2.0.5.0 - Production on 09-AUG-2011 10:22:26
Copyright (c) 1997, 2010, Oracle. All rights reserved.
Used parameter files:
/oracle/product/10.2/db/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.19.3.24)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = mydb)))
OK (10 msec)
[zbl@amdocs43 ~]$
运行sqlplus /@mydb或sqlplus /nolog,connect /@mydb
[zbl@amdocs43 ~]$ whoami
zbl
[zbl@amdocs43 ~]$ sqlplus /@mydb
SQL*Plus: Release 10.2.0.5.0 - Production on Tue Aug 9 10:36:36 2011
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> show user
USER is "ZBL"
SQL> quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
[zbl@amdocs43 ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.5.0 - Production on Tue Aug 9 11:02:22 2011
Copyright (c) 1982, 2010, Oracle. All Rights Reserved.
SQL> connect /@mydb
Connected.
SQL> show user
USER is "ZBL"
SQL>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/63845/viewspace-704472/,如需转载,请注明出处,否则将追究法律责任。