论坛
门户
内部优惠
喜欢
话题
VIP会员
搜索
新浪微博
登录
注册
100%
100%
首页
>
软件开发
>
java语言
>
在Java程式中使用Oracle外部用户
回复
« 返回列表
111111
精灵王
注册日期
2010-12-08
发帖数
640
QQ
火币
1103枚
粉丝
120
关注
75
加关注
写私信
打招呼
阅读:
3359
回复:
0
在Java程式中使用Oracle外部用户
楼主
#
更多
只看楼主
倒序阅读
发布于:2010-12-15 12:40
保存
100%
100%
[]
1
Oracle
外部用户
(External User)
能访问
Oracle
数据库,但该用户
不必
Oracle
密码验证,验证工作交由操作系统来完成。这就意味着,如果用户能通过某一用户名
/
密码进入操作系统,那么他就有权限访问
Oracle
数据库。试想,如果一台客户机经常访问
Oracle
数据库,用户会非常厌烦每一次都要输入同样的用户名和口令。另外,从安全角度考虑,每次输入用户名、口令也不太合适。
向Oracle数据库中添加外部用户
我们使用
ora_server@ora_carl
(
ora_server
是数据库所在的机器名,
ora_carl
是数据库的实例名)为例,来说明在
Oracle
中怎么创建外部用户。我们假定客户端的操作系统为
视窗系统 XP
,用户名是
carlwu
,具体步骤如下:
1)
在客户机的
SQL/Plus
中以系统管理员身份登陆
SQL> conn sys/manager@ora_carl as sysdba
已连接。
2
)查看参数
os_authent_prefix
(操作系统验证前缀)参数
SQL> show parameters os_authent_prefix
NAME TYPE VALUE
------------------------------------ ---------------------------------------------------------------
os_authent_prefix string OPS$
3
)创建外部用户
carlwu
,注意用户名前面要加上步中查出来的
os_authent_prefix
(操作系统验证前缀)参数值,本例中为
ops$
。
SQL> create user ops$carlwu identified externally;
用户已创建
4
)将
connect
,
resource
权限赋给该外部用户
SQL> grant connect to ops$carlwu ;
授权成功。
SQL> exit
从
Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.5.0 - Production
中断开
5
)在客户机上验证刚才创建的外部用户是否成功,注意在
conn
后省略了用户名
/
口令的字样,只剩下
/@
加上实例名。
C:\Documents and Settings\carlwu>sqlplus /nolog
SQL*Plus: Release 9.2.0.5.0 - Production on
星期五
12
月
2 16:12:09 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> conn /@ora_carl;
已连接。
恭喜,到目前为止,我们已成功创建了一个
Oracle
外部用户。
java
程式
TestExternalUser.java
原始码如下所示,
testExternalUser()
方法使用外部用户连接
Oracle
数据库
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestExternalUser {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestExternalUser teu = new TestExternalUser();
teu.testExternalUser();
}
public void testExternalUser() {
Connection conn1 = null;
try {
conn1 = getCon();
PreparedStatement ps = conn1
.prepareStatement("select to_char(sysdate,’YYYY-MM-DD HH24:MI:SS’) from dual");
ResultSet rs = ps.executeQuery();
if (rs.next()) {
System.out.println("Database server’s date is:"+rs.getString(1));
}
rs.close();
ps.close();
} catch (SQLException sqle) {
sqle.printStackTrace();
} catch (ClassNotFoundException cnf) {
cnf.printStackTrace();
}finally {
closeCon(conn1);
}
}
/**
* Get target datbase’s connection.
*
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
private Connection getCon() throws ClassNotFoundException, SQLException {
Connection con;
java.lang.Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection(
"jdbc:oracle:oci:/@ora_carl"
);
con.setAutoCommit(false);
return con;
}
/**
* Close database connection
*
*/
private void closeCon(Connection con) {
try {
con.close();
con = null;
} catch (SQLException sqle) {
sqle.printStackTrace();
}
}
}
注意上面代码中红色字体部分
Oracle
连接串的写法,和普通的
Oracle JDBC
连接串
(jdbc:oracle:thin:user/pwd@server:1521:instance)
的不同之处,该连接串中省略了用户名
/
密码。
喜欢
0
评分
0
最新喜欢:
回复
100%
发帖
回复
« 返回列表
普通帖
您需要登录后才可以回帖,
登录
或者
注册
100%
返回顶部
关闭
最新喜欢