【发布时间】:2015-11-27 20:24:01
【问题描述】:
我使用 sysdba 以外的帐户创建了 Firebird 数据库。如果我将此数据库的副本放到另一台机器上,我可以通过 sysdba 帐户和“masterkey”密码打开它。因此,如果有人可以复制它,这是真正的风险。
有没有办法防止这种情况发生?
【问题讨论】:
标签: firebird firebird2.5
我使用 sysdba 以外的帐户创建了 Firebird 数据库。如果我将此数据库的副本放到另一台机器上,我可以通过 sysdba 帐户和“masterkey”密码打开它。因此,如果有人可以复制它,这是真正的风险。
有没有办法防止这种情况发生?
【问题讨论】:
标签: firebird firebird2.5
创建数据库的用户“只是”数据库的所有者,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 服务器访问数据库,不能直接访问数据库文件,并且 - 除了管理员 - 不能创建备份数据库。
即使用户只能通过服务器进行访问,他们仍然可以制作整个数据库结构的逻辑副本,以及允许他们访问的所有数据。
【讨论】: