使用 ADO.Net 提供商将 Firebird 2.5 迁移到 4.0
Migrate Firebird 2.5 to 4.0 using ADO.Net provider
我刚刚将我的数据库升级到 Firebird 4.0,使用数据库管理工具连接到数据库时似乎一切正常。
所以现在我尝试连接,确保我已经将我的 ADO.Net 升级到 FirebirdSql.Data.FirebirdClient v8.0.1(最新)。
以下是我创建连接字符串的方式(是的,数据库路径存在并且我确保用户具有修改权限):
FbConnectionStringBuilder cs = new FbConnectionStringBuilder();
cs.Database = @"C:/myPath/MyDB.FDB";
cs.DataSource = "localhost";
cs.UserID = "sysdba";
cs.Password = "masterkey";
cs.Dialect = 3;
cs.Pooling = false;
cs.ServerType = FbServerType.Default;
// --- Omitted at first - any of the 3 types leads to errors!
//cs.WireCrypt = FbWireCrypt.Disabled;
var DBConn = new FbConnection(cs.ConnectionString);
DBConn.Open();
现在,注意我遗漏了 WireCrypt
选项(故意开始)。我的错误是:
Error occurred during login, please check server firebird.log for details
firebird.log
说:
Authentication error No matching plugins on server
所以我用谷歌搜索了一下 它可能来自有线加密。好吧,所以我确实尝试了所有 3 个版本的有线加密 - 如果我使用 Required
或 Enabled
,我会收到上述错误。如果我使用 Disabled
,我会得到
Incompatible wire encryption levels requested on client and server
此外,我尝试在 firebird.conf
中设置 WireCrypt = Disabled
并在我的代码中重新启动服务并再次测试 - 现在我得到与前两种情况相同的结果:
Authentication error No matching plugins on server
所以我想我在这里遗漏了一些关于加密插件的信息 - 但我在那里找不到任何有价值的信息,感谢您的帮助!
更新:这是我尝试过的设置和我遇到的错误:
尝试 1: 所有 firebird.conf
默认值(我张贴它 here 以保持简短):
连接字符串 1:
character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Disabled
Incompatible wire encryption levels requested on client and server
连接字符串 2(wire crypt=Enabled 或 Required)
Authentication error No matching plugins on server
尝试 2:
WireCrypt = Disabled
连接字符串 1:
character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Disabled
Authentication error No matching plugins on server
连接字符串 2 (wire crypt=Enabled) => 同样的错误!
尝试 3:
AuthClient = Srp256, Srp
UserManager = Srp
连接字符串 1:
character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Disabled
Incompatible wire encryption levels requested on client and server
连接字符串 2(wire crypt=Enabled 或 Required)
Authentication error No matching plugins on server
尝试 4:
AuthClient = Srp256, Srp
UserManager = Srp
WireCryptPlugin = ChaCha, Arc4
WireCrypt = Enabled
ServerMode = Super
连接字符串(与连接字符串中的任何 wire crypt 选项相同的结果):
character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Enabled
Authentication error No matching plugins on server
注意:我还在 firebird.log
中看到以下消息,这可能是由于服务重启...
inet_error: read errno = 10054, client host = DESKTOP-1234, address = 127.0.0.1/60348, user = myusername
当连接到 Firebird 3.0 或更高版本时,Firebird ADO.net 提供程序版本 8 仅支持 Srp
身份验证插件,但默认情况下 Firebird 4.0 仅使用更安全的 Srp256
插件。您需要将 firebird.conf
中的 AuthServer
设置更改为 Srp256,Srp
以便 Firebird ADO.net 提供商能够连接。
好的,我最终使用以下设置让它工作:
firbird.conf
:
AuthServer = Srp256,Srp
UserManager = Srp
WireCrypt = Enabled
和连接字符串代码:
FbConnectionStringBuilder bld = new FbConnectionStringBuilder();
bld.Charset = "NONE";
bld.DataSource = "localhost";
bld.Database = @"C:\Users\DBAccess\MYDB.FDB";
bld.UserID = "SYSDBA";
bld.Password = "masterkey";
bld.WireCrypt = FbWireCrypt.Enabled;
string connStr = bld.ConnectionString;
使用
授权服务器 = Legacy_Auth
在 firebird.conf
我刚刚将我的数据库升级到 Firebird 4.0,使用数据库管理工具连接到数据库时似乎一切正常。
所以现在我尝试连接,确保我已经将我的 ADO.Net 升级到 FirebirdSql.Data.FirebirdClient v8.0.1(最新)。
以下是我创建连接字符串的方式(是的,数据库路径存在并且我确保用户具有修改权限):
FbConnectionStringBuilder cs = new FbConnectionStringBuilder();
cs.Database = @"C:/myPath/MyDB.FDB";
cs.DataSource = "localhost";
cs.UserID = "sysdba";
cs.Password = "masterkey";
cs.Dialect = 3;
cs.Pooling = false;
cs.ServerType = FbServerType.Default;
// --- Omitted at first - any of the 3 types leads to errors!
//cs.WireCrypt = FbWireCrypt.Disabled;
var DBConn = new FbConnection(cs.ConnectionString);
DBConn.Open();
现在,注意我遗漏了 WireCrypt
选项(故意开始)。我的错误是:
Error occurred during login, please check server firebird.log for details
firebird.log
说:
Authentication error No matching plugins on server
所以我用谷歌搜索了一下 Required
或 Enabled
,我会收到上述错误。如果我使用 Disabled
,我会得到
Incompatible wire encryption levels requested on client and server
此外,我尝试在 firebird.conf
中设置 WireCrypt = Disabled
并在我的代码中重新启动服务并再次测试 - 现在我得到与前两种情况相同的结果:
Authentication error No matching plugins on server
所以我想我在这里遗漏了一些关于加密插件的信息 - 但我在那里找不到任何有价值的信息,感谢您的帮助!
更新:这是我尝试过的设置和我遇到的错误:
尝试 1: 所有 firebird.conf
默认值(我张贴它 here 以保持简短):
连接字符串 1:
character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Disabled
Incompatible wire encryption levels requested on client and server
连接字符串 2(wire crypt=Enabled 或 Required)
Authentication error No matching plugins on server
尝试 2:
WireCrypt = Disabled
连接字符串 1:
character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Disabled
Authentication error No matching plugins on server
连接字符串 2 (wire crypt=Enabled) => 同样的错误!
尝试 3:
AuthClient = Srp256, Srp
UserManager = Srp
连接字符串 1:
character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Disabled
Incompatible wire encryption levels requested on client and server
连接字符串 2(wire crypt=Enabled 或 Required)
Authentication error No matching plugins on server
尝试 4:
AuthClient = Srp256, Srp
UserManager = Srp
WireCryptPlugin = ChaCha, Arc4
WireCrypt = Enabled
ServerMode = Super
连接字符串(与连接字符串中的任何 wire crypt 选项相同的结果):
character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Enabled
Authentication error No matching plugins on server
注意:我还在 firebird.log
中看到以下消息,这可能是由于服务重启...
inet_error: read errno = 10054, client host = DESKTOP-1234, address = 127.0.0.1/60348, user = myusername
当连接到 Firebird 3.0 或更高版本时,Firebird ADO.net 提供程序版本 8 仅支持 Srp
身份验证插件,但默认情况下 Firebird 4.0 仅使用更安全的 Srp256
插件。您需要将 firebird.conf
中的 AuthServer
设置更改为 Srp256,Srp
以便 Firebird ADO.net 提供商能够连接。
好的,我最终使用以下设置让它工作:
firbird.conf
:
AuthServer = Srp256,Srp
UserManager = Srp
WireCrypt = Enabled
和连接字符串代码:
FbConnectionStringBuilder bld = new FbConnectionStringBuilder();
bld.Charset = "NONE";
bld.DataSource = "localhost";
bld.Database = @"C:\Users\DBAccess\MYDB.FDB";
bld.UserID = "SYSDBA";
bld.Password = "masterkey";
bld.WireCrypt = FbWireCrypt.Enabled;
string connStr = bld.ConnectionString;
使用 授权服务器 = Legacy_Auth 在 firebird.conf