Firebird ADO.NET 4.10.0.0数据提供程序是否适用于Firebird 3.0?

时间:2016-04-20 19:04:46

标签: c# visual-studio ado.net firebird firebird-3.0

我目前正在尝试将我的ASP.net 4.5项目连接到最近发布的Firebird 3.0。

我使用Visual Studio 2015社区版,Firebird 3(64位),并使用NuGet获取ADO.NET 4.10.0.0。

但是,当我尝试连接时,我收到以下消息的异常:

  

this.connect.ServerVersion引发了类型' System.InvalidOperationException'

的异常

我得到的其他一些消息:

  

消息:"连接已关闭"
  来源:FirebirdSQL.Data.Fierbird.Client
  堆栈跟踪:
  at FirebirdSql.Data.FirebirdClient.FbConnection.get_ServerVersion()在C:\ Users \ Jiri \ Documents \ devel \ NETProvider \ working \ NETProvider \ src \ FirebirdSql.Data.FirebirdClient \ FirebirdClient \ FbConnection.cs:第217行

IBExpert连接没有任何问题。

此环境以前适用于Firebird 2.5和较旧的ADO.Net

现在最好的猜测是,它不受支持,但我的在线研究尚无定论(据我所知,有迹象表明它已经过Firebird 3 RC1测试)

如果有人能指出我正确的方向来实现这一目标,那就太棒了。

提前致谢!

1 个答案:

答案 0 :(得分:8)

我在假设您安装Firebird 3并且未修改其任何配置的情况下回答此问题。默认情况下,Firebird 3的安装将具有一些严格的安全设置:

  • 它只支持新的SRP身份验证模型
  • 这将需要有线协议加密

这意味着尚未支持SRP身份验证模型和有线协议加密的驱动程序(如Firebird .NET提供程序4.10)将无法立即连接。

为了能够连接,您需要执行以下操作

  1. 启用旧版身份验证模型
  2. 将有线协议加密设置从必需降级为已启用
  3. 在旧版身份验证模型中创建用户
  4. 这些步骤都需要修改firebird.conf。如果您将Firebird安装到Program Files,则需要确保您的编辑器以管理员身份运行才能保存更改。

    启用旧版身份验证

    要启用旧身份验证,您需要编辑或将以下行添加到firebird.conf :(请注意,前缀为#的行是注释!)

    AuthServer = Srp, Legacy_Auth
    

    降级有线协议加密

    要降级有线协议加密设置,您需要编辑或添加以下行到firebird.conf

    WireCrypt = Enabled
    

    创建旧版身份验证用户

    为了能够在旧版身份验证模型中创建用户,您需要通过编辑或将以下行添加到firebird.conf来启用旧版用户管理器插件:

    UserManager = Srp, Legacy_UserManager
    

    完成上述更改后,重新启动Firebird,使用您最喜欢的数据库管理工具使用SYSDBA或其他管理员帐户连接到(任意)Firebird 3数据库,并使用带有CREATE USER的Legacy_UserManager创建用户(替换用户名和密码{{ 1}}具有合适的值):

    legacy

    确保提交,否则用户并未真正创建。

    现在,您应该可以使用刚刚创建的用户从C#连接。

    这也记录在Firebird 3 Release Notes, Chapter 12 Compatibility Issues, Legacy Authentication

    不建议使用CREATE USER legacy PASSWORD 'legacy' USING PLUGIN Legacy_UserManager 或服务功能来创建用户。如果您仍想使用其中任何一个在旧版身份验证模型中创建用户,则需要编辑gsec并将firebird.conf放在列表中。

    支持Firebird .NET提供程序版本5.0.0.0及更高版本

    请注意,Firebird .NET提供程序版本5.0.0.0添加了对SRP的支持(无线协议加密)。因此,从Firebird .NET提供程序版本5,您可以使用新的身份验证模型。如上所述,只需确保将有线协议加密(设置为Legacy_UserManager)从WireCrypt(默认)降级为Required