2016-11-22 64 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 –