繁体   English   中英

使用 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选项(有意开始)。 我的错误是:

登录时出错,详情请查看服务器firebird.log

firebird.log说:

身份验证错误 服务器上没有匹配的插件

所以我四处搜索, 发现它可能来自有线加密。 好吧,所以我确实尝试了所有 3 个版本的有线加密 - 如果我使用RequiredEnabled ,我会收到上述错误。 如果我使用Disabled ,我会得到

客户端和服务器上请求的有线加密级别不兼容

此外,我尝试在firebird.conf和我的代码中设置WireCrypt = Disabled ,重新启动服务并再次测试 - 现在我的结果与前两种情况相同:

身份验证错误 服务器上没有匹配的插件

所以我想我在这里遗漏了一些关于加密插件的东西——但我在那里找不到任何有价值的信息,谢谢你的帮助!

更新:这是我尝试的设置和我得到的错误:

尝试 1:所有firebird.conf的默认设置(我将其发布在这里以保持简短):

连接字符串 1:

character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Disabled

客户端和服务器上请求的有线加密级别不兼容

连接字符串 2(wire crypt=启用或必需)

身份验证错误 服务器上没有匹配的插件

尝试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

身份验证错误 服务器上没有匹配的插件

连接字符串 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

客户端和服务器上请求的有线加密级别不兼容

连接字符串 2(wire crypt=启用或必需)

身份验证错误 服务器上没有匹配的插件

尝试4:

AuthClient = Srp256, Srp
UserManager = Srp
WireCryptPlugin = ChaCha, Arc4
WireCrypt = Enabled
ServerMode = Super

连接字符串(与连接字符串中的任何有线加密选项相同的结果):

character set=NONE;data source=localhost;initial catalog=C:\Users\DBAccess\MYDB.FDB;user id=SYSDBA;password=masterkey;wire crypt=Enabled

身份验证错误 服务器上没有匹配的插件

注意:我还在firebird.log中看到以下消息,这可能是由于服务重启...

inet_error:读取 errno = 10054,客户端主机 = DESKTOP-1234,地址 = 127.0.0.1/60348,用户 = myusername

Firebird ADO.net 提供程序版本 8 仅在连接到 Firebird 3.0 或更高版本时支持Srp身份验证插件,但 Firebird 4.0 默认仅使用更安全的Srp256插件。 您需要将firebird.conf中的AuthServer设置更改为Srp256,Srp ,以便 Firebird ADO.net 提供程序能够连接。

另请参阅此问题:支持 Srp256 [DNET942] #864

好的,我最终使用以下设置让它工作:

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;

在 firebird.conf 上使用 AuthServer = Legacy_Auth

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM