2

特定のデータベースでユーザーに付与されている既定のアクセス許可を特定する方法を探しています。私はこれを試しました:

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

上記には 2 つの問題があります。最初に、記述されているように、クエリは、user-id が所有する各テーブルの権限ごとに 1 つの行を返します。これには、具体的に付与された権限が含まれます。第 2 に、user-d がテーブルをまったく作成していない場合、行は返されません。

ユーザーとデータベースのデフォルトのアクセス許可を含む別の DBC ビューがあることを願っています。

4

3 に答える 3

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

お役に立てば幸いです。

于 2014-12-09T08:49:37.233 に答える
2

データベース レベルでの暗黙的な権限は、ユーザーがデータベースを自分で作成した場合にのみ存在します。それ以外の場合、暗黙的な権限は、オブジェクトを作成したデータベース内のオブジェクト レベルにあります。

システムまたはセキュリティ管理者によって付与された明示的な権限は、ロール レベルで管理することをお勧めします。ロール メンバーシップは、DBC.RoleMembers ビュー内で決定できます。特定のロールのアクセス権は、DBC.AllRoleRights で識別できます。ただし、私の記憶が正しければ、DBC.AllRights ビューで疑似テーブル 'All' を参照すると、データベース レベルでユーザーに付与された明示的な権限を判断できます。

于 2012-07-17T22:00:28.357 に答える