多謝codePeon,全是粗心的"by"惹的禍.去掉by,則成功了.
先測試了你上面的質疑:
1.os_authent_prefix="OPS$",按密碼認證建立的(by)且以"OPS$"開頭命名的使用者,還是會認為是外部認證
===============================================================
SQL> create user "OPS$MYCOMP\OWNER" identified by externally;
使用者已建立
SQL> grant connect to "OPS$MYCOMP\OWNER";
授權成功。
SQL> connect /;
已連接配接。
SQL> show user;
USER 為"OPS$MYCOMP\OWNER"
==================================================================
2.os_authent_prefix="XX$"(或其它值),按密碼認證建立的(by)且以"XX$"開頭命名的使用者,卻不會認為是外部認證
===================================================================
SQL> alter system set os_authent_prefix="XX$" scope=spfile;
系統已更改。
SQL> shutdown
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup
ORACLE 例程已經啟動。
資料庫裝載完畢。
資料庫已經打開。
SQL> create user "XX$MYCOMP\OWNER" identified by externally
使用者已建立
SQL> grant connect to "XX$MYCOMP\OWNER";
授權成功。
SQL> connect /;
ERROR:
ORA-01017: invalid username/password; logon denied
警告: 您不再連接配接到 ORACLE。
SQL> connect "XX$MYCOMP\OWNER"/externally;
已連接配接。
===================================================================
将"by"去掉後,"XX$"測試成功
===================================================================
SQL> alter system set os_authent_prefix="XX$" scope=spfile;
系統已更改。
SQL> shutdown;
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup;
ORACLE 例程已經啟動。
資料庫裝載完畢。
資料庫已經打開。
SQL> connect / as sysdba;
已連接配接。
SQL> create user "XX$MYCOMP\OWNER" identified externally;
使用者已建立
SQL> grant connect to "XX$MYCOMP\OWNER";
授權成功。
SQL> connect /;
已連接配接。
SQL> show user;
USER 為"XX$MYCOMP\OWNER"
===================================================================