如何撤销Firebird 2.5.8上另一个用户授予的角色?

时间:2019-08-15 01:28:53

标签: firebird firebird2.5

我正在使用Firebird 2.5.8(ODS版本11.2),并通过Firebird ADO.NET v6.6(在使用Visual Studio的C#中)进行连接。我已经建立了一个数据库管理工具来配置我们的表,以及执行一些基本的Firebird用户管理操作。该数据库具有不同的角色(MyRoleX和MyRoleY),用于授予/限制访问权限。

用户管理操作包括将这些角色授予/撤消给不同的用户。登录该工具后,连接使用RDB $ ADMIN ROLE,并且已使用ADMIN ROLE创建了连接的用户。最后,该工具可能有多个Firebird用户(例如Mgr1和Mgr2)。

好的,因此Mgr1可以创建一个新用户,以及:

GRANT MyRoleX TO UserA;
GRANT MyRoleY TO UserA;

然后,Mgr1不在班次/空缺/不可用,Mgr2意识到不应向UserA授予MyRoleY。但是当Mgr2登录并尝试运行命令时:

REVOKE MyRoleY FROM UserA;

给出错误信息:

unsuccessful metadata update
Mgr2 is not grantor of Role on MyRoleY to UserA.

并且如果命令更改为:

REVOKE MyRoleY FROM UserA GRANTED BY Mgr1;

然后显示错误消息:

unsuccessful metadata update
Only SYSDBA or database owner can use GRANTED BY clause.

虽然第二条消息明确可见,但为什么如果同时使用ROLE = RDB $ ADMIN(当然,这些用户被授予ADMIN ROLE)连接了Mgr1和Mgr2,那么他们可以不执行此操作吗?

Statements for Revoking Privileges 的标题为“ 撤销授予的特权”下的状态为:

  

当前用户必须以完全管理权限登录

如果以RDB $ ADMIN身份登录,那不是完全的管理员特权吗?

在链接'RDB$ADMIN Role'下的顶部,它还指出:

  

将RDB $ ADMIN角色分配给数据库中的常规用户将授予该用户SYSDBA的特权。

那么为什么Mgr2拥有像SYSDBA这样的特权?

一些寻求答案的问题:

  1. 我在这里做错什么了吗?有没有办法连接或允许Mg​​r2将GRANT撤销到Mgr1制作的角色?

  2. 我们不想共享SYSDBA或数据库所有者凭据来执行这些操作,所以还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

由于Firebird 2.5.9发行说明未提及任何与用户授权相关的错误修正,因此我认为您有误解,很可能是您在使用Mgr2登录时未调用<DialogContentText> {result1} </DialogContentText> 。在尝试撤消操作之前,请尝试查询活动角色。

只需使用 IBExpert 套件在 Firebird 2.5.9 Win64 中进行了尝试。

第一次会议:

RDB$ADMIN

第二届会议:

/*** connected as SYSDBA with no role specified ***/
GRANT RDB$ADMIN TO ADM_1;
GRANT RDB$ADMIN TO ADM_2;
CREATE ROLE USER_ROLE;

第三次会议:

/*****  ADM_1 with RDB$ADMIN role specified *****/
select current_role, current_user from rdb$database;
-- ROLE         USER
-- RDB$ADMIN    ADM_1

grant user_role to user_1;
grant user_role to user_2 granted by sysdba;

因此,至少在2.5.9 SuperServer中,它具有到数据库的单个连接-它可以正常工作。

P.S。由于您可以拥有的管理员人数不止两个,而且有几个管理员可以向用户授予角色,因此必须逐一找到并撤消其中的每个授予,所以我建议您针对这种情况,用户,然后以他的名字授予所有资助,就像我在第二届会议中对/***** ADM_2 with RDB$ADMIN role specified *****/ select current_role, current_user from rdb$database; -- ROLE USER -- RDB$ADMIN ADM_2 revoke user_role from user_2 granted by sysdba; -- OK revoke user_role from user_1; -- This operation is not defined for system tables. -- unsuccessful metadata update. -- ADM_2 is not grantor of Role on USER_ROLE to USER_1. revoke user_role from user_1 granted by adm_1; -- OK 所做的那样。