我创建了一个简单的小程序 (Java 1.7.0_07
),在其中尝试连接到 Oracle 数据库 (ojdbc6.jar
)。该小程序在我的 IDE 的小程序查看器中工作正常,但无法从 Web 正确运行。
我收到安全异常,所以我签署了 jar 文件,认为可以修复它,但我仍然收到安全异常,即:
java.security.AccessControlException: access denied ("java.util.PropertyPermission" "oracle.jdbc.RetainV9LongBindBehavior" "read")
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPropertyAccess(Unknown Source)
at java.lang.System.getProperty(Unknown Source)
at oracle.jdbc.driver.PhysicalConnection$1.run(PhysicalConnection.java:3147)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.jdbc.driver.PhysicalConnection.getSystemProperty(PhysicalConnection.java:3143)
at oracle.jdbc.driver.PhysicalConnection.readConnectionProperties(PhysicalConnection.java:736)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:519)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at com.ericr.signedApplet.SignedApplet.init(SignedApplet.java:61)
at com.sun.deploy.uitoolkit.impl.awt.AWTAppletAdapter.init(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
我一直在用头撞墙,试图让事情按顺序进行,但关于如何设置的信息似乎存在冲突。
那么...是否有可能做我想做的事情?如果是这样,是否有一个指南可以让我知道我需要采取哪些安全措施才能使小程序在从网络访问时正常工作?
谢谢...
最佳答案
问题归结为AccessControlException
。显然,需要信任该小程序才能读取 oracle.jdbc.RetainV9LongBindBehavior
属性。
OTOH 通常建议通过将数据库置于 Web 服务后面来限制对数据库的访问。在这种情况下,小程序可以简单地连接到同一站点的 Web 服务,并执行其需要的操作。
关于java - 是否可以编写一个通过 JDBC 连接到 Oracle 的小程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13715827/