Việc truy xuất tất cả các đặc quyền của người dùng trong Oracle có thể bao gồm từ một nhiệm vụ đơn giản bằng cách sử dụng truy vấn SQL cơ bản đến một tập lệnh nâng cao, chủ yếu phụ thuộc vào mức độ liên quan của các vai trò và đặc quyền được định cấu hình trong máy chủ.
Trong hướng dẫn ngắn gọn này, chúng tôi sẽ đề cập đến cả phương pháp truy vấn SQL cơ bản cũng như phương pháp tập lệnh nâng cao, vì vậy bạn sẽ không gặp vấn đề gì bất kể mức độ phức tạp của thiết lập của bạn.
Truy vấn chế độ xem đặc quyền DBA / USER
Người quản trị cơ sở dữ liệu (DBA) cho Oracle có thể chỉ cần thực hiện một truy vấn để xem các hàng trong DBA_SYS_PRIVS
, DBA_TAB_PRIVS
và DBA_ROLE_PRIVS
để truy xuất thông tin về các đặc quyền của người dùng liên quan đến hệ thống system
, tables
và roles
, tương ứng.
Ví dụ:một DBA muốn xem tất cả system
các đặc quyền được cấp cho tất cả người dùng sẽ đưa ra truy vấn sau:
SELECT
*
FROM
DBA_SYS_PRIVS;
DBA_SYS_PRIVS
chế độ xem chứa ba cột dữ liệu:
-
GRANTEE
là tên, vai trò hoặc người dùng đã được chỉ định đặc quyền. -
PRIVILEGE
là đặc quyền được chỉ định. -
ADMIN_OPTION
cho biết liệu đặc quyền đã cấp có bao gồmADMIN
không tùy chọn.
Để xác định người dùng nào có trực tiếp cấp quyền truy cập vào một tables
chúng tôi sẽ sử dụng DBA_TAB_PRIVS
xem:
SELECT
*
FROM
DBA_TAB_PRIVS;
Bạn có thể kiểm tra tài liệu chính thức để biết thêm thông tin về các cột được trả về từ truy vấn này, nhưng các cột quan trọng là:
-
GRANTEE
là tên của người dùng có quyền truy cập được cấp. -
TABLE_NAME
là tên của đối tượng (bảng, chỉ mục, chuỗi, v.v.). -
PRIVILEGE
là đặc quyền được chỉ định choGRANTEE
cho đối tượng được liên kết.
Cuối cùng, truy vấn DBA_ROLE_PRIVS
chế độ xem có nhiều thông tin giống nhau nhưng có thể áp dụng cho roles
thay vào đó, nơi GRANTED_ROLE
cột chỉ định vai trò trong câu hỏi:
SELECT
*
FROM
DBA_ROLE_PRIVS;
Truy vấn Đặc quyền của Người dùng Hiện tại
Nếu không thể hoặc cần thiết truy cập DBA, bạn cũng có thể sửa đổi một chút các truy vấn ở trên để xem các đặc quyền chỉ dành cho người dùng hiện tại .
Điều này được thực hiện bằng cách truy vấn thay thế USER_
phiên bản của DBA_
ở trên lượt xem. Do đó, thay vì nhìn vào DBA_SYS_PRIVS
chúng tôi sẽ truy vấn USER_SYS_PRIVS
, như vậy:
SELECT
*
FROM
USER_SYS_PRIVS;
Kể từ USER_
các chế độ xem đặc quyền thực sự giống với DBA_
của chúng đối tác, nhưng chỉ dành riêng cho người dùng hiện tại, loại dữ liệu trả về và tên cột đều giống với khi truy vấn DBA_
lượt xem intead.
Tập lệnh nâng cao để tìm tất cả đặc quyền
Trong khi các phương pháp trên sẽ hoạt động đối với các cấu hình hệ thống cơ bản, mọi thứ bắt đầu trở nên lộn xộn trong Oracle khi nhiều vai trò tồn tại lần lượt cấp đặc quyền vai trò cho các vai trò khác, v.v. Kể từ DBA_
và USER_
chế độ xem đặc quyền chỉ hiển thị GRANTEES
với được giao trực tiếp quyền truy cập, thường thì các đặc quyền được gắn liền với các vai trò khác sẽ không được hiển thị một cách dễ dàng.
Để giải quyết vấn đề này, bạn nên sử dụng tập lệnh nâng cao, chẳng hạn như tác phẩm đáng tin cậy của Pete Finnigan và find_all_privs.sql
của anh ấy kịch bản. Bạn cũng có thể chọn phiên bản sửa đổi của David Arthur, find_all_privs2.sql
.
Trong cả hai trường hợp, mục đích của các tập lệnh này là cho phép bạn đệ quy xác định vị trí tất cả các đặc quyền được cấp cho một người dùng cụ thể. Khi tập lệnh định vị một roles
đối với người dùng, nó tìm kiếm đệ quy các vai trò và đặc quyền khác được cấp cho vai trò đó, lặp lại quá trình trong suốt chuỗi. Kết quả của tập lệnh có thể được xuất ra màn hình hoặc thành một tệp như mong muốn.
Bạn có thể tìm thêm thông tin về các tập lệnh này và cách sử dụng chúng tại petefinnigan.com.