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')
我将模式“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')