【发布时间】:2020-04-21 17:08:51
【问题描述】:
我有一个可以管理多个 Firebird 数据库的服务器。我的用户被允许对单个数据库的所有对象具有完全访问权限,但不允许他们创建新数据库并且不能访问同一服务器中的其他数据库。如何针对这种情况进行配置?
【问题讨论】:
标签: firebird roles privileges firebird-3.0
我有一个可以管理多个 Firebird 数据库的服务器。我的用户被允许对单个数据库的所有对象具有完全访问权限,但不允许他们创建新数据库并且不能访问同一服务器中的其他数据库。如何针对这种情况进行配置?
【问题讨论】:
标签: firebird roles privileges firebird-3.0
从 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 来为不应允许连接的用户引发异常。
【讨论】:
PUBLICselect 授权的表。即使像RDB$RELATIONS 这样的人。 “一个具有不同密码的 RDB$ADMIN” - RDB$Admin 是一个角色,而不是一个用户。角色没有密码。