2

我尝试过,但在 firebird 数据库中显示和设置用户权限时都失败了。我用了 ;

GSEC> 显示

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

问候,

4

2 回答 2

7

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

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

分配权限是用GRANT和完成的REVOKE。有关详细信息,请查看Firebird 3 发行说明中记录的Firebird 2.5 语言参考章节 Security and changes for Firebird 3和/或Interbase 6.0 操作指南第 5 章数据库安全、Interbase 6.0 语言参考和 Interbase 6.0 数据定义指南(两者可从与操作指南相同的位置下载)和Firebird 语言参考更新中记录的更改。

要显示在数据库中授予的当前权限,您可以使用isql工具 command 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
    • R:(REFERENCE用于创建引用指定表(或特定列)的外键)
    • X: EXECUTE(对于存储过程,也可能是 UDF)
  • RDB$GRANT_OPTION::1用户可以将权限授予另一个用户,0(有时NULL),用户不能授予此权限
  • RDB$RELATION_NAME: 表名(或其他数据库对象)
  • RDB$FIELD_NAME: 表中的列名(NULL表示对所有列都授予权限)
  • RDB$USER_TYPE:RDB$USER列的对象类型(13是角色,8普通用户,其他对象类型也是可能的,例如授予存储过程的权限)
  • RDB$OBJECT_TYPE:对象类型RDB$RELATION_NAME(例如0:Relation,普通表)。

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

于 2013-07-16T09:14:29.820 回答
2

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

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

于 2013-07-15T16:22:44.050 回答