我已阅读 Derby 文档,但找不到任何解决方案。 我想在我的应用程序中为我的数据库设置用户 ID 和密码。

我已在连接 URL 中提供了用户和密码选项,但当我尝试使用任何密码再次打开它时,它仍然打开。网址如下

DriverManager.getConnection( 
    "jdbc:derby:database;user=admin;password=1234;create=true;"); 

请您参考如下方法:

仅包含用户名和密码的数据库 URL 不起作用。您必须首先设置嵌入式数据库,然后设置不同的属性以使用 Derby 的内置用户身份验证和用户授权来启用用户身份验证。

您可以在其文档中阅读有关 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(); 
    } 

您可以使用此链接来完成相同的快速示例。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!