由于在特定数据库中授予用户权限,因此该用户必须是该特定数据库中的 RDB$ADMIN 并且必须在连接时指定角色。用户在 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
他们需要在连接上指定角色。