DB2如何在将特权授予其组

时间:2016-11-22 04:11:56

标签: security db2 privileges

我将架构“测试”的架构CREATEIN权限授予用户组“测试组”,然后添加用户“测试用户在Windows操作系统中'进入'测试组'。

我想知道可以使用哪些DB2函数或SQL语句来检索用户“测试用户”的权限信息。我知道DB2中没有定义用户组关系,但必须有一些方法来查找这样的关系数据。

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

我试图通过SQL语句检查syscat.schemaauth视图  select * from syscat.schemaauth但无法找到用户'测试用户'仅限权限定义组'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
.. ...

1 个答案:

答案 0 :(得分:3)

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

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

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

SELECT * FROM SYSIBMADM.AUTHORIZATIONIDS

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

  • 在数据库已知的组中查找用户的组
  • 列出用户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')