今天我想试一试 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>
现在“本地”创建数据库有效:
SQL> 创建数据库 "c:\temp\mydbfb3.fdb" 用户 "sysdba" 密码 "masterkey"; SQL>提交; SQL>
但在这种情况下,当我从 JDBC 应用程序(仍然是“localhost”)连接时,我收到错误消息(使用 sysdba/masterkey 登录)
GDS 例外。335544472. 您的用户名和密码未定义。请您的数据库管理员设置 Firebird 登录。 原因:您的用户名和密码未定义。请您的数据库管理员设置 Firebird 登录。
我反复检查(不止一次)JDBC 应用程序中的用户名和密码是 sysdba/masterkey。
从命令行我确实可以访问新创建的数据库:
SQL> 连接 'c:\temp\mydbfb3.fdb'; 数据库:'c:\temp\mydbfb3.fdb' SQL> create table foo (bar integer); SQL> 插入 foo 值 (1); SQL> 从 foo 中选择 *; 酒吧 ============= 1 SQL>提交; SQL>
我确定我遗漏了一些明显的东西,但是什么?
问题是双重的:
First Firebird 3 使用更严格的安全性,并默认禁用旧的身份验证机制。因此,依赖于旧连接库的客户端将无法开箱即用。
要让旧的身份验证机制正常工作,需要在 firebird.conf 中设置以下设置:
(一定要去掉
#
前缀)Legacy_Auth
其次,Jaybird(Firebird JDBC 驱动程序)的纯 java 有线协议实现使用了此选项不支持的过时身份验证机制。此时使用 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。