如何识别Teradata用户的所有权利?

Bel*_*Bob 2 teradata

我正在寻找一种方法来识别授予特定数据库中用户的默认权限.我试过这个:

select *
from dbc.allrights
where username='user-id'
  and databasename='database-name'
Run Code Online (Sandbox Code Playgroud)

上面有两个问题; 首先,如同编写的那样,查询为user-id拥有的每个表的每个permisison返回一行,并且它包括专门授予的权限.其次,如果user-d根本没有创建任何表,则不返回任何行.

我希望有另一个DBC视图包含用户和数据库的默认权限.

Bis*_*jit 5

您可以使用此查询来检查用户对不同数据库的访问:

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
Run Code Online (Sandbox Code Playgroud)

希望它可以帮到你.


Rob*_*ler 3

仅当用户自己创建数据库时,数据库级别的隐式权限才会存在。否则,隐式权限位于创建对象的数据库内的对象级别。

建议在角色级别管理系统或安全管理员授予的显式权限。角色成员身份可以在 DBC.RoleMembers 视图中确定。给定角色的访问权限可以在 DBC.AllRoleRights 中标识。但是,如果我没记错的话,如果您在 DBC.AllRights 视图中引用伪表“All”,则可以确定在数据库级别授予用户的显式权限。