2

最初に2つのオプションを持つメニューを持つプログラムがあります.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

System Leveljava を使用してプロパティを設定し、認証を有効にします。

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 に答える
1

ドキュメントから:

ユーザー認証が有効になっている場合 (デフォルトでは無効)、接続を要求するユーザーは有効な名前とパスワードを提供する必要があり、Derby はシステムに定義されたユーザーのリポジトリーに対してこれを検証します。

ユーザー認証を有効にしていますか?繰り返しますが、ドキュメントから:

ユーザー認証を有効にするには、derby.connection.requireAuthenticationプロパティをに設定しますtrue。それ以外の場合、Derby はユーザー名とパスワードを必要としません。このプロパティは、システム全体のプロパティまたはデータベース全体のプロパティとして設定できます。

マルチユーザー製品の場合、サーバーはトラステッド環境にあるため、通常、サーバーの derby.properties ファイルでシステムに対して設定します。

于 2013-11-11T07:17:57.477 に答える