使用身份验证的Derby嵌入式数据库

时间:2015-07-15 06:14:59

标签: java derby

Apache Derby嵌入式数据库默认情况下不需要身份验证。我们可以在系统级或数据库级启用身份验证。我使用java代码实现了系统级别的启用。

Properties p=System.getProperties();
p.put("derby.connection.requireAuthentication", "true");

然后我尝试使用此连接URL创建数据库。

jdbc:derby:derbysample;create=true;user=root;password=root

当我运行时

DriverManager.getConnection(connectionURL);

它创建数据库文件夹也会抛出有关身份验证的错误?如何使用凭据创建数据库?

  

java.sql.SQLNonTransientConnectionException:连接身份验证   失败了。原因:身份验证无效.. at   org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知   来源)at   org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(未知   来源)at   org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知来源)     在org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知   来源)at   org.apache.derby.impl.jdbc.EmbedConnection.newSQLException(未知   来源)at   org.apache.derby.impl.jdbc.EmbedConnection.checkUserCredentials(未知   来自org.apache.derby.impl.jdbc.EmbedConnection。(未知   来源)at   org.apache.derby.jdbc.InternalDriver.getNewEmbedConnection(未知   来源)org.apache.derby.jdbc.InternalDriver.connect(未知   来源)org.apache.derby.jdbc.InternalDriver.connect(未知   来源)org.apache.derby.jdbc.AutoloadedDriver.connect(未知   来源)at   java.sql.DriverManager.getConnection(DriverManager.java:664)at   java.sql.DriverManager.getConnection(DriverManager.java:208)at   derbytest.DerbyTest.createConnection(DerbyTest.java:56)at   derbytest.DerbyTest.main(DerbyTest.java:39)引起:ERROR 08004:   发生连接验证失败。原因:无效   认证..在   org.apache.derby.iapi.error.StandardException.newException(未知   来源)at   org.apache.derby.impl.jdbc.SQLExceptionFactory.wrapArgsForTransportAcrossDRDA(未知   来源)......还有15个

1 个答案:

答案 0 :(得分:3)

首先使用属性create=true

指定要创建的数据库URL
jdbc:derby:derbysample111;create=true

然后使用DriverManager获取连接。如果数据库不存在,它将创建一个数据库。

conn = DriverManager.getConnection("jdbc:derby:derbysample111;create=true");
conn.setSchema("APP");

然后在derby中启用身份验证并设置用户和密码。它将设置数据库级别身份验证。

Statement s = conn.createStatement();
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(\n"
            + "    'derby.connection.requireAuthentication', 'true')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(\n"
            + "    'derby.authentication.provider', 'BUILTIN')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(\n"
            + "    'derby.user.root', '12345')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(\n"
            + "    'derby.database.propertiesOnly', 'true')");

只需要设置一次。然后可以使用此URL访问您的数据库

jdbc:derby:derbysample111;create=true;user=root;password=12345