今天,我虽然想尝试一下 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> 提交; 查询>
我确定我遗漏了一些明显的东西,但是什么?
问题是双重的:
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)时才有效。
Firebird 3(自 Alpha 1 起)现在也实现了 Jaybird 使用的旧身份验证方法,因此 Jaybird 现在也可以在不使用本机库的情况下工作(只要启用了旧版身份验证,并且用户已使用旧版用户管理器进行设置) )。
也可以看看 Jaybird 和 Firebird 3
Jaybird 3 及更高版本支持开箱即用的更安全的 Srp 身份验证模型,并且 Jaybird 3.0.4 引入了对有线协议加密的支持。这意味着它无需额外配置即可连接到 Firebird 3。