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

DB2 how to get user privilege information when privilege is granted to its group

我将模式“test”的模式 CREATEIN 权限授予用户组“test-group”,然后添加用户“test-user' 到 Windows OS.

中的这个 'test-group'

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

例如,在用户'test-user[登录数据库后,我可以在模式'test'中成功创建table =29=]' 这意味着 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
.. ...

您可以使用 table 函数 AUTH_LIST_GROUPS_FOR_AUTHID 来查找 "test-user" 的组。这将列出用户所属的 ALL 个组,包括未用于数据库的 OS 个组。

SELECT * FROM TABLE (SYSPROC.AUTH_LIST_GROUPS_FOR_AUTHID('TEST-USER')) AS T

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

SELECT * FROM SYSIBMADM.AUTHORIZATIONIDS

您需要的最后一个视图是 SYSIBMADM.PRIVILEGES,其中列出了权限。根据您的需要,您可以组合三个 views/table 函数

  • 在用户的群组中查找数据库已知的群组
  • 列出用户的权限 AND
  • 列出用户所属的所有组的权限

更新:
我产生了兴趣并迅速输入并测试了一个查询。这应该直接回答它。需要“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')