oracle-特定のテーブルへのアクセス権を持つユーザーをリストします


28

これは以前に尋ねられたと確信していますが、以下に関連する詳細を見つけることができないようです。

以下を行うことができる事前構築テーブルのようなものはありますか(dba_tab_privsを使用しましたが、制限されており、私のニーズをすべて満たしていない)、誰かが次の質問に答えるためのクエリを持っていませんか?

  1. 特定の役割が割り当てられているすべてのユーザーをリストしますか?
  2. ユーザーに与えられたすべての役割をリストしますか?
  3. ユーザーに与えられたすべての特権をリストしますか?
  4. 特定のロールがSELECTアクセスを許可するテーブルをリストしますか?
  5. ユーザーが選択できるすべてのテーブルをリストしますか?
  6. 特定のテーブルでSELECTできるすべてのユーザーをリストします(関連するロールの付与または直接付与(joe toableでのselectの付与))。このクエリの結果には、ユーザーがどのロールを介してこのアクセス権を持っているか、それが直接許可であったかどうかも表示されます。

回答:


33

特定の役割が割り当てられているすべてのユーザーをリストする

-- Change 'DBA' to the required role
select * from dba_role_privs where granted_role = 'DBA'

ユーザーに与えられたすべての役割を一覧表示する

-- Change 'PHIL@ to the required user
select * from dba_role_privs where grantee = 'PHIL';

ユーザーに与えられたすべての特権を一覧表示します

select
  lpad(' ', 2*level) || granted_role "User, his roles and privileges"
from
  (
  /* THE USERS */
    select 
      null     grantee, 
      username granted_role
    from 
      dba_users
    where
      username like upper('%&enter_username%')
  /* THE ROLES TO ROLES RELATIONS */ 
  union
    select 
      grantee,
      granted_role
    from
      dba_role_privs
  /* THE ROLES TO PRIVILEGE RELATIONS */ 
  union
    select
      grantee,
      privilege
    from
      dba_sys_privs
  )
start with grantee is null
connect by grantee = prior granted_role;

注:http ://www.adp-gmbh.ch/ora/misc/recursively_list_privilege.htmlから取得

特定のロールがSELECTアクセスを許可するテーブルをリストしますか?

-- Change 'DBA' to the required role.
select * from role_tab_privs where role='DBA' and privilege = 'SELECT';

ユーザーが選択できるすべてのテーブルをリストしますか?

--Change 'PHIL' to the required user
select * from dba_tab_privs where GRANTEE ='PHIL' and privilege = 'SELECT';

特定のテーブルでSELECTできるすべてのユーザーをリストします(関連するロールの付与または直接付与(joe toableでのselectの付与))。このクエリの結果には、ユーザーがどのロールを介してこのアクセス権を持っているか、それが直接許可であったかどうかも表示されます。

-- Change 'TABLENAME' below
select Grantee,'Granted Through Role' as Grant_Type, role, table_name
from role_tab_privs rtp, dba_role_privs drp
where rtp.role = drp.granted_role
and table_name = 'TABLENAME' 
union
select Grantee,'Direct Grant' as Grant_type, null as role, table_name
from dba_tab_privs
where table_name = 'TABLENAME' ;

これは良い出発点ですが、#3にはオブジェクト特権が含まれず、#5にはSELECTロールのために使用可能な特権が含まれず、#6が欠落しています。
リーリフェル

OPPS、#6のための先行..いくつかのCONNECT BYが必要
Philᵀᴹ

#5の答えには、ユーザーが割り当てられたロールを介して選択できるテーブルが含まれていますか?
-dgf

ユーザーが別のロールを付与されたロールから特権を取得した場合、これは機能しますか?
jpmc26

2

使用したい情報を取得するには多くの方法があります。

データディクショナリビュー

オラクルに存在します。

ビューを照会して詳細を取得するだけです。たとえば:

select * from DBA_COL_PRIVS;

ALL_COL_PRIVSから*を選択します。

USER_COL_PRIVSから*を選択します。

これはあなたに伝えます:

DBAビューは、データベース内のすべての列オブジェクト許可を記述します。ALLビューには、現在のユーザーまたはPUBLICがオブジェクト所有者、付与者、または被付与者であるすべての列オブジェクト付与が記述されます。USERビューは、現在のユーザーがオブジェクト所有者、付与者、または被付与者である列オブジェクト付与を説明します。

詳細情報については、これをチェック

お役に立てれば。


1
これは質問に答えていないようです。DBAは、特定の任意のユーザーがアクセスできるものをどのようにして見つけることができますか?
すべての取引のジョン14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.