Firebird 3.0 中的身份驗證錯誤
今天我想試一試 Firebird 3.0,但由於某種原因,我似乎無法安裝它——至少不能以我可以從 JDBC 應用程序連接的方式安裝。
我所做的是遵循這篇文章。這就是發生的事情:
c:\etc\Firebird30>gsec -add sysdba -pass masterkey c:\etc\Firebird30>啟動firebird.exe -a -m c:\etc\Firebird30>isql 使用 CONNECT 或 CREATE DATABASE 指定數據庫 SQL> 創建數據庫 "localhost:c:\temp\mydbfb3.fdb" 使用者 "sysdba" 密碼 "masterkey"; 語句失敗,SQLSTATE = 08006 從連接讀取數據時出錯。 SQL>
現在“本地”創建數據庫有效:
SQL> 創建數據庫 "c:\temp\mydbfb3.fdb" 使用者 "sysdba" 密碼 "masterkey"; SQL>送出; SQL>
但在這種情況下,當我從 JDBC 應用程序(仍然是“localhost”)連接時,我收到錯誤消息(使用 sysdba/masterkey 登錄)
GDS 例外。335544472. 您的使用者名和密碼未定義。請您的數據庫管理員設置 Firebird 登錄。 原因:您的使用者名和密碼未定義。請您的數據庫管理員設置 Firebird 登錄。
我反複檢查(不止一次)JDBC 應用程序中的使用者名和密碼是 sysdba/masterkey。
從命令行我確實可以訪問新創建的數據庫:
SQL> 連接 'c:\temp\mydbfb3.fdb'; 數據庫:'c:\temp\mydbfb3.fdb' SQL> create table foo (bar integer); SQL> 插入 foo 值 (1); SQL> 從 foo 中選擇 *; 酒吧 ============ 1 SQL>送出; SQL>
我確定我遺漏了一些明顯的東西,但是什麼?
問題是雙重的:
First Firebird 3 使用更嚴格的安全性,並預設禁用舊的身份驗證機制。因此,依賴於舊連接庫的客戶端將無法開箱即用。
要讓舊的身份驗證機制正常工作,需要在 firebird.conf 中設置以下設置:
AuthServer = Legacy_Auth, Srp, Win_Sspi
(一定要去掉
#
前綴)
Legacy_Auth
其次,Jaybird(Firebird JDBC 驅動程序)的純 java 有線協議實現使用了此選項不支持的過時身份驗證機制。此時使用 Jaybird 連接到 Firebird 3 僅在您使用本機選項(使用jdbc:firebirdsql:native:
URL 前綴和 jaybird2x.dll 和 fbclient.dll)時才有效。附錄 1
Firebird 3(從 Alpha 1 開始)現在也實現了 Jaybird 使用的舊身份驗證方法,因此 Jaybird 現在也可以在不使用本機庫的情況下工作(只要啟用了舊版身份驗證,並且使用者已使用舊版使用者管理器進行設置) )。
附錄 2
Jaybird 3 及更高版本支持開箱即用的更安全的 Srp 身份驗證模型,Jaybird 3.0.4 引入了對有線協議加密的支持。這意味著它無需額外配置即可連接到 Firebird 3。