我使用sysdba以外的帐户创建了Firebird数据库。如果我把这个数据库的副本放到另一台机器上,我可以通过sysdba帐户打开它,然后使用' masterkey'密码。因此,如果有人能够复制它,那么这是真正的风险。
有没有办法阻止这种情况?
答案 0 :(得分: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服务器访问数据库,不能直接访问数据库文件,并且 - 除了管理员 - 无法创建备份数据库。
即使用户只能通过服务器访问,他们仍然可以制作整个数据库结构的逻辑副本,以及允许他们访问的所有数据。