根据我的问题在这里 How to REVOKE ROLE GRANTED BY another user on Firebird 2.5.8?
和@Arioch的有用建议,用于在命令之前查询实际连接了什么ROLE。
SELECT CURRENT_ROLE FROM RDB$DATABASE
现在,尽管我的连接字符串明确使用“ ROLE = RDB $ ADMIN”,但在gsec中检查给定用户具有admin选项,当我运行命令时结果为NONE。这是使用Firebird ADO.NET FirebirdSql.Data.FirebirdClient接口v6.6。
因此,我使用FlameRobin进行了类似的检查,并使用相同的用户和指定的RDB $ ADMIN ROLE登录,结果是相同的:
有什么主意我为什么做错了为什么不返回“ RDB $ ADMIN”?
答案 0 :(得分:3)
由于在特定数据库中授予了用户权限,因此该用户在该特定数据库中必须为RDB $ ADMIN,并且必须指定connect上的角色。用户在GSEC中具有管理员角色仅意味着该用户在安全性数据库中具有管理员角色。这并不意味着他们在特定数据库中具有管理员角色。
事实CURRENT_ROLE
返回NONE
意味着用户未指定角色,或者未在当前数据库中被授予RDB $ ADMIN角色。
引用Firebird Language Reference, User Authentication, RDB$ADMIN Role:
内部创建的角色RDB $ ADMIN存在于每个数据库中。 将RDB $ ADMIN角色分配给数据库中的常规用户将授予 该用户仅在当前数据库中拥有SYSDBA的特权。
提升的特权在用户登录后生效 RDB $ ADMIN角色下的常规数据库,并完全控制 数据库中的所有对象。
在安全性数据库中被授予RDB $ ADMIN角色后, 创建,编辑和删除用户帐户的权限。
和
要通过SQL管理用户帐户,受赠方必须指定 连接时具有RDB $ ADMIN角色。没有用户可以连接到安全性 数据库,因此解决方案是用户连接到常规数据库 他还拥有RDB $ ADMIN权限的数据库,提供RDB $ ADMIN 他的登录参数中的角色。从那里,他可以提交任何SQL用户 管理命令。
该用户所在的任何数据库的SQL路由均被阻止 没有被授予RDB $ ADMIN角色。
GRANT ADMIN ROLE
子句仅适用于安全性数据库(特别适用于CREATE/ALTER/DROP USER
SQL用户管理语句),并且仅当用户通过普通数据库连接时,该数据库也具有RDB $ ADMIN角色在连接上指定该角色。
要在特定数据库中授予用户管理员特权,需要使用以下方式在该特定数据库中授予该角色:
GRANT [ROLE] RDB$ADMIN TO username
他们需要指定connect上的角色。