gpt4 book ai didi

sql - firebird数据库如何显示和设置用户权限

转载 作者:行者123 更新时间:2023-12-05 00:14:44 26 4
gpt4 key购买 nike

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

GSEC>显示

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

问候,

最佳答案

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

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

使用GRANTREVOKE 分配权限。详情请查看Firebird 2.5 Language Reference chapter Security和 Firebird 3 的更改记录在 Firebird 3 release notes 中,和/或 Interbase 6.0 Operations Guide 、第 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 并且我授予角色 TESTROLESELECT 权限,输出将是:

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
    • U:更新
    • D:删除
    • :插入
    • 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:关系,普通表)。

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

关于sql - firebird数据库如何显示和设置用户权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17656406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com