2

从 v2.5 迁移 firebird 3 后,我使用 TCP\IP 连接字符串进行了回归。FirebirdClient 版本是 4.6.1,但我已经使用最新的稳定版本进行了测试,但它也不起作用(v7.10.1)。

错误消息是“您的用户名和密码未定义。请您的数据库管理员设置 Firebird 登录”。

堆栈跟踪:

at FirebirdSql.Data.FirebirdClient.FbConnectionInternal.Connect()
   at FirebirdSql.Data.FirebirdClient.FbConnectionPoolManager.Pool.GetConnection(FbConnection owner)
   at FirebirdSql.Data.FirebirdClient.FbConnectionPoolManager.Get(ConnectionString connectionString, FbConnection owner)
   at FirebirdSql.Data.FirebirdClient.FbConnection.Open()

用户是通过 IBExpert UI 创建的。

这是连接字符串的外观(显然不是现实生活中的连接数据):

@"Database=inet://10.000.0.000:3050/C:\Database.FDB;User=MY_USER;Password=secret";

如果使用标准相同的网络连接字符串,则相同的用户可以工作,如下所示:

@dialect=3;initial catalog=C:\Database.FDB;data source=localhost;user id=MY_USER;password=secret;character set=ISO8859_1;pooling=True;connection lifetime=30;server type=Default;port number=3050

我的 firebird.conf 设置如下:

ServerMode = Super
DefaultDbCachePages = 100K
FileSystemCacheThreshold = 100M
TempBlockSize = 2M
TempCacheLimit = 4000M
AuthServer = Legacy_Auth, Srp, Win_Sspi
AuthClient = Legacy_Auth, Srp, Win_Sspi
UserManager = Legacy_UserManager, Srp
WireCrypt = Enabled 
RemoteServicePort = 3050
LockMemSize = 30M
LockHashSlots = 30011
RemoteAccess = true

不知道我在这里缺少什么。上面的连接字符串适用于 SYSDBA。根据我读过的火鸟文档,它看起来不错。我已经阅读了具有相同问题的所有其他 stackoverflow 票证,但没有看到任何适合我的答案。有任何想法吗?

4

1 回答 1

1

最近版本的 FirebirdSql.Data.FirebirdClient 支持 Firebird 3 的 13-15 版本有线协议,然后只支持 Srp 认证。您的旧版本仅支持 v12 协议(Firebird 2.5),然后将使用旧版身份验证。如果您使用 Legacy_UserManager(配置中的默认设置)创建用户,那么您无法使用 7.10.1 版本进行身份验证(您可以使用 4.6.1),因为就 Srp 身份验证插件而言,用户不会存在。

看起来您使用gsec创建了用户,它始终应用默认用户管理器(仅供参考,自 Firebird 3 以来不推荐使用gsecCREATE USER ),或者您不使用USING PLUGIN Srp(或使用USING PLUGIN Legacy_UserManager)使用。您可以通过检查select sec$user_name, sec$plugin from sec$users. 解决方案是删除用户,然后使用正确的用户管理器 ( USING PLUGIN Srp) 再次创建它。

请注意,理论上您可以同时拥有 Srp 和 Legacy_UserManager 的用户(例如,如果无法使用 Srp 进行身份验证的应用程序需要使用相同的用户),但让用户只存在于一个插件中要安全得多。

在相关说明中,您应用的配置是不安全的。离开设置或 - 如果您仍然有无法应用 Srp 的应用程序 - 将其放在最后(对于和)Legacy_Auth,会更加安全。同样,建议最后放入(或完全忽略),因此默认情况下 - 如果您使用gsec或不包含- 它将创建更安全的 Srp 类型用户。AuthServerAuthServerAuthClientLegacy_UserManagerUserManagerUSING PLUGIN xxxCREATE USER

于 2021-03-01T09:09:51.030 回答