Firebird数据库SYSDBA连接错误

Mar*_*rco 3 database connection firebird isql

我刚刚安装了 Win64 版 Firebird,并且尝试连接到用 ISQL 预打包的员工数据库。按照 Firebird 官方快速入门指南中的步骤,我打开 ISQL 实用程序并输入:

connect localhost:employee user sysdba password masterkey;
Run Code Online (Sandbox Code Playgroud)

结果我得到:

语句失败,SQLSTATE = 28000
您的用户名和密码未定义。请您的数据库管理员设置 Firebird 登录。

IQSL 实用程序的屏幕截图

最奇怪的是,如果我导航到员工数据库示例本身并从那里发出 isql 命令,我就可以成功连接。

Windows 命令提示符的屏幕截图

Mar*_*eel 6

不同之处在于,直接连接到数据库文件不需要密码,它甚至会忽略密码,而只使用提供的用户来知道要应用哪些权限。

\n\n

如果没有主机名,ISQL 将默认使用 Firebird 嵌入模式,而不是服务器。为了进行比较,尝试使用isql employee.fdb(或isql employee),它只会使用您当前的操作系统用户名登录,而isql localhost:employee会失败并显示“您的用户名和密码未定义”。

\n\n

看起来您指定的密码与 masterkey 的默认密码不同,或者不知何故 sysdba 帐户未初始化。我记得早期 Firebird 3 版本的安装程序存在问题,但我认为 3.0.2 不应受此影响(或者至少:它对我有用)。

\n\n

如果 SYSDBA 帐户未初始化,请按照 Firebird 3 发行说明的初始化安全数据库部分中的步骤操作:

\n\n
\n

初始化步骤

\n\n

初始化是使用isql实用程序在嵌入式模式下执行的。\n 对于嵌入式连接,不需要身份验证密码\n,如果您提供了身份验证密码,该密码将被忽略。嵌入式连接在没有登录凭据的情况下也可以正常工作,并且如果您省略用户名,则可以使用您的主机凭据将您登录到 xe2x80x9d 中。然而,即使用户名不需要身份验证,在现有安全数据库中创建或修改任何内容都需要用户是 SYSDBA;\n 否则,isql将针对 CREATE USER\n 请求抛出权限错误。

\n\n

SQL 用户管理命令适用于任何打开的数据库。\n 因为示例数据库employee.fdb存在于\n 安装中并且已在 中指定别名databases.conf,所以可以方便地\n 使用它来执行用户管理任务。

\n\n
    \n
  1. 停止 Firebird 服务器。Firebird 3 主动缓存与安全数据库的连接。服务器连接的存在可能会阻止isql建立嵌入式连接。

  2. \n
  3. 在合适的 shell 中,启动isql交互式会话,通过其别名打开员工数据库:

    \n\n
    > isql -user sysdba employee\n
    Run Code Online (Sandbox Code Playgroud)
  4. \n
  5. 创建SYSDBA用户:

    \n\n
    SQL> create user SYSDBA password \'SomethingCryptic\';\nSQL> commit;\nSQL> quit;\n
    Run Code Online (Sandbox Code Playgroud)
  6. \n
  7. 要完成初始化,请再次启动 Firebird 服务器。现在您将能够使用您分配给 SYSDBA 的密码对数据库(包括安全数据库)执行网络登录。

  8. \n
\n
\n\n

其中“SomethingCryptic”应该是您的密码。

\n\n

如果创建了 SYSDBA 用户,如果您忘记了所设置的内容,则需要更改其密码。遵循相同的步骤,但在步骤 3 中执行以下操作:

\n\n
SQL> alter user SYSDBA set password \'<new password>\';\nSQL> commit;\nSQL> quit;\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果这给出错误“未找到用户的记录:SYSDBA”,请确保您确实以 SYSDBA 身份连接,否则重试原始步骤 3。没有管理员访问权限将表现为该用户不存在,因此该错误如果用户确实不存在,或者您与非特权用户连接,则情况相同。

\n