使用 Delphi 应用程序的 Firebird 错误“未定义用户名和密码”

Posted

技术标签:

【中文标题】使用 Delphi 应用程序的 Firebird 错误“未定义用户名和密码”【英文标题】:Firebird error "username and password are not defined" with Delphi application 【发布时间】:2011-05-15 10:00:43 【问题描述】:

我有一个使用 Delphi 2006 和 Firebird 2.5 制作的应用程序。对于连接,请使用 Delphi 的 Interbase 组件。我在设计时设置了一个带有用户名、密码 tc 的 TIBDatabase,并且工作正常,但是当我想在另一台电脑上运行应用程序时(首先我在上面安装 Firebird 2.5),我收到了这个错误:

Statement failed, SQLSTATE = 28000

您的用户名和密码未定义。请让您的数据库管理员设置 Firebird 登录。

这是什么?我该如何解决?

【问题讨论】:

【参考方案1】:

该消息清楚地指出,您在设计时在开发机器上用于连接的用户名和密码对于您尝试在 other 机器上连接的数据库服务器无效(让我们称之为生产)。从您的消息来看,它似乎与您在设计时连接的服务器不同。

我建议您轻松测试此问题,将 TIBDatabase 组件上的 LoginPrompt 属性设置为 true,以允许它在连接之前向用户询问正确的凭据。您将能够使用该服务器的任何有效用户名/密码组合进行连接。为确保组合有效,请尝试使用 isql 命令行工具进行连接,例如命令

c:\test>isql test.fdb -u sysdba -p masterkey

将使用默认用户名和密码连接到 c:\test\test.fdb。 (firebird 根目录必须在 path 环境变量中才能工作)

此外,您可以使用 gsec 命令行工具来调整此引擎的密码,或者您可以在尝试连接到该生产机器之前提供创建用户并更改该生产机器上的密码。

在 Windows 上,firebird 默认的 sysdba 密码是 ma​​sterkey

【讨论】:

Firebird 密码长度限制为 8 个字符...所以 masterke 足以让您进入 Firebird。这曾经是 Interbase 的情况,但自 IB 6 以来我还没有尝试过 这里有一个很棒的getting started walkthrough。【参考方案2】:

此错误是因为 Firebird db 的凭据根本没有存储在数据库文件中。它存储在 Firebird 服务器上的配置文件中。如果您复制 DB 文件,而不是密码 - 您将拥有不同的密码。

在 Ubuntu 机器上,您可以在文件中找到密码和用户名,/etc/firebird/<version>/SYSDBA.password

它看起来像,

ISC_USER=sysdba
ISC_PASSWORD="password"

使用这些凭据连接到数据库文件。

【讨论】:

这不太正确,包括密码在内的用户帐户信息存储在安全数据库中(在最近的版本中提供了更多选项,例如使用操作系统身份验证),但不在配置文件中。 我不明白你的更正,conf文件SYSDBA.password中的密码肯定isql想要的。 首先在问题中与 Ubuntu 没有任何联系。其次,可以在 Ubuntu 机器上更改 SYSDBA 密码,而无需更改 SYSDBA.password 内容,方法是使用 Firebird 本地修改密码的方式而不是管理脚本。 @mghie 我可以知道在不更改 SYSDBA 密码内容的情况下更改 SYSDBA 密码的参考在哪里吗?我也遇到了同样的问题, @otong:正如在最受好评的答案中所写,在服务器的机器上使用gsec 工具。【参考方案3】:

在来自 linux 终端的 'isql-fb' 和数据库上的 'CONNECT' 之后: - 我在删除(删除)并重新创建“SYSDBA”用户后解决了。

观察:我在 '/tmp/firebird' 的文件和文件夹权限有问题,我需要使用 'sudo' 或 root 来打开 'isql-fb'

谢谢。

【讨论】:

DROP USER 'SYSDBA'; CREATE USER 'SYSDBA' PASSWORD 'masterkey'; ALTER USER 'SYSDBA' GRANT ADMIN ROLE; 数据库上的“CONNECT”之后是什么意思?我有同样的错误,但是当我尝试连接到数据库时出现。所以没有机会运行'DROP'等 您可以在不指定连接参数的情况下打开“isql-fb”。而“CONNECT”是在 isql-fb 内部使用的命令:firebirdsql.org/pdfmanual/html/isql-connect-database.html 当您使用 isql-fb 时,也许您可​​以使用“connect”命令访问您的数据库。 在我的例子中,“connect”命令需要用户名和密码。它说“您的用户名和密码未定义。”【参考方案4】:

我曾经在尝试使用 Firebird 2.5 客户端库连接到 Firebird 3.0.3 数据库时遇到此错误。我只是忘记将客户端库更新到 3.0.3。也许这会对某人有所帮助。

【讨论】:

【参考方案5】:

最终在 Windows 上对我有用的解决方案是以管理员身份启动 cmd.exe 并运行 "C:\Program Files (x86)\Firebird\Firebird_3_0\gsec.exe" -user sysdba -password masterkey -mo sysdba -pw masterkey

【讨论】:

【参考方案6】:

最简单的解决方案是在添加和删除程序中卸载firebird及其相关的所有组件,卸载后检查是否从syswow和system32文件夹中删除了gds32.dll dll然后进入程序文件夹检查手动删除文件夹firebird,即使在卸载多次后重新启动机器并重新安装firebird,问题将得到解决。

【讨论】:

这完全消除了问题 - 当程序找不到 dll 时,它不会到达它尝试登录 firebird 的部分

以上是关于使用 Delphi 应用程序的 Firebird 错误“未定义用户名和密码”的主要内容,如果未能解决你的问题,请参考以下文章

使用 Delphi XE-8 和 FIREBIRD 本地数据库时出现“SELECT * FROM ....”异常

使用 Delphi XE-8 和 FIREBIRD 本地数据库时出现“SELECT * FROM ....”异常

是否可以为少数用户使用 Firebird Embedded

如何让 Firebird 客户端应用程序等待行解锁

如何在 Firebird 3.0 上启用线压缩

使用 Delphi 数据感知组件 - 优点和缺点 [关闭]