我使用NATIVE authentication
創建數據庫。當我使用臨時密碼創建用戶時,用戶無法使用他們的臨時密碼登錄到數據庫。這是我的代碼;德比NATIVE身份驗證用戶創建
創建用戶;
String uName = userNameTextField.getText();
String pass = new String (passTextField.getPassword());
stmt2.execute("CALL SYSCS_UTIL.SYSCS_CREATE_USER('"+"\""+uName+"\""+"', '"+"\""+pass+"\""+"')");
連接嘗試;
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
String connectionUrl = "jdbc:derby://10.90.232.2:1527/myDB"+";create=false;" + "user=" +"\""+ unameTextField.getText() +"\""+ ";" + "password=" +"\""+ new String (passwordPasswordField.getPassword()) +"\""+ ";";
Connection con = DriverManager.getConnection(connectionUrl);
的SQLException;
ERROR 08004: DERBY SQL error: ERRORCODE: 40000, SQLSTATE: 08004, SQLERRMC: Database connection refused.
如果我嘗試創建相同的用戶,德比又將username already exist
錯誤。所以這顯示了我實際上是用戶創建完成了。但我不明白爲什麼密碼不被接受。
- 編輯 -
而且我已經檢查存儲NATIVE
用戶SYS.SYSUSERS
系統表。我在那裏看到創建的用戶。
QUERY;
String query = "select USERNAME,HASHINGSCHEME,LASTMODIFIED from SYS.SYSUSERS";
stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
while (rs.next()) {
for (int i = 1; i <= columnsNumber; i++) {
if (i > 1) System.out.print(", ");
String columnValue = rs.getString(i);
System.out.print(columnValue);
}
System.out.println("");
}
輸出;
owner, 3b62:53f094d5ab95f45fd351aca5856e0c06:1000:SHA-256, 2016-01-03 10:41:45.008
testuser, 3b62:bb98971e23c129fcd6e4cef37e9ac01d:1000:SHA-256, 2016-01-03 10:55:10.969
P.S:此外SYS.SYSUSERS
系統表,PASSWORD
列。但是當我們嘗試在查詢中獲取它時,德比會變成java.sql.SQLSyntaxErrorException: No one can view the 'SYSUSERS'.'PASSWORD' column.
例外。
我很高興你明白了這一點!如果您能看到一種方法來描述如何改進此功能的文檔,那麼我相信德比開發人員會對此貢獻表示讚賞。 –
實際上德比文件說它。 'DATABASE_PROPERTY總是覆蓋用戶權限'但是我忘記了我正在閱讀的地方。如果我記得我將分享的鏈接。 –
以下鏈接:https://db.apache.org/derby/docs/10.6/devguide/cdevcsecure36595.html'爲derby.database.defaultConnectionMode屬性指定的訪問模式將覆蓋所有者授予的權限一個數據庫對象。例如,如果用戶被授予對錶的INSERT權限,但用戶只具有隻讀連接授權,則用戶無法將數據插入表中。「實際上,德比談到用戶特權不能連接到我認爲的系統。這是你認爲還是計劃中的錯誤? –