【问题标题】:how to display and set user rights in firebird database如何在firebird数据库中显示和设置用户权限
【发布时间】:2013-07-13 10:41:18
【问题描述】:

我尝试过,但始终未能在 firebird 数据库中显示和设置用户权限。我用过;

GSEC> 显示

但它只显示用户名。我想查看所有权利,我想设置它们。我们可以做这样的选择和管理吗?

问候,

【问题讨论】:

    标签: sql firebird rights


    【解决方案1】:

    Firebird gsec 实用程序仅管理全局安全数据库中的用户及其密码(在 Firebird 2.0 及更高版本中为 security2.fdb)。用户的权限是按数据库管理的(用户SYSDBA 除外),不能使用gsec 进行管理。

    通过定义角色(可选)、为角色和/或用户分配权限以及为特定数据库中的用户分配角色来控制每个数据库的用户权限。分配给角色的权限仅在附加时指定角色时应用,否则仅应用用户权限。

    使用GRANTREVOKE 完成分配权限。有关详细信息,请查看 Firebird 3 release notes 和/或 Interbase 6.0 Operations Guide 第 5 章数据库安全、Interbase 6.0 语言参考和 Interbase 6.0 数据定义指南中记录的 Firebird 2.5 Language Reference chapter Security 和 Firebird 3 的更改(均可从同一位置下载)作为操作指南)和Firebird Language Reference Update 中记录的更改。

    要显示当前在数据库中授予的权限,您可以使用isql 工具,命令show grants。您将需要连接到您想要获取信息的特定数据库。对于其他工具或普通客户端连接,您需要自己查询系统表(特别是RDB$USER_PRIVILEGES),或者使用工具的功能(例如Flamerobin也可以显示权限)。

    如果没有授予权限(这意味着只有SYSDBA 和数据库所有者拥有权限),show grants; 将输出:

    SQL> show grants;
    There is no privilege granted in this database
    

    例如,假设我有表 ITEMS 并且我将 SELECT 权限授予角色 TESTROLE,输出将是:

    SQL> CREATE ROLE TestRole;
    SQL> GRANT SELECT ON ITEMS TO TestRole;
    SQL> SHOW GRANTS;
    
    /* Grant permissions for this database */
    GRANT SELECT ON ITEMS TO ROLE TESTROLE
    

    现在,如果我还分配额外的UPDATE 权限:

    SQL> GRANT UPDATE ON ITEMS TO TestRole;
    SQL> SHOW GRANTS;
    
    /* Grant permissions for this database */
    GRANT SELECT, UPDATE ON ITEMS TO ROLE TESTROLE
    SQL>
    

    如果您改为查询系统表 RDB$USER_PRIVILEGES,您将看到下面的列表(+ 数据库所有者的更多权限):

    USER      GRANTOR  PRIVILEGE GRANT_OPTION RELATION_NAME FIELD_NAME USER_TYPE OBJECT_TYPE
    ----------------------------------------------------------------------------------------
    TESTROLE  SYSDBA   S         0            ITEMS         [null]     13        0
    TESTROLE  SYSDBA   U         0            ITEMS         [null]     13        0
    

    (为简洁起见,列名中省略了 RDB$ 前缀)

    • RDB$USER 是获得权限的对象的名称。这里是TESTROLE,它是一个角色(由列RDB$USER_TYPE 值13 表示)。
    • RDB$GRANTOR 是授予权限的用户。
    • RDB$PRIVILEGE 是授予的权利
      • S: SELECT
      • UUPDATE
      • D: DELETE
      • I: INSERT
      • R:REFERENCE(用于创建引用指定表(或特定列)的外键)
      • X: EXECUTE(对于存储过程,也可能是 UDF)
    • RDB$GRANT_OPTION: 1: 用户可以授予其他用户权限,0(有时是NULL),用户不能授予此权限
    • RDB$RELATION_NAME:表名(或其他数据库对象)
    • RDB$FIELD_NAME :表中的列名(NULL 表示对所有列都授予权限)
    • RDB$USER_TYPERDB$USER 列的对象类型(13 是角色,8 是普通用户,其他对象类型也是可能的,例如授予存储过程的权限)
    • RDB$OBJECT_TYPERDB$RELATION_NAME 的对象类型(例如 0:关系,普通表)。

    可以从RDB$TYPES 获得对象类型的完整列表(这并不意味着可以授予所有对象类型的权限)。详情请查看文档。

    【讨论】:

    • 谢谢你,马克我已经试过你说的了。但没有什么有用的.. :(
    • 更具体的“没什么用”并不能真正帮助我找到您缺少的信息,
    • @MusaGezer 我提供了一个关于如何使用show grantsRDB$USER_PRIVILEGES 系统表的示例。
    • 你好马克,很抱歉无法回复你。感谢您提供信息.. 但是我需要查看权利而不是分配权利。我想检查哪个用户有哪个权限。
    • @MusaGezer 我的回答包括如何查找分配的权限。我还展示了分配以说明它们在 Firebird ISQL 和 RDB$USER_PRIVILEGES 表中的显示方式。
    【解决方案2】:

    gsec 实用程序允许管理允许连接到特定 Firebird 服务器实例的用户。即它允许管理 Firebird 服务器可以识别的用户列表(参见gsec manual)。但它不允许您管理每个用户在某个特定数据库中被允许执行的操作。要管理特定数据库中的用户权限,您应该使用角色以及 GRANTREVOKE 语句。

    我建议你使用一些GUI工具来管理用户权限,即Flamerobin

    【讨论】:

    • 我也搜索了 GRANT 和 REVOKE 但我找不到我要找的东西
    • 如果您的意思是您没有找到这些命令的语法,请查看 Mark 的回答,他将链接发布到记录这些命令的 IB 手册。
    猜你喜欢
    • 2021-11-04
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多