添加一个可以访问特定表的新 firebird-db 用户?

问题描述

我需要创建一个只能访问 4 个特定表的新 firebird-db 用户。有没有办法做到这一点?

http://www.destructor.de/firebird/gsec.htm 在这方面并没有真正的帮助。

解决方法

您链接的 - 第三方 - gsec 文档未提供有关授予表权限的信息,因为 gsec 仅用于管理安全数据库中的用户。在 Firebird 中,使用 GRANT(和 REVOKE)语句在各个数据库中管理用户的权限(甚至可以将权限授予(还)不存在的用户)。请注意,Firebird 3 已弃用 gsec,从 Firebird 2.5 开始,建议使用 SQL 用户管理语句而不是 gsec。

您需要创建用户,然后将用户权限授予您想要的表。请参阅 Firebird 2.5 语言参考中的 Security 章节。

普通的、经过身份验证的用户没有任何数据库对象的权限 直到明确授予该个人用户或 给绑定为用户 PUBLIC 的所有用户。

特别是:

  1. 创建用户:

    create user <username> password '<password>';
    

    另见CREATE USER;要创建用户,您需要是 SYSDBA,或者您需要在安全数据库中具有 admin 角色,在当前数据库中具有 RDB$ADMIN 角色,并在连接时指定 RDB$ADMIN 角色登录。

  2. 授予用户必要的权限。例如给予 SELECT 权限:

    grant select on table <tablename> to user <username>;
    

    允许选择、插入、更新和删除:

    grant select,insert,update,delete on table <tablename> to user <username>;
    

    另见GRANT;要授予对象权限,您必须是对象的所有者 SYSDBA、当前数据库中的 RDB$ADMIN,或者已被授予具有 WITH GRANT OPTION 的权限。

当您需要将同一组权限授予多个用户时,最好将权限授予一个角色,然后将该角色授予用户。但是,在 Firebird 3 及更早版本中,要获得授予角色的权限,用户需要在连接时明确指定该角色(Firebird 4 将引入自动应用的角色)。