【问题标题】:Firebird user has all access rights on a single database except cannot create new db and no access to other databaseFirebird 用户拥有单个数据库的所有访问权限,但不能创建新数据库且无法访问其他数据库
【发布时间】:2020-04-21 17:08:51
【问题描述】:

我有一个可以管理多个 Firebird 数据库的服务器。我的用户被允许对单个数据库的所有对象具有完全访问权限,但不允许他们创建新数据库并且不能访问同一服务器中的其他数据库。如何针对这种情况进行配置?

【问题讨论】:

    标签: firebird roles privileges firebird-3.0


    【解决方案1】:

    从 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 来为不应允许连接的用户引发异常。

    【讨论】:

    • 我正在考虑为服务器中的每个数据库创建私有安全数据库,并且每个安全数据库都有一个具有不同密码的 RDB$ADMIN。因此,用户能够对所有表具有完全访问权限,但他们无法访问其他数据库并在服务器中创建数据库。这是个好方法吗?
    • @SherlynChew 可能,我没有过多地使用多个安全数据库,所以我不知道它们的来龙去脉。
    • @SherlynChew 您甚至可以将每个数据库配置为自己的安全数​​据库。但是,您需要确保没有两个数据库具有相同的用户(或至少不具有相同的密码)。用户名只是一个字符串,它可以在多个数据库中相同。而且我认为在任何实际数据库中都会有一些带有PUBLICselect 授权的表。即使像RDB$RELATIONS 这样的人。 “一个具有不同密码的 RDB$ADMIN” - RDB$Admin 是一个角色,而不是一个用户。角色没有密码。
    猜你喜欢
    • 1970-01-01
    • 2013-08-18
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多