Firebird 3.0 中的身份验证错误

a_h*_*ame 7 firebird

今天,我虽然想尝试一下 Firebird 3.0,但由于某种原因,我似乎无法安装它 - 至少不能以一种可以从 JDBC 应用程序连接的方式。

我所做的就是关注这篇文章。这是发生的事情:

c:\etc\Firebird30>gsec -add sysdba -pass masterkey

c:\etc\Firebird30>启动 firebird.exe -a -m

c:\etc\Firebird30>isql
使用 CONNECT 或 CREATE DATABASE 指定数据库
SQL> 创建数据库 "localhost:c:\temp\mydbfb3.fdb" 用户 "sysdba" 密码 "masterkey";
语句失败,SQLSTATE = 08006
从连接读取数据时出错。
查询>

现在“本地”创建数据库的工作原理是:

SQL> 创建数据库 "c:\temp\mydbfb3.fdb" 用户 "sysdba" 密码 "masterkey";
SQL> 提交;
查询>

但在这种情况下,当我从 JDBC 应用程序(仍然是“本地主机”)连接时,我收到错误消息(使用 sysdba/masterkey 登录)

GDS 异常。335544472. 您的用户名和密码未定义。请您的数据库管理员设置 Firebird 登录。
原因:您的用户名和密码未定义。请您的数据库管理员设置 Firebird 登录。

我仔细检查(不止一次)JDBC 应用程序中的用户名和密码是 sysdba/masterkey。

从命令行我确实可以访问新创建的数据库:

SQL> 连接 'c:\temp\mydbfb3.fdb';
数据库:'c:\temp\mydbfb3.fdb'
SQL> 创建表 foo (bar 整数);
SQL> 插入 foo 值 (1);
SQL> select * from foo;

         酒吧
============
           1

SQL> 提交;
查询>

我确定我遗漏了一些明显的东西,但是什么?

Mar*_*eel 6

问题是双重的:

First Firebird 3 使用更严格的安全性并默认禁用旧的身份验证机制。因此,依赖于较旧连接库的客户端将无法开箱即用。

要允许旧的身份验证机制工作,需要在 firebird.conf 中设置以下设置:

AuthServer = Legacy_Auth, Srp, Win_Sspi
Run Code Online (Sandbox Code Playgroud)

(一定要删除 #前缀)

其次,Jaybird(Firebird JDBC 驱动程序)的纯 Java 线路协议实现使用了此Legacy_Auth选项不支持的过时的身份验证机制。此时使用 Jaybird 连接到 Firebird 3 仅在您使用本机选项(带有jdbc:firebirdsql:native:URL 前缀和 jaybird2x.dll 和 fbclient.dll)时才有效。

附录 1

Firebird 3(自 Alpha 1 起)现在也实现了 Jaybird 使用的旧身份验证方法,因此 Jaybird 现在也可以在不使用本机库的情况下工作(只要启用了旧版身份验证,并且用户已使用旧版用户管理器进行设置) )。

也可以看看 Jaybird 和 Firebird 3

附录 2

Jaybird 3 及更高版本支持开箱即用的更安全的 Srp 身份验证模型,并且 Jaybird 3.0.4 引入了对有线协议加密的支持。这意味着它无需额外配置即可连接到 Firebird 3。