【问题标题】:Prevent Firebird database access on other server with different username/password防止使用不同的用户名/密码访问其他服务器上的 Firebird 数据库
【发布时间】:2015-11-27 20:24:01
【问题描述】:

我使用 sysdba 以外的帐户创建了 Firebird 数据库。如果我将此数据库的副本放到另一台机器上,我可以通过 sysdba 帐户和“masterkey”密码打开它。因此,如果有人可以复制它,这是真正的风险。

有没有办法防止这种情况发生?

【问题讨论】:

    标签: firebird firebird2.5


    【解决方案1】:

    创建数据库的用户“只是”数据库的所有者,sysdba 用户是管理员,可以对 Firebird 服务器上的所有数据库执行任何操作。这是永远不要在生产服务器上使用 masterkey 作为密码的一个很好的理由。

    Firebird 2.5 及更早版本中的用户名和密码存储在作为 Firebird 安装一部分的安全数据库 (security2.fdb) 中。因此,将数据库移动到另一台服务器(或替换 security2.fdb)将允许“未经授权”的人访问数据库。请注意,我在此处将未经授权的引号括起来,因为如果某人具有直接文件访问权限,因此他们能够制作数据库的副本或替换 security2.fdb,那么他们在您的服务器上就有足够的授权来做他们想做的任何事情(或您系统的安全性已被破坏)。

    在 Firebird 3 中,可以将用户存储在数据库本身中,但这仍然需要服务器端配置,所以 - 据我所知 - 在这种情况下不会有太多限制。 Firebird 3 还将提供对数据库加密的支持,这可能允许您仅授予对特定服务器或提供特定密钥的用户的访问权限。不幸的是,Firebird 3 只提供 API,但不提供加密。这留给用户或图书馆提供者来实施。

    还有一个技巧可以在你的数据库中创建一个名为SYSDBA 的角色,这将阻止用户名为 sysdba 的用户连接到数据库。但这很容易通过使用十六进制编辑器和一些 Firebird 数据库内部结构的知识来撤销。如果此人真的想访问您的数据,他们也可以编译一个跳过或忽略身份验证的 Firebird 服务器。

    总而言之,这意味着如果有人可以直接访问数据库文件,那么他们可以创建一个副本并以一种或另一种方式在另一个 Firebird 安装上打开它。因此,保护​​数据库文件的唯一真正方法是确保用户只能通过 Firebird 服务器访问数据库,不能直接访问数据库文件,并且 - 除了管理员 - 不能创建备份数据库。

    即使用户只能通过服务器进行访问,他们仍然可以制作整个数据库结构的逻辑副本,以及允许他们访问的所有数据。

    考虑阅读Firebird File and Metadata Security

    【讨论】:

    • 这是一个非常大的问题。我有一个包含 60 个表和 12 个存储过程以及 15 个域和 26 个触发器的数据库。敏感数据使用强度算法加密和/或散列。但我担心我的工作 DDL 会被复制。如何保护它?。
    • @kamel2005 唯一的方法是不授予用户访问数据库的权限,而是通过 Web 服务等将其公开。元数据始终可供所有用户访问。您可以采取一些措施来保护事物,另请参阅firebirdsql.org/pdfmanual/Firebird-File-Metadata-Security.pdf 但没有什么能提供完整的保护。
    • 我不知道是否所有其他数据库引擎都像火鸟。非常感谢。
    • @kamel2005 元数据的可访问性在其他数据库引擎上可能确实受到更多限制或限制。
    猜你喜欢
    • 1970-01-01
    • 2013-12-04
    • 2012-09-07
    • 2015-10-23
    • 2011-03-25
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多