Làm cách nào để tìm các đặc quyền và vai trò được cấp cho người dùng trong Oracle? [bản sao]


77

Tôi đang sử dụng Linux, Oracle10g. Tôi đã tạo một người dùng được gọi là thử nghiệm. và cấp phiên tạo và chọn bất kỳ quyền từ điển nào cho cùng một người dùng.

tôi cũng đã cấp các vai trò sysdba và sysoper cho cùng một người dùng.

Bây giờ tôi muốn hiển thị tất cả các đặc quyền và vai trò được cấp cho người dùng. Tôi đã tìm thấy truy vấn sau nhưng nó chỉ hiển thị các đặc quyền tạo phiên và chọn từ điển.

select privilege 
from dba_sys_privs 
where grantee='SAMPLE' 
order by 1;

xin vui lòng giúp đỡ để giải quyết vấn đề.

Cảm ơn


Bạn có thể sử dụng từ điển dữ liệu Tài liệu
Slava Babin

Câu trả lời:


61

Xem tại http://docs.oracle.com/cd/B10501_01/server.920/a96521/privs.htm#15665

Kiểm tra các bảng USER_SYS_PRIVS, USER_TAB_PRIVS, USER_ROLE_PRIVS với các câu lệnh chọn lọc này

SELECT * FROM USER_SYS_PRIVS; 
SELECT * FROM USER_TAB_PRIVS; 
SELECT * FROM USER_ROLE_PRIVS;

37
Nói cách khác, hãy làm SELECT * FROMnhững bảng đó. Đừng lười biếng ... Tôi cảm thấy khó chịu khi không thấy mã. Không phải ai cũng có thể đọc được suy nghĩ của bạn để biết cú pháp chính xác và các liên kết tài liệu có thể được di chuyển.
vapcguy

12
Dành cho những kẻ lười biếng ngoài kia: SELECT * FROM USER_SYS_PRIVS; SELECT * FROM USER_TAB_PRIVS; SELECT * FROM USER_ROLE_PRIVS;
Victor Romano

1
nếu bạn là người đang tìm kiếm các vai trò được cấp cho "bất kỳ thứ gì trong cơ sở dữ liệu" như tôi, USER_ROLE_PRIVSsẽ không phù hợp với bạn vì: "USER_ROLE_PRIVS mô tả các vai trò được cấp cho người dùng hiện tại", như tài liệu Oracle cho biết. Thay vào đó, bạn nên tìm kiếm thông tin trong DBA_ROLE_PRIVSchế độ xem. Tại sao? Bởi vì: "DBA_ROLE_PRIVS mô tả các vai trò được cấp cho tất cả người dùng và vai trò trong cơ sở dữ liệu"
Adrián Jaramillo

70

Ngoài câu trả lời của VAV, Câu trả lời đầu tiên hữu ích nhất trong môi trường của tôi

select * from USER_ROLE_PRIVS where USERNAME='SAMPLE';
select * from USER_TAB_PRIVS where Grantee = 'SAMPLE';
select * from USER_SYS_PRIVS where USERNAME = 'SAMPLE';

8
+1 rất đầy đủ. Đặt "user" thay cho mẫu để có được thông tin về người dùng đăng nhập hiện tại
daitangio

3
Lưu ý: nếu bạn đang sử dụng dba_XXX_privs, tên cột sẽ granteethay vì username.
Ông Llama

57

Không có câu trả lời nào khác phù hợp với tôi nên tôi đã viết giải pháp của riêng mình:

Theo Oracle 11g.

Thay thế USER bằng tên người dùng mong muốn

Các vai trò được cấp:

SELECT * 
  FROM DBA_ROLE_PRIVS 
 WHERE GRANTEE = 'USER';

Đặc quyền được cấp trực tiếp cho người dùng:

SELECT * 
  FROM DBA_TAB_PRIVS 
 WHERE GRANTEE = 'USER';

Các đặc quyền được cấp cho vai trò được cấp cho người dùng:

SELECT * 
  FROM DBA_TAB_PRIVS  
 WHERE GRANTEE IN (SELECT granted_role 
                     FROM DBA_ROLE_PRIVS 
                    WHERE GRANTEE = 'USER');

Đặc quyền hệ thống được cấp:

SELECT * 
  FROM DBA_SYS_PRIVS 
 WHERE GRANTEE = 'USER';

Nếu bạn muốn tìm kiếm người dùng mà bạn hiện đang kết nối, bạn có thể thay thế DBA trong tên bảng bằng USER và loại bỏ mệnh đề WHERE.


Đây là câu trả lời tốt nhất. Cảm ơn.
Baodad

Đây là một trong những đặc quyền nữa để làm tròn nó - Các đặc quyền hệ thống được cấp cho vai trò đã cấp cho người dùng: SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE IN (SELECT gain_role FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'DWMGR');
em_bo

10

Đặc quyền NẾU được cấp cho người dùng thông qua một số vai trò, thì SQL bên dưới có thể được sử dụng

select * from ROLE_ROLE_PRIVS where ROLE = 'ROLE_NAME';
select * from ROLE_TAB_PRIVS  where ROLE = 'ROLE_NAME';
select * from ROLE_SYS_PRIVS  where ROLE = 'ROLE_NAME';

rất hữu ích để tìm hiểu sâu hơn khi bạn có quyền được cung cấp thông qua vai trò .. Truy vấn thứ hai đã giúp tôi rất nhiều để kiểm tra xem một quyền truy cập bảng của chúng tôi có được cung cấp cho tôi hay không.
nanosoft

9

Kết hợp các đề xuất trước đó để xác định quyền cá nhân của bạn (tức là quyền 'NGƯỜI DÙNG'), sau đó sử dụng điều này:

-- your permissions
select * from USER_ROLE_PRIVS where USERNAME= USER;
select * from USER_TAB_PRIVS where Grantee = USER;
select * from USER_SYS_PRIVS where USERNAME = USER;

-- granted role permissions
select * from ROLE_ROLE_PRIVS where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
select * from ROLE_TAB_PRIVS  where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);
select * from ROLE_SYS_PRIVS  where ROLE IN (select granted_role from USER_ROLE_PRIVS where USERNAME= USER);

1
Thông minh! Đây phải là câu trả lời thực sự!
vapcguy

Tôi nghĩ rằng đây là câu trả lời tốt nhất. Nó hoạt động thực sự tốt cho tôi.
Diego Romero Rodriguez


1
select * 
from ROLE_TAB_PRIVS 
where role in (
    select granted_role
    from dba_role_privs 
    where granted_role in ('ROLE1','ROLE2')
)

0

luôn làm cho SQL có giá trị sử dụng lại: - :)

-- ===================================================
-- &role_name will be "enter value for 'role_name'".
-- Date:  2015 NOV 11.

-- sample code:   define role_name=&role_name
-- sample code:   where role like '%&&role_name%'
-- ===================================================


define role_name=&role_name

select * from ROLE_ROLE_PRIVS where ROLE = '&&role_name';
select * from ROLE_SYS_PRIVS  where ROLE = '&&role_name';


select role, privilege,count(*)
 from ROLE_TAB_PRIVS
where ROLE = '&&role_name'
group by role, privilege
order by role, privilege asc
;

Chỉ kiểm tra ROLESnhóm cho một vai trò nhất định. Nếu chúng ta đang nói về khả năng tái sử dụng, thì nó phải 1) lặp qua USERnhóm và rút ra *từ USER_ROLE_PRIVS, USER_TAB_PRIVSUSER_SYS_PRIVS , đối với một người dùng nhất định, thì 2) cung cấp các vai trò cho người dùng nhất định đó là đầu vào (như trong câu trả lời của ShamrockCS). Tôi nghĩ rằng với câu hỏi của OP, đó là nơi chúng tôi muốn biết các thuộc tính của một người dùng nhất định, không phải những người dùng có vai trò nhất định.
vapcguy

0

Kết quả hiển thị duy nhất mà tôi có thể hiểu là trước tiên kết nối với người dùng mà tôi muốn có quyền, sau đó với truy vấn sau:

SELECT GRANTEE, PRIVILEGE, TABLE_NAME FROM USER_TAB_PRIVS;
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.