Firebird在为sysdba用户更改默认密码后不会忘记该密码



我无法让Firebird忘记默认用户的旧密码。我已在本地计算机上安装了Firebird 3.0.4版本。我已经尝试通过gsec工具将默认密码主密钥更改为另一个。首先,我用命令登录到这个工具:

gsec -user sysdba -password masterkey -database "C:Program FilesFirebirdFirebird_3_0security3.fdb"

然后通过命令修改,我设置了下一个密码:

modify sysdba -pw qwerty12

问题是,现在我可以同时使用两个密码登录sysdba帐户,即旧的主密钥密码和新的qwerty12密码。如何让火鸟忘记旧的默认密码?

问题不是Firebird记住了默认密码,而是Firebird为每个身份验证插件存储了一个密码,而SYSDBA恰好存在于两个(或更多(身份验证插件中。

要解决此问题,您必须删除其中一个身份验证插件的SYSDBA帐户,或者更改其密码。不幸的是,对于Legacy_Auth插件来说,删除SYSDBA帐户相当困难(您需要从安全数据库中手动删除它,请参阅本答案末尾的内容(。

假设标准的Firebird安装(具有身份验证插件Srp和Legacy_Auth(,您需要执行以下操作来更改密码(注意:我假设有问题的帐户是Legacy_Aauth的帐户,而不是Srp的帐户(:

  1. firebird.conf中,设置UserManager确保列出两个用户管理器:

    UserManager = Srp, Legacy_UserManager
    
  2. 重新启动Firebird

  3. 更改两个插件的密码

    alter user SYSDBA password '<new password>' using plugin Srp;
    alter user SYSDBA password '<new password>' using plugin Legacy_UserManager;
    

    请记住:传统的身份验证插件将密码截断为8个字符。

如果要完全阻止使用Legacy_Auth插件进行身份验证,请编辑firebird.conf并从AuthServer设置中删除Legacy_Auth(如果数据库具有自定义配置,也请检查databases.conf(。

我在firebird-devel邮件列表中询问了一个关于无法删除Legacy_Auth SYSDBA帐户的问题。我得到的答案是,从历史上看,在旧的Firebird版本中不可能删除SYSDBA帐户,因此Legacy_UserManager插件明确禁止删除SYSDBA(而Srp允许删除(。解决方法是直接连接到安全数据库,并从PLG$USERS表中手动删除用户(其中包含Legacy_Auth用户,Srp用户在PLG$SRP中(:

delete from plg$users where plg$user_name = 'SYSDBA';

您可以使用isql -user sysdba -password <yourpassword> security.db连接到安全数据库(假设security.db别名在databases.conf中定义,否则使用security3.fdb的完整路径(。

一个稍微模糊一点的替代方案是定义一个映射,将使用Legacy_Auth的身份验证映射为SYSDBA到另一个(非特权(用户(例如GUEST(:

create global mapping NO_LEGACY_SYSDBA 
using plugin Legacy_Auth 
from user sysdba to user guest;

要删除Srp插件的SYSDBA帐户,您只需要执行(作为管理员(:

drop user SYSDBA using plugin Srp;

相关内容

  • 没有找到相关文章

最新更新