2016-11-22 65 views
0

我授予模式“测试”用户组“测试组”,然后添加一个用户“测试用户模式CREATEIN特权 '进入此'测试组'在Windows操作系统中。DB2如何获取用户权限信息,当特权授予其组

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

举个例子,我可以成功模式“测试”用户“测试用户”这意味着DB2引擎可以得到“测试用户登录数据库后创建表CREATEIN从继承特权'test-group'。

我试图检查由SQL statment syscat.schemaauth视图 select * from syscat.schemaauth,但无法找到用户“测试用户”特权定义唯一一组“测试组”特权定义:

GRANTOR  GRANTORTYPE GRANTEE GRANTEETYPE SCHEMANAME ALTERINAUTH CREATEAUTH DROPINAUTH 
... .... 
SYSIBM   S   PUBLIC G   ADMINISTRATOR N    Y   N 
ADMINISTRATOR U   TEST  G   TEST   N    Y   Y 
.. ... 

回答

2

你可以使用表函数AUTH_LIST_GROUPS_FOR_AUTHID查找“测试用户”组。这将列出所有用户所属的组,包括未用于数据库的操作系统组。

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

还有另一种观点认为,SYSIBMADM.AUTHORIZATIONIDS,其中列出了所有授权标识,即,组用户和角色:

SELECT * FROM SYSIBMADM.AUTHORIZATIONIDS 

你需要的最后一个观点是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') 
+0

很酷,感谢Henrik。根据你的建议,我得到了我需要的东西。感谢您的帮助。 – Rockets

+0

是的,Henrik。你的更新很好地回答了我的另一个问题,即'如何获得默认群组公开问题'。 :-) – Rockets

+0

我实际上用另一个SELECT语句创建了一个博客条目。请看这里http://blog.4loeser.net/2016/11/db2-security-implicit-privileges.html –