Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cách Hiển thị Tất cả Đặc quyền Cơ sở dữ liệu Oracle cho Người dùng

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_PRIVSDBA_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 , tablesroles , 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ồm ADMIN 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 cho GRANTEE 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_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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kết nối oci_connect không thành công

  2. Ngày mới cho các kỳ thi cấp chứng chỉ miễn phí trên Oracle Cloud và Cơ sở dữ liệu tự trị

  3. Kết nối cơ sở dữ liệu oracle trong web.config asp.net

  4. Kiểu dữ liệu Oracle Date, được chuyển đổi thành 'YYYY-MM-DD HH24:MI:SS TMZ' thông qua SQL

  5. Cơ sở dữ liệu lỗi của Oracle ở đâu?