2012-07-15 40 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 

希望它可以帮助你。