我有一个服务器可以管理多个 Firebird 数据库。我的用户可以对单个数据库的所有对象拥有完全访问权限,但不允许他们创建新数据库,也不能访问同一服务器中的其他数据库。我如何针对这种情况进行配置?
最佳答案
自 Firebird 3 起,用户需要拥有 explicit privilege to create databases (Database DDL Privileges)。因此,只要您不向用户授予该权限,他们就无法创建数据库(除非他们拥有并应用 RDB$ADMIN 角色)。
授予用户访问数据库中所有内容的权限是比较困难的。您需要单独定义每个数据库对象的访问权限。首选方法是授予角色必要的访问权限,并将该角色授予用户。请参阅SQL Privileges了解详情。
在 Firebird 3 及更早版本中,用户不会承担角色的权限,除非他们在连接时明确指定该角色。 Firebird 4 将引入默认角色,这些角色将始终被应用。或许可以使用 Firebird 3 privilege mapping也可以定义默认角色,但我不确定这是否有效。
Firebird 没有提供禁止用户连接到数据库的方法:几乎所有权限都存储在每个数据库中,因此用户必须在服务器知道他们拥有哪些权限之前进行连接。如果您想禁止用户连接,则需要创建自定义 ON CONNECT
trigger为不应允许连接的用户引发异常。
关于Firebird 用户拥有单个数据库的所有访问权限,但无法创建新数据库且无法访问其他数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59573436/