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

goG*_*Gud 2 sql firebird rights

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

GSEC>显示

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

问候,

Mar*_*eel 7

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

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

分配权利是用GRANT和完成的REVOKE.有关详细信息,请查看Firebird 3 语言参考章节Firebird 3发行说明和/或Interbase 6.0操作指南,第5章数据库安全性,Interbase 6.0语言参考和Interbase 6.0数据定义指南中记录的Firebird 3的安全性和更改(均为可以从与操作指南相同的位置下载,以及Firebird语言参考更新中记录的更改.

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

如果未授予任何权限(仅SYSDBA表示数据库所有者拥有权限),show grants;则将输出:

SQL> show grants;
There is no privilege granted in this database
Run Code Online (Sandbox Code Playgroud)

例如,假设我有表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
Run Code Online (Sandbox Code Playgroud)

现在,如果我还分配其他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>
Run Code Online (Sandbox Code Playgroud)

如果您查询系统表,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
Run Code Online (Sandbox Code Playgroud)

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

  • RDB$USER是接收权限的对象的名称.这TESTROLE是一个角色(由列RDB$USER_TYPE值13 表示).
  • RDB$GRANTOR 是授予权利的用户.
  • RDB$PRIVILEGE 是授予的权利
    • S: SELECT
    • U: UPDATE
    • D: DELETE
    • I: INSERT
    • 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(这并不意味着可以在所有对象类型上授予权限).查看文档以获取详细信息.