2012-07-15 16 views
2

我正在尋找一種方法來識別授予給特定數據庫中的用戶的默認權限。我試過這個:如何識別Teradata用戶的所有權利?

select * 
from dbc.allrights 
where username='user-id' 
    and databasename='database-name' 

上面有兩個問題;首先,按照書面的說法,查詢爲用戶標識擁有的每個表的每個授權返回一行,並且它包含專門授予的權限。其次,如果user-d根本沒有創建任何表,則不會返回任何行。

我希望有另一個DBC視圖包含用戶和數據庫的默認權限。

回答

2

只有當用戶自己創建數據庫時,數據庫級別的隱式權限纔會存在。否則,隱式權限位於創建對象的數據庫內的對象級別。

系統或安全管理員授予的顯式權限建議在角色級別進行管理。角色成員資格可以在DBC.RoleMembers視圖中確定。可以在DBC.AllRoleRights中標識給定角色的訪問權限。但是,如果我的內存正確服務,則可以在DBC.AllRights視圖中引用psuedo-table All,確定在數據庫級授予用戶的顯式權限。

+0

我想我需要閱讀更多關於角色和整個安全模型。我知道我們使用「角色」,但我不完全理解他們的工作方式。我只是「程序員」(實際上是一名SAS程序員),我可以訪問三個不同版本的Teradata環境,並且有數百個數據庫。除了嘗試「選擇」或「創建表」,我希望一個簡單的查詢可以告訴我我對錶或數據庫的訪問權限。但我會接受這個答案並轉到文檔。 – BellevueBob 2012-07-18 14:07:22

+0

讓我知道如果你遇到困難。我會盡我所能幫忙。 – 2012-07-18 17:37:49

4

您可以使用此查詢來檢查用戶的訪問不同的數據庫:

SELECT    
     A.GRANTEE as ProxyID,B.DATABASENAME, 
     CASE WHEN B.ACCESSRIGHT = 'D' THEN 'DELETE' 
      WHEN B.ACCESSRIGHT = 'I' THEN 'INSERT' 
      WHEN B.ACCESSRIGHT = 'R' THEN 'SELECT' 
      WHEN B.ACCESSRIGHT = 'SH' THEN 'SHOW TABLE/VIEW' 
      WHEN B.ACCESSRIGHT = 'U' THEN 'UPDATE' ELSE 'OTHER' END ACCESS_LEVEL 
    FROM  
     DBC.ROLEMEMBERS A Join DBC.ALLROLERIGHTS B 
    ON   
     A.ROLENAME = B.ROLENAME 
    WHERE 
     Grantee='USER_ID' AND B.DATABASENAME IN ('DATABASE1','DATABASE2',.....) 

    GROUP BY 1,2,3 
    ORDER BY 1,2,3 

希望它可以幫助你。