使用Delphi应用程序时,出现Firebird错误"用户名和密码未定义"

26

我有一个使用Delphi 2006和Firebird 2.5制作的应用程序。为了连接,我使用Delphi中的Interbase组件。我在设计时设置了一个带有用户名、密码等信息的TIBDatabase,它可以正常工作。但是当我想在另一台电脑上运行应用程序(首先我安装了Firebird 2.5),出现以下错误:

Statement failed, SQLSTATE = 28000

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

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

5个回答

19

这条消息明确说明,你在开发机器上用于连接的用户名和密码,在连接到另一台生产环境的数据库服务器时是无效的。从你的消息中可以看出,设计时连接的服务器与生产环境连接的服务器不同。

我建议你通过将TIBDatabase组件的LoginPrompt属性设置为true,以便在连接之前提示用户输入合适的凭据来轻松测试此问题。你将能够使用该服务器的任何有效的用户名/密码组合进行连接。为确保组合是有效的,请尝试使用isql命令行工具进行连接,例如:

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

将使用默认用户名和密码连接到c:\test\test.fdb。(为使其起作用,Firebird根目录必须在Path环境变量中)

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

在Windows上,Firebird默认的sysdba密码是masterkey


3
Firebird密码长度限制为8个字符……因此masterke足够让您进入Firebird。这在Interbase中曾经是这样的情况,但自IB 6以来我就没有尝试过。 - Nazar
这里有一个很棒的 入门指南 - Assad Ebrahim

4

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


3

这个错误是因为Firebird数据库的凭证并没有简单地存储在数据库文件中,而是存储在Firebird服务器的配置文件中。如果您只复制了DB文件而没有复制密码,那么您将会有一个不同的密码。

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

它看起来像这样:

ISC_USER=sysdba
ISC_PASSWORD="password"

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

这并不完全正确,用户账户信息包括密码是存储在安全数据库中的(在较新的版本中还可以选择使用操作系统认证),而不是存储在配置文件中。 - mghie
1
我不理解你的更正,SYSDBA.password 配置文件中的密码 确实isql 所需的。 - Evan Carroll
首先,该问题与Ubuntu无关。其次,可以使用Firebird本地的修改密码方式来更改Ubuntu机器上的SYSDBA密码,而不必更改SYSDBA.password内容或使用管理脚本。 - mghie
@mghie,我能知道在哪里可以找到关于如何在不更改SYSDBA密码的情况下更改SYSDBA密码内容的参考资料吗?我也遇到了同样的问题。 - otong
@otong:如最受欢迎的答案所述,在具有服务器的机器上使用gsec工具。 - mghie
@mghie 哈哈,我们甚至不知道 sysdba 密码是什么,而在运行 gsec 时需要 sysdba 密码。你到底在说什么啊?:D 如果我的话看起来冒犯了你,很抱歉。但我在这里哭泣着寻找重置 sysdba 密码的方法。 - Jacky Supit

2

在Linux终端中使用'isql-fb'并在数据库上执行'CONNECT'后: - 我通过删除(drop)并重新创建'SYSDBA'用户来解决了问题。

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

谢谢。


1
DROP USER 'SYSDBA'; CREATE USER 'SYSDBA' PASSWORD 'masterkey'; ALTER USER 'SYSDBA' GRANT ADMIN ROLE; - Wellington1993
在数据库中进行“连接(CONNECT)”操作之后,您的意思是什么?我遇到了相同的错误,但是当我尝试连接数据库时出现了这个错误。因此无法运行“DROP”等操作。 - otong
1
您可以在不指定连接参数的情况下打开“isql-fb”。 而“CONNECT”是用于在isql-fb内部使用的命令: https://www.firebirdsql.org/pdfmanual/html/isql-connect-database.html 当您使用isql-fb时,也许可以通过“connect”命令访问您的数据库。 - Wellington1993
在我的情况下,“connect”命令需要用户名和密码。 它说:“您的用户名和密码未定义。” - dhidy

1

我曾经尝试使用Firebird 2.5客户端库连接到Firebird 3.0.3数据库时出现了错误。我只是忘记更新客户端库到3.0.3版本。希望这能帮助到其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接