oracle - แสดงรายการผู้ใช้ที่สามารถเข้าถึงตารางบางอย่างได้


28

ฉันแน่ใจว่ามีการถามก่อนหน้านี้ แต่ฉันไม่พบรายละเอียดที่เกี่ยวข้องสำหรับสิ่งต่อไปนี้

มีตารางที่สร้างไว้ล่วงหน้าบางประเภทที่สามารถทำสิ่งต่อไปนี้ได้หรือไม่ (ฉันใช้ dba_tab_privs แล้ว แต่มีข้อ จำกัด และไม่ตรงกับความต้องการทั้งหมดของฉัน) ถ้าไม่มีใครมีข้อสงสัยในการตอบคำถามต่อไปนี้บ้าง

  1. รายการผู้ใช้ทั้งหมดที่ได้รับมอบหมายบทบาทเฉพาะหรือไม่
  2. รายการบทบาททั้งหมดที่มอบให้กับผู้ใช้หรือไม่?
  3. แสดงรายการสิทธิ์ทั้งหมดที่มอบให้กับผู้ใช้หรือไม่
  4. แสดงรายการว่าบทบาทใดในตารางที่ให้สิทธิ์การเข้าถึง SELECT
  5. แสดงรายการตารางทั้งหมดที่ผู้ใช้สามารถเลือกได้
  6. ทำรายการผู้ใช้ทุกคนที่สามารถเลือกได้บนตารางเฉพาะ (ผ่านการได้รับบทบาทที่เกี่ยวข้องหรือผ่านการให้สิทธิ์โดยตรง ผลลัพธ์ของแบบสอบถามนี้ควรแสดงให้เห็นถึงบทบาทที่ผู้ใช้มีสิทธิ์เข้าถึงนี้หรือไม่ว่าจะเป็นการให้สิทธิ์โดยตรง

คำตอบ:


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';

ทำรายการผู้ใช้ทุกคนที่สามารถเลือกได้บนตารางเฉพาะ (ผ่านการได้รับบทบาทที่เกี่ยวข้องหรือผ่านการให้สิทธิ์โดยตรง ผลลัพธ์ของแบบสอบถามนี้ควรแสดงให้เห็นถึงบทบาทที่ผู้ใช้มีสิทธิ์เข้าถึงนี้หรือไม่ว่าจะเป็นการให้สิทธิ์โดยตรง

-- 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 หายไป
Leigh Riffel

ขออภัยต้องการการเชื่อมต่อโดย .. ก่อนหน้าสำหรับ # 6
Philᵀᴹ

คำตอบของคุณสำหรับ # 5 รวมตารางที่ผู้ใช้สามารถเลือกผ่านบทบาทที่ได้รับมอบหมายหรือไม่
dgf

ใช้งานได้หรือไม่หากผู้ใช้ได้รับสิทธิ์จากบทบาทที่ได้รับบทบาทอื่นหรือไม่
jpmc26

2

มีหลายวิธีในการรับข้อมูลที่คุณต้องการใช้:

มุมมองพจนานุกรมข้อมูล

อยู่ใน oracle

คุณสามารถสืบค้นมุมมองและดึงรายละเอียดตัวอย่างเช่น:

เลือก * จาก DBA_COL_PRIVS

เลือก * จาก ALL_COL_PRIVS;

เลือก * จาก USER_COL_PRIVS;

สิ่งนี้บอกคุณ:

มุมมอง DBA อธิบายถึงวัตถุคอลัมน์ทั้งหมดที่ให้ไว้ในฐานข้อมูล มุมมองทั้งหมดอธิบายถึงการมอบออบเจ็กต์คอลัมน์ทั้งหมดที่ผู้ใช้ปัจจุบันหรือสาธารณะเป็นเจ้าของวัตถุผู้อนุญาตหรือผู้รับสิทธิ์ มุมมอง USER อธิบายถึงการมอบออบเจกต์ในคอลัมน์ที่ผู้ใช้ปัจจุบันเป็นเจ้าของวัตถุผู้อนุญาตหรือผู้รับสิทธิ์

สำหรับข้อมูลเพิ่มเติมตรวจสอบนี้

หวังว่านี่จะช่วยได้


1
สิ่งนี้ดูเหมือนจะไม่ตอบคำถาม: DBA จะทราบได้อย่างไรว่าผู้ใช้รายใดสามารถเข้าถึงได้อย่างไร
จอนแห่งการค้าขายทั้งหมด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.