如何为Firebird数据库

时间:2018-05-26 05:52:55

标签: firebird firebird-3.0

下载Firebird数据库Firebird-3.0.3.32900-0_x64_pdb.zip。 解压缩文件夹install_service.bat并能够访问EMPLOYEE.FDB数据库。也可以在没有install_service的情况下访问EMPLOYEE.FDB数据库。 为了为EMPLOYEE.FDB创建新用户,我使用SYSDBA USER在isql中打开了EMPLOYEE.FDB数据库。 在查询下方用于创建新用户:

create user DEMO password 'demo' GRANT ADMIN ROLE;

之后我还可以使用isql中的DEMO USER打开EMPLOYEE.FDB数据库。

我正在使用GUI的第三方工具:https://fishcodelib.com/Database.htm

使用上述工具我无法访问EMPLOYEE.FDB数据库。低于错误:

  

ErrorCode:335544472 Number:335544472,Class:0,Line:0   ErrorMessage:未定义您的用户名和密码。问你的   数据库管理员设置Firebird登录。

     

未正确设置Firebird配置参数。请启用   firebird.conf中的以下参数:(对于默认SRP)WireCrypt   =已启用(对于旧版身份验证)WireCrypt =已启用AuthServer = Legacy_Auth,Srp,Win_Sspi

     

设置用户和密码:选项 - > (全球)附加连接   字符串参数 - >火鸟

我已在firebird.conf文件中应用了上述配置。仍然得到同样的例外。 所以,我的问题是,为任何数据库创建用户是否正确?意味着我想为我的c#应用程序用新用户创建新数据库。

示例:

数据库:Mydb.fdb; 用户:SYSDBA(默认用户),演示

我想在我的C#应用​​程序中使用演示用户执行所有SQL操作。那么,您能否帮助我如何为具有不同权限和授权的特定数据库创建多个用户。

我已经通过了:

https://firebirdsql.org/file/documentation/release_notes/html/en/3_0/rnfb30-compat-initsec.html

https://firebirdsql.org/refdocs/langrefupd25-security-rdbadmin.html

Firebird database SYSDBA connection error

但不明白该怎么做。

修改: Firebird.conf文件配置:

AuthServer = Legacy_Auth,srp,Win_Sspi

WireCrypt = Enabled 

AuthClient = Srp, Win_Sspi, Legacy_Auth

1 个答案:

答案 0 :(得分:2)

看起来您创建了一个 Legacy_Auth 用户,或者至少我可以重现您在使用 Legacy_Auth 用户时观察到的行为。

问题是Firebird ado.net提供程序5.0及更高版本在连接到Firebird 3或更高版本时,仅支持 Srp (以及 Win_Sspi )身份验证协议。连接到Firebird 3(*)时,不支持 Legacy_Auth 协议。

您需要创建 Srp 用户。为此,您需要修改firebird.conf,并将UserManager设置更改(或设置)为:

UserManager = Srp

或者,如果您还需要创建旧用户帐户:

UserManager = Srp, Legacy_UserManager

第一个条目是'默认'用户管理器。在某些情况下(例如,当使用期望创建旧用户的旧工具时),您可能需要撤消订单。

然后使用:

创建用户
create user DEMO password 'demo' GRANT ADMIN ROLE using plugin Srp;

如果您关闭using plugin Srp,Firebird将使用默认用户管理器(列表中的第一个),在初始设置中,这显然设置为Legacy_UserManager

如果您没有需要使用旧版身份验证用户的工具,我强烈建议您使用 Srp 用户替换所有这些用户。这应该像使用Srp插件创建具有相同名称的新用户一样简单。然后从Legacy_Auth中的AuthServer设置中删除firebird.conf。考虑使用drop user <name> using plugin Legacy_UserManager删除旧版身份验证用户,为了能够执行此操作,Legacy_UserManager必须位于UserManager列表中。

*:我今天才发现这个问题。我正在考虑编写一个拉取请求,在连接到Firebird 3及更高版本时添加对旧版身份验证的支持。