无法为我的嵌入式数据库设置身份验证和授权
Unable to set authentication and authorization for my embedded database
我已阅读 Derby 文档,但找不到任何解决方案。
我想在我的应用程序中为我的数据库设置用户 ID 和密码。
我在连接中提供了用户和密码选项 URL 但是当我尝试使用任何密码再次打开它时它仍然打开。 URL低于
DriverManager.getConnection(
"jdbc:derby:database;user=admin;password=1234;create=true;");
只有带有用户名和密码的数据库url 无法使用。您必须先设置一个嵌入式数据库,然后设置不同的属性以使用 Derby 的内置用户身份验证和用户授权启用用户身份验证。
您可以在其文档中阅读有关德比授权的信息-
https://db.apache.org/derby/docs/10.4/devguide/cdevcsecure36595.html#cdevcsecure36595
您必须在创建嵌入式数据库后启用身份验证。
您可以使用此方法设置身份验证--
public static void turnOnBuiltInUsers(Connection conn) throws SQLException {
System.out.println("Turning on authentication.");
Statement s = conn.createStatement();
// Setting and Confirming requireAuthentication
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.connection.requireAuthentication', 'true')");
ResultSet rs = s.executeQuery(
"VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(" +
"'derby.connection.requireAuthentication')");
rs.next();
System.out.println("Value of requireAuthentication is " +
rs.getString(1));
// Setting authentication scheme to Derby
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.authentication.provider', 'BUILTIN')");
// Creating some sample users
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.user.sa', 'ajaxj3x9')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.user.guest', 'java5w6x')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.user.mary', 'little7xylamb')");
// Setting default connection mode to no access
// (user authorization)
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.database.defaultConnectionMode', 'noAccess')");
// Confirming default connection mode
rs = s.executeQuery (
"VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(" +
"'derby.database.defaultConnectionMode')");
rs.next();
System.out.println("Value of defaultConnectionMode is " +
rs.getString(1));
// Defining read-write users
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.database.fullAccessUsers', 'sa,mary')");
// Defining read-only users
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.database.readOnlyAccessUsers', 'guest')");
// Confirming full-access users
rs = s.executeQuery(
"VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(" +
"'derby.database.fullAccessUsers')");
rs.next();
System.out.println("Value of fullAccessUsers is " + rs.getString(1));
// Confirming read-only users
rs = s.executeQuery(
"VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(" +
"'derby.database.readOnlyAccessUsers')");
rs.next();
System.out.println("Value of readOnlyAccessUsers is " +
rs.getString(1));
// We would set the following property to TRUE only
// when we were ready to deploy.
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.database.propertiesOnly', 'false')");
s.close();
}
您可以使用此 link 完成相同的快速示例。
我已阅读 Derby 文档,但找不到任何解决方案。 我想在我的应用程序中为我的数据库设置用户 ID 和密码。
我在连接中提供了用户和密码选项 URL 但是当我尝试使用任何密码再次打开它时它仍然打开。 URL低于
DriverManager.getConnection(
"jdbc:derby:database;user=admin;password=1234;create=true;");
只有带有用户名和密码的数据库url 无法使用。您必须先设置一个嵌入式数据库,然后设置不同的属性以使用 Derby 的内置用户身份验证和用户授权启用用户身份验证。
您可以在其文档中阅读有关德比授权的信息- https://db.apache.org/derby/docs/10.4/devguide/cdevcsecure36595.html#cdevcsecure36595
您必须在创建嵌入式数据库后启用身份验证。
您可以使用此方法设置身份验证--
public static void turnOnBuiltInUsers(Connection conn) throws SQLException {
System.out.println("Turning on authentication.");
Statement s = conn.createStatement();
// Setting and Confirming requireAuthentication
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.connection.requireAuthentication', 'true')");
ResultSet rs = s.executeQuery(
"VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(" +
"'derby.connection.requireAuthentication')");
rs.next();
System.out.println("Value of requireAuthentication is " +
rs.getString(1));
// Setting authentication scheme to Derby
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.authentication.provider', 'BUILTIN')");
// Creating some sample users
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.user.sa', 'ajaxj3x9')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.user.guest', 'java5w6x')");
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.user.mary', 'little7xylamb')");
// Setting default connection mode to no access
// (user authorization)
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.database.defaultConnectionMode', 'noAccess')");
// Confirming default connection mode
rs = s.executeQuery (
"VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(" +
"'derby.database.defaultConnectionMode')");
rs.next();
System.out.println("Value of defaultConnectionMode is " +
rs.getString(1));
// Defining read-write users
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.database.fullAccessUsers', 'sa,mary')");
// Defining read-only users
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.database.readOnlyAccessUsers', 'guest')");
// Confirming full-access users
rs = s.executeQuery(
"VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(" +
"'derby.database.fullAccessUsers')");
rs.next();
System.out.println("Value of fullAccessUsers is " + rs.getString(1));
// Confirming read-only users
rs = s.executeQuery(
"VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(" +
"'derby.database.readOnlyAccessUsers')");
rs.next();
System.out.println("Value of readOnlyAccessUsers is " +
rs.getString(1));
// We would set the following property to TRUE only
// when we were ready to deploy.
s.executeUpdate("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(" +
"'derby.database.propertiesOnly', 'false')");
s.close();
}
您可以使用此 link 完成相同的快速示例。