Firebird

Firebird 3.0 中的身份驗證錯誤

  • July 8, 2021

今天我想試一試 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 現在也可以在不使用本機庫的情況下工作(只要啟用了舊版身份驗證,並且使用者已使用舊版使用者管理器進行設置) )。

另請參閱Jaybird 和 Firebird 3

附錄 2

Jaybird 3 及更高版本支持開箱即用的更安全的 Srp 身份驗證模型,Jaybird 3.0.4 引入了對有線協議加密的支持。這意味著它無需額外配置即可連接到 Firebird 3。

引用自:https://dba.stackexchange.com/questions/15746