oracle - liệt kê người dùng có quyền truy cập vào một số bảng nhất định


28

Tôi chắc chắn rằng điều này đã được hỏi trước đây nhưng dường như tôi không thể tìm thấy các chi tiết có liên quan cho những điều sau đây.

Có một số loại bảng dựng sẵn có thể làm như sau (Tôi đã sử dụng dba_tab_privs nhưng nó bị giới hạn và không đáp ứng tất cả các nhu cầu của tôi), nếu không có ai có một số truy vấn để trả lời sau đây?

  1. Liệt kê tất cả người dùng đã được chỉ định một vai trò cụ thể?
  2. Liệt kê tất cả các vai trò được trao cho người dùng?
  3. Liệt kê tất cả các đặc quyền được trao cho người dùng?
  4. Liệt kê các bảng mà một vai trò nhất định cho phép truy cập CHỌN?
  5. Liệt kê tất cả các bảng mà người dùng có thể CHỌN từ đâu?
  6. Liệt kê tất cả người dùng có thể CHỌN trên một bảng cụ thể (thông qua việc được trao một vai trò có liên quan hoặc thông qua trợ cấp trực tiếp (nghĩa là cấp quyền chọn có thể thực hiện được cho joe))? Kết quả của truy vấn này cũng sẽ thể hiện qua vai trò nào mà người dùng có quyền truy cập này hoặc liệu đó có phải là một khoản trợ cấp trực tiếp hay không.

Câu trả lời:


33

Liệt kê tất cả người dùng đã được chỉ định một vai trò cụ thể

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

Liệt kê tất cả các vai trò được trao cho người dùng

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

Liệt kê tất cả các đặc quyền được trao cho người dùng

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;

Lưu ý: Lấy từ http://www.adp-gmbh.ch/ora/misc/recursively_list_priv đặc biệt.html

Liệt kê các bảng mà một vai trò nhất định cho phép truy cập CHỌN?

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

Liệt kê tất cả các bảng mà người dùng có thể CHỌN từ đâu?

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

Liệt kê tất cả người dùng có thể CHỌN trên một bảng cụ thể (thông qua việc được trao một vai trò có liên quan hoặc thông qua trợ cấp trực tiếp (nghĩa là cấp quyền chọn có thể thực hiện được cho joe))? Kết quả của truy vấn này cũng sẽ thể hiện qua vai trò nào mà người dùng có quyền truy cập này hoặc liệu đó có phải là một khoản trợ cấp trực tiếp hay không.

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

Đây là một khởi đầu tốt, nhưng # 3 không bao gồm các đặc quyền đối tượng, # 5 không bao gồm các SELECTđặc quyền có sẵn do vai trò và # 6 bị thiếu.
Leigh Riffel

Opps, cần một số KẾT NỐI BỞI .. TRƯỚC cho # 6
Phil

Câu trả lời của bạn cho # 5 có bao gồm các bảng mà người dùng có thể chọn thông qua vai trò mà họ đã được chỉ định không?
dgf

Điều này có hoạt động nếu người dùng nhận được đặc quyền từ một vai trò được cấp một vai trò khác không?
jpmc26

2

Có nhiều cách để có được thông tin bạn muốn sử dụng:

xem từ điển dữ liệu

có mặt trong nhà tiên tri.

Bạn chỉ có thể truy vấn các khung nhìn và truy xuất các chi tiết: Ví dụ:

chọn * từ DBA_COL_PRIVS;

chọn * từ ALL_COL_PRIVS;

chọn * từ USER_COL_PRIVS;

Điều này cho bạn biết:

Khung nhìn DBA mô tả tất cả các cấp đối tượng cột trong cơ sở dữ liệu. Chế độ xem TẤT CẢ mô tả tất cả các cấp đối tượng cột mà người dùng hiện tại hoặc PUBLIC là chủ sở hữu đối tượng, người cấp hoặc người được cấp. Khung nhìn USER mô tả các cấp đối tượng cột mà người dùng hiện tại là chủ sở hữu đối tượng, người cấp hoặc người được cấp.

Để biết thêm thông tin, hãy kiểm tra điều này

Hi vọng điêu nay co ich.


1
Điều này dường như không trả lời câu hỏi: làm thế nào một DBA có thể tìm ra những gì một người dùng tùy ý cụ thể có thể truy cập?
Jon của tất cả các giao dịch
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.