0

我使用 FirebirdSql.Data.FirebirdClient 连接到 Firebird 数据库(WPF 桌面应用程序)。

服务器版本:WI-V3.0.5.33220 Firebird 3.0,ADO.net provider version 7.5.0 (NuGet)

我创建了一个除 SYSDBA 之外的用户,该用户只有对表的只读访问权限(仅限 SELECT)。与 FlameRobin 连接对这个新用户没有任何问题。但是,当我在 FbConnectionStringBuilder 类中指定这个新用户和相应的只读角色时,我得到一个

“您的用户名和密码未定义”

错误。如果我用 SYSDBA 和相应的密码替换新用户,则连接有效。

using FirebirdSql.Data.FirebirdClient;

namespace Test
{
    class DBConnection
    {
        FbConnection fbConnection;
        public void CreateConnection() 
        {
            FbConnectionStringBuilder builder = new FbConnectionStringBuilder();
            builder.Charset = "WIN1252";
            builder.Database = "firebird2:DB_NAME";
            builder.Dialect = 3;
            builder.Role = "READ_ONLY_OTN";
            builder.UserID = "TEST";
            builder.Password = "Test";
            builder.ServerType = FbServerType.Default;
            fbConnection = new FbConnection(builder.ConnectionString);
            fbConnection.Open();
        }
    }
}

除了密码错误(我检查了两次并且还使用 FlameRobin)之外,这个错误的原因可能是什么?

4

1 回答 1

1

问题是,当连接到 Firebird 3 时,Firebird ADO.net 提供程序 (FirebirdSql.Data.FirebirdClient) 只支持新的 SRP 身份验证插件,而不支持 Legacy_Auth 身份验证插件。如果您的用户是使用 Legacy_UserManager 创建的,那么您无法使用 Firebird ADO.net 提供程序进行身份验证。您需要使用 Srp 创建用户。

根据您的确切 Firebird 配置,您需要添加SrpUserManager配置列表,然后使用以下命令创建用户:

create user <youruser> password '<password>' using plugin srp;

出于安全原因,我建议您删除使用 Legacy_UserManager 创建的用户:

drop user <youruser> using plugin legacy_usermanager;

我还建议您Legacy_UserManagerUserManager列表中删除,或者确保它Srp在列表中的第一个,以避免意外使用安全性较低的用户管理器创建用户(执行没有该using plugin <plugin>子句的 SQL 用户管理语句将默认为第一个用户管理器列表)。

于 2020-11-11T09:05:18.280 回答