我将模式“ test ”的模式 CREATEIN 权限授予用户组“ test-group ”,然后将用户“ test-user ”添加到Windows 操作系统中的此“ test-group ”中。
我想知道什么 DB2 函数或 SQL 语句可用于检索用户“ test-user ”的权限信息。我知道 DB2 中没有定义用户组关系,但必须有一些方法来查找此类关系数据。
举个例子,在用户“ test-user ”登录数据库后,我可以在模式“ test ”中成功创建一个表,这意味着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
.. ...
Run Code Online (Sandbox Code Playgroud)
您可以使用表函数AUTH_LIST_GROUPS_FOR_AUTHID来查找“test-user”的组。这将列出用户所属的所有组,包括不用于数据库的操作系统组。
SELECT * FROM TABLE (SYSPROC.AUTH_LIST_GROUPS_FOR_AUTHID('TEST-USER')) AS T
Run Code Online (Sandbox Code Playgroud)
还有另一个视图SYSIBMADM.AUTHORIZATIONIDS,它列出了所有授权 ID,即组、用户和角色:
SELECT * FROM SYSIBMADM.AUTHORIZATIONIDS
Run Code Online (Sandbox Code Playgroud)
您需要的最后一个视图是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')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19687 次 |
| 最近记录: |