在新创建的数据库中,使用错误的用户名和密码登录时,我不会收到任何错误消息(用户TTT和AAA甚至不存在)
[root@fewww bin]# ./isql /opt/db/treewww/ftree.db -user ttt -password bbb;
Database: /opt/db/treewww/ftree.db, User: TTT
SQL> exit;
[root@fewww bin]# ./isql /opt/db/treewww/ftree.db -user aaa -password ccc;
Database: /opt/db/treewww/ftree.db, User: AAA
SQL> SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION') from rdb$database;
RDB$GET_CONTEXT
===============================================================================
3.0.2
同时,当我使用错误的登录凭据时,我在另一个数据库中收到“常规”错误消息:
[root@fewww bin]# ./isql /opt/db/testwww/ftest.db -user aaa -password ddd
Statement failed, SQLSTATE = 08001
I/O error during "lock" operation for file "/opt/db/testwww/ftest.db"
-Database already opened with engine instance, incompatible with current
Use CONNECT or CREATE DATABASE to specify a database
你能解释一下这件事吗?
您仅指定数据库的路径,而不是主机名,因此,isql使用Firebird Embedded数据库引擎来打开和访问数据库,而不是Firebird服务器。由于Firebird 3,Firebird Embedded不再在Linux上验证密码(它从未在Windows上验证密码,现在Linux遵循相同的规则),另请参阅《Firebird 3发行说明》。
这适用于以下假设:如果用户具有对数据库文件的直接读写访问权限,则允许他们打开该文件。指定的用户名仍在使用,以应用授予该用户的特权,并且在未检查密码的情况下,任何用户名均被视为有效。除非您已授予该用户名或user特权,否则该用户可能没有足够的特权执行除查询系统表以外的其他操作PUBLIC
。
您显示的第二个错误可能意味着该数据库是由另一个应用程序使用不同的Firebird引擎(例如,SuperServer模式下的Firebird服务器进程)打开的,或者您的用户和该进程对锁文件的访问权限不同(不是100%对此有把握)。您可以尝试通过localhost连接,以查看是否可以通过以下方式访问数据库:isql localhost:/opt/db/testwww/ftest.db -user aaa -password ddd
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句