DB2如何在授予其组权限时获取用户权限信息

1 security db2 privileges

我将模式“ test ”的模式 CREATEIN 权限授予用户组“ test-group ”,然后将用户“ test-user ”添加到Windows 操作系统中的此“ test-group ”中。

我想知道什么 DB2 函数或 SQL 语句可用于检索用户“ test-user ”的权限信息。我知道 DB2 中没有定义用户组关系,但必须有一些方法来查找此类关系数据。

举个例子,在用户“ test-user ”登录数据库后,我可以在模式“ test ”中成功创建一个表,这意味着DB2引擎可以获得从“ test-group ”继承的“test-user”CREATEIN权限。

我尝试通过 SQL 语句检查 syscat.schemaauth 视图 select * from syscat.schemaauth,但找不到用户“ test-user ”权限定义,仅找到组“test-group”权限定义:

GRANTOR      GRANTORTYPE  GRANTEE GRANTEETYPE  SCHEMANAME   ALTERINAUTH   CREATEAUTH  DROPINAUTH
...  ....
SYSIBM          S          PUBLIC   G         ADMINISTRATOR N                Y          N
ADMINISTRATOR   U          TEST     G          TEST         N                Y          Y
.. ...
Run Code Online (Sandbox Code Playgroud)

dat*_*rik 5

您可以使用表函数AUTH_LIST_GROUPS_FOR_AUTHID来查找“test-user”的组。这将列出用户所属的所有组,包括不用于数据库的操作系统组。

SELECT * FROM TABLE (SYSPROC.AUTH_LIST_GROUPS_FOR_AUTHID('TEST-USER')) AS T
Run Code Online (Sandbox Code Playgroud)

还有另一个视图SYSIBMADM.AUTHORIZATIONIDS,它列出了所有授权 ID,即组、用户和角色:

SELECT * FROM SYSIBMADM.AUTHORIZATIONIDS
Run Code Online (Sandbox Code Playgroud)

您需要的最后一个视图是SYSIBMADM.PRIVILEGES,它列出了权限。根据您的需要,您可以组合三个视图/表功能

  • 查找数据库已知的用户组
  • 列出用户的权限并且
  • 列出用户所属的所有组的权限

更新:
我很感兴趣并快速输入并测试了一个查询。这应该直接回答。or a.authid='PUBLIC'需要“ ”来包含来自PUBLIC 的那些权限。

SELECT distinct p.AUTHID, p.PRIVILEGE, p.OBJECTNAME, p.OBJECTSCHEMA, p.OBJECTTYPE   
FROM SYSIBMADM.PRIVILEGES P, SYSIBMADM.AUTHORIZATIONIDS A,   
     TABLE (SYSPROC.AUTH_LIST_GROUPS_FOR_AUTHID('userID')) as U  
WHERE p.privilege='CREATEIN' and a.authidtype='G' and a.authid=p.authid
AND (u.group=a.authid or a.authid='PUBLIC')
Run Code Online (Sandbox Code Playgroud)