我将架构“测试”的架构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
.. ...
答案 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,其中列出了权限。根据您的需要,您将组合三个视图/表函数
更新:
我感兴趣并快速输入并测试了一个查询。这应该直接回答。需要“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')