| 论坛注册| 加入收藏 | 设为首页| RSS
Google
您当前的位置:首页 > Linux频道 > Linux开发区 > 软件开发

在Java程序中使用Oracle外部用户

时间:2006-07-11 10:27:40  来源:  作者:carlwu

Oracle外部用户(External User)可以访问Oracle数据库,但该用户不需要Oracle密码验证,验证工作交由操作系统来完成。这就意味着,如果用户能通过某一用户名/密码进入操作系统,那么他就有权限访问Oracle数据库。试想,如果一台客户机经常访问Oracle数据库,用户会非常厌烦每一次都要输入同样的用户名和口令。另外,从安全角度考虑,每次输入用户名、口令也不太合适。JFQLinux联盟

JFQLinux联盟
向Oracle数据库中添加外部用户

JFQLinux联盟
我们使用ora_server@ora_carl ora_server是数据库所在的机器名,ora_carl是数据库的实例名)为例,来说明在Oracle中如何创建外部用户。我们假定客户端的操作系统为Windows XP,用户名是carlwu,具体步骤如下:JFQLinux联盟

 JFQLinux联盟

1)      在客户机的SQL/Plus中以系统管理员身份登陆JFQLinux联盟

SQL> conn sys/manager@ora_carl as sysdbaJFQLinux联盟

已连接。JFQLinux联盟

 JFQLinux联盟

2)查看参数os_authent_prefix(操作系统验证前缀)参数JFQLinux联盟

SQL> show parameters os_authent_prefixJFQLinux联盟

 JFQLinux联盟

NAME                                 TYPE                             VALUEJFQLinux联盟

------------------------------------ ---------------------------------------------------------------JFQLinux联盟

os_authent_prefix                              string                           OPS$JFQLinux联盟

 JFQLinux联盟

3)创建外部用户carlwu,注意用户名前面要加上步中查出来的os_authent_prefix(操作系统验证前缀)参数值,本例中为ops$JFQLinux联盟

SQL> create user ops$carlwu identified externally;JFQLinux联盟

 JFQLinux联盟

用户已创建JFQLinux联盟

 JFQLinux联盟

4)将connectresource权限赋给该外部用户JFQLinux联盟

SQL> grant connect to ops$carlwu ;JFQLinux联盟

授权成功。JFQLinux联盟

SQL> exitJFQLinux联盟

Oracle9i Enterprise Edition Release 9.2.0.5.0 - ProductionJFQLinux联盟

With the Partitioning, OLAP and Oracle Data Mining optionsJFQLinux联盟

JServer Release 9.2.0.5.0 - Production中断开JFQLinux联盟

 JFQLinux联盟

5)在客户机上验证刚才创建的外部用户是否成功,注意在conn后省略了用户名/口令的字样,只剩下/@加上实例名。JFQLinux联盟

C:\Documents and Settings\carlwu>sqlplus /nologJFQLinux联盟

 JFQLinux联盟

SQL*Plus: Release 9.2.0.5.0 - Production on 星期五 12 2 16:12:09 2005JFQLinux联盟

 JFQLinux联盟

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

 JFQLinux联盟

SQL> conn /@ora_carl;JFQLinux联盟

已连接。JFQLinux联盟

 JFQLinux联盟

恭喜,到现在为止,我们已经成功创建了一个Oracle外部用户。JFQLinux联盟

 JFQLinux联盟

Java程序

TestExternalUser.java源代码如下所示,testExternalUser()方法使用外部用户连接Oracle数据库JFQLinux联盟

 JFQLinux联盟

package test;JFQLinux联盟

import java.sql.Connection;JFQLinux联盟

import java.sql.DriverManager;JFQLinux联盟

import java.sql.PreparedStatement;JFQLinux联盟

import java.sql.ResultSet;JFQLinux联盟

import java.sql.SQLException;JFQLinux联盟

public class TestExternalUser {JFQLinux联盟

         /**JFQLinux联盟

          * @param argsJFQLinux联盟

          */JFQLinux联盟

         public static void main(String[] args) {JFQLinux联盟

                   // TODO Auto-generated method stubJFQLinux联盟

                   TestExternalUser teu = new TestExternalUser();JFQLinux联盟

                   teu.testExternalUser();JFQLinux联盟

         }JFQLinux联盟

 JFQLinux联盟

         public void testExternalUser() {JFQLinux联盟

                   Connection conn1 = null;JFQLinux联盟

                   try {JFQLinux联盟

                            conn1 = getCon();JFQLinux联盟

                            PreparedStatement ps = conn1JFQLinux联盟

                                               .prepareStatement("select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual");JFQLinux联盟

                            ResultSet rs = ps.executeQuery();JFQLinux联盟

                            if (rs.next()) {JFQLinux联盟

                                     System.out.println("Database server's date is:"+rs.getString(1));JFQLinux联盟

                            }JFQLinux联盟

 JFQLinux联盟

                            rs.close();JFQLinux联盟

                            ps.close();JFQLinux联盟

                   } catch (SQLException sqle) {JFQLinux联盟

                            sqle.printStackTrace();JFQLinux联盟

 JFQLinux联盟

                   } catch (ClassNotFoundException cnf) {JFQLinux联盟

                            cnf.printStackTrace();JFQLinux联盟

                   }finally {JFQLinux联盟

                            closeCon(conn1);JFQLinux联盟

                   }JFQLinux联盟

         }JFQLinux联盟

 JFQLinux联盟

         /**JFQLinux联盟

          * Get target datbase's connection.JFQLinux联盟

          * JFQLinux联盟

          * @returnJFQLinux联盟

          * @throws ClassNotFoundExceptionJFQLinux联盟

          * @throws SQLExceptionJFQLinux联盟

          */JFQLinux联盟

         private Connection getCon() throws ClassNotFoundException, SQLException {JFQLinux联盟

 JFQLinux联盟

                   Connection con;JFQLinux联盟

                   java.lang.Class.forName("oracle.jdbc.driver.OracleDriver");JFQLinux联盟

                   con = DriverManager.getConnection("jdbc:oracle:oci:/@ora_carl");JFQLinux联盟

                   con.setAutoCommit(false);JFQLinux联盟

                   return con;JFQLinux联盟

         }JFQLinux联盟

 JFQLinux联盟

         /**JFQLinux联盟

          * Close database connectionJFQLinux联盟

          * JFQLinux联盟

          */JFQLinux联盟

         private void closeCon(Connection con) {JFQLinux联盟

                   try {JFQLinux联盟

                            con.close();JFQLinux联盟

                            con = null;JFQLinux联盟

                   } catch (SQLException sqle) {JFQLinux联盟

                            sqle.printStackTrace();JFQLinux联盟

                   }JFQLinux联盟

         }JFQLinux联盟

}JFQLinux联盟

 JFQLinux联盟

注意上面代码中红色字体部分Oracle连接串的写法,和普通的Oracle JDBC连接串(jdbc:oracle:thin:user/pwd@server:1521:instance)的不同之处,该连接串中省略了用户名/密码。JFQLinux联盟

来顶一下
近回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
相关文章
    无相关信息
栏目更新
栏目热门