2

我有一个程序,它的菜单首先有两个选项,其次是创建一个新数据库,打开现有数据库

我的数据库创建部分代码如下

public EmbeddedDerby(String dbName, String userName, String pass) throws SQLException {
        String protocol = "jdbc:derby:";

        conn = DriverManager.getConnection(protocol + "dist/" + dbName + ""
                + ";create=true;user=" + userName + " " + ";password=" + pass + "");
        st = conn.createStatement();
        dbmd = conn.getMetaData();
        rs = dbmd.getTables(null, "APP", "DBNAME", null);
        String sqlTabel = "CREATE TABLE APP.DBNAME"
                + "(NAME VARCHAR(255) not null primary key,"
                + "TEL   VARCHAR(10))";
        st.execute(sqlTabel);
        }

我的数据库打开部分如下

 public void openDataBase(String dbName, String userName, String pass) throws SQLException {
        String protocol = "jdbc:derby:";
        conn = DriverManager.getConnection(protocol + "dist/" + dbName + ""
                + ";user=" + userName + ";password=" + pass + "");
        st = conn.createStatement();
        }

创建新数据库没有问题,但是当我想打开现有数据库时,它不会检查我是否输入了正确的用户名和密码。此外,只要数据库名称存在,它就接受任何用户名和密码。我以为 getConnection 方法会检查用户名和密码的正确性,但似乎我完全错了。谁能告诉我出了什么问题以及如何解决此问题?

4

2 回答 2

1

文档中:

当启用用户身份验证(默认情况下不启用)时,请求连接的用户必须提供有效的名称和密码,Derby 会根据为系统定义的用户存储库验证这些名称和密码。

您是否启用了用户身份验证?同样,从文档中:

要启用用户身份验证,请将derby.connection.requireAuthentication属性设置为true。否则,Derby 不需要用户名和密码。您可以将此属性设置为系统范围的属性或数据库范围的属性。

对于多用户产品,您通常会在服务器的 derby.properties 文件中为系统设置它,因为它位于受信任的环境中。

于 2013-11-11T07:17:57.477 回答
1

System Level使用 java 设置属性以启用身份验证。

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

Database Level设置属性以启用身份验证。

CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(
    'derby.connection.requireAuthentication',
    'true')
于 2015-07-15T05:41:52.933 回答