如何在firebird数据库中显示和设置用户权限

时间:2013-07-15 14:15:54

标签: sql firebird rights

我尝试过,但所有时间都无法在firebird数据库中显示和设置用户权限。我用过;

GSEC>显示

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

问候,

2 个答案:

答案 0 :(得分:6)

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

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

分配权利由GRANTREVOKE完成。有关详细信息,请查看Firebird 2.5 Language Reference chapter Security和/或Firebird 3 release notes中记录的Interbase 6.0 Operations Guide和Firebird 3更改,第5章数据库安全性,Interbase 6.0语言参考和Interbase 6.0数据定义指南(可以从与操作指南相同的位置下载,也可以在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是授予的权利
    • SSELECT
    • UUPDATE
    • DDELETE
    • IINSERT
    • RREFERENCE(用于创建引用指定表(或特定列)的外键)
    • XEXECUTE(对于存储过程,也可能是UDF)
  • RDB$GRANT_OPTION1:用户可以向其他用户授予权限,0(有时为NULL),用户无法授予此权利
  • RDB$RELATION_NAME:表(或其他数据库对象)的名称
  • RDB$FIELD_NAME:表格中的列名称(NULL表示为所有列授予权限)
  • RDB$USER_TYPERDB$USER列的对象类型(13是一个角色,8是普通用户,其他对象类型也是可能的,例如授予权限存储过程)
  • RDB$OBJECT_TYPERDB$RELATION_NAME的对象类型(例如0:Relation,普通表)。

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

答案 1 :(得分:2)

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

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