Firebird 用户拥有单个数据库的所有访问权限,但无法创建新数据库且无法访问其他数据库

标签 firebird roles privileges firebird-3.0

我有一个服务器可以管理多个 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/

相关文章:

asp.net-mvc - 获取在 Identity 2 中分配角色的用户列表

javascript - 过滤 OrionJS 中某个角色可以查看的文档

cocoa - 获取管理员权限以使用 rm 从 Cocoa 应用程序删除文件

mysql - 为什么我第一次授予用户权限时会创建 "GRANT USAGE"?

linux - 我怎样才能放弃 Perl 中的权限?

java - 在 Java 中选择 Firebird 和 HSQLDB

linux - 不使用用户名和密码访问 firebird

javascript - 循环中的查询在 node-firebird 中不起作用

backup - Firebird 远程备份

azure - 是否可以使用 Azure Graph API 更改 PIM 中的通知