Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>JDBC>>JDBC从入门到精通专题讲座三
JDBC从入门到精通专题讲座三
2005-09-07   来源:ChinaITLab  作者:ChinaITLab
  5. 安全性考虑
  
  作为网络上的语言JAVA必须十分注安全性的考虑。基于上面的讨论,JDBC的两种主要使用场合里面,我们必须考虑安全性问题:
  
  * 在Java applications的场合里面Java代码是本地的,所以也是"trusted"
  
  * 没有验证的Java applet代码不可以存取本地的以及其他网络的数据。
  
  5. 1. JDBC 和未验证的applet
  
  JDBC首先必须符合JAVA的一般安全规则。另外:
  
  * JDBC 必须认为没有验证的applets是不可靠的。
  
  * JDBC 不可以让不可靠的applets存取本地数据库。
  
  * 一个已经向JDBC DriverManager注册的是JDBC Driver只能存取它所来的数据源。
  
  * 一个applet也只能向它所Download来的服务器来存取数据。
  
  如果JDBC驱动层如果完全确信对一个数据库服务器打开连接不会引起认证或者权限问题(可能由网上随机主机上运行的程序引起),那么它就允许applet打开这样的连接。
  
  数据库服务器不通过IP地址来限制存取是相当少的,主要是为了举例。(当心,这一段话我可能翻译反了!!!大家看看原文。)这些限制是相当烦琐的。不过他们与对一般applet的限制是一致的我们没有必要放开这些限制。
  
  5. 2. JDBC 和Java应用程序
  
  对于一个普通的Java应用程序(例如全部用Java代码而不是不可靠的applet )JDBC将从本地的类路径里面获得驱动,并且允许应用程序自由存取文件,远程服务器等等。
  
  但是和applet一样,如果由于某些原因一个没有验证的sun.sql.Driver类从远程的来源里面获得,那么这个驱动只能和相同地方来的代码配合。
  
  5. 3. Driver的安全责任
  
  JDBC driver可能在各种情况下使用,所以驱动的编制者遵循一定的简单的安全规则,从而避免applet做非法的数据库连接。
  
  如果所有的驱动都象applet一样从网上下载,那么这些原则将是不必要的,因为普通的安全规则已经对它做了限制。
  
  但是驱动的编写者必须记住一旦他们的驱动获得成功,用户将在本地磁盘安装这些驱动,那么驱动将成为Java环境中一个被信任的部分,所以必须确信它不会被来访的applet所滥用。所以我们鼓励所有的驱动编写者必须遵循一定安全原则。
  
  所有这些原则都是在连接打开的时候使用。这正式驱动和虚拟机器检查当前调用者是否真的可以与指定的数据库连接的时刻。一旦连接建立就不必做更多的检查了。
  
  5. 3. 1. 分享TCP/IP连接的时候必须谨慎
  
  如果一个JDBC驱动试图打开一个 TCP 连接,那么这个打开会被Java 安全管理机制自动检查。这个机构会检查当前调用栈里面有没有applet,如果有那么就限定它可以访问的机器集合。所以一般地JDBC驱动可以把TCP建立检查留给Java虚拟机。
  
  但是如果一个JDBC驱动试图在多个数据库连接之间共享一个TCP连接,那么驱动就必须自己负责检查每个调用者是否真的被允许与目标数据库联系。
  
  例如如果我们为applet A打开了一个通往机器foobah 的TCP连接,这并不意味着applet B被自动允许来共享这个连接。
  
  applet B可能没有任何访问机器foobah的权力。所以在允许某个程序重用一个现成的TCP连接之前,JDBC 驱动必须通过安全机构来检查当前的的调用者是否可以访问这个连接。通过下面的代码可是实现这个功能。
  
  SecurityManager security = System.getSecurityManager();
  
  if (security != null)
  
  {
  
  security.checkConnect(hostName, portNumber);
  
  }
  
  如果连接是不允许的,那么Security.checkConnect方法将产生一个java.lang.SecurityException。
  
  5. 3. 2. 检查所有的本地文件访问。
  
  如果一个JDBC取得需要访问本地机器上的数据,那么他必须确信调用者是被允许打开这个文件的。例如:
  
  SecurityManager security = System.getSecurityManager();
  
  if (security != null)
  
  {
  
  security.checkRead(fileName);
  
  }
  
  如果对特定文件的访问是不允许的,那么Security.checkRead方法将产生一个java.lang.SecurityException。
  
  5. 3. 3. 作好最坏的准备
  
  一些驱动可能使用本地的方法来桥接底层数据库程序。则这些情况里面判断那些本地文件将被底层函数所访问是困难的。
  
  在这些环境里面用户必须作好最坏的打算,并且否决所有下载applet所发出的数据库存取,除非驱动可能完全确信将要做存取是没有问题的。
  
  例如一个JDBC-ODBC桥接器必须检查ODBC数据源的的名称,确保applet只可以访问它的"生源地"。如果对有的名字中不能判断出数据源的主机名,那么只能否决这个访问。
  
  为了决定一个当前的调用者是可以信赖的应用还是一个applet,JDBC驱动必须能够检查这个调用者是否可以写一个随机的文件:
  
  SecurityManager security = System.getSecurityManager();
  
  if (security != null)
  
  {
  
  security.checkWrite("foobaz");
  
  I. }
  --相关文章--
· 通过JDBC连接oracle数据库的十大技巧 (2007-04-13)
· 第一个JDBC程序 (2007-04-13)
· 符合oo惯例的表现层控制 (2007-04-13)
· 用hibernate对递归数据的操作 (2007-04-13)
· 煮酒论英雄nbsp;-nbsp;漫谈Java数据库存取技术 (2007-04-13)
· 利用weblogic的数据源作为hibernate的数据源的例子 (2007-04-13)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接