我有一台将管理多个Firebird数据库的服务器。允许我的用户对单个数据库的所有对象具有完全访问权限,但不允许他们创建新数据库,也不能访问同一服务器中的其他数据库。如何为这种情况配置?
自Firebird 3起,用户需要具有explicit privilege to create databases。因此,只要您不向用户授予该特权,他们就无法创建数据库(除非他们拥有并应用RDB $ ADMIN角色)。
授予用户访问数据库中所有内容的权限更难。您需要分别定义每个数据库对象的访问权限。执行此操作的首选方法是,授予对角色的必要访问权限,并将该角色授予用户。有关详细信息,请参见SQL Privileges。
在Firebird 3及更早版本中,除非用户在连接上明确指定该角色,否则他们不会承担该角色的权限。 Firebird 4将引入默认角色,该角色将始终被应用。也可以使用Firebird 3 privilege mapping来定义默认角色,但我不确定是否可以使用。
Firebird没有提供禁止用户连接到数据库的方法:几乎所有权限都存储在每个数据库中,因此用户必须先连接,然后服务器才能知道他们拥有哪些权限。如果要禁止用户连接,则需要创建一个自定义ON CONNECT
trigger来引发不应允许用户连接的异常。