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

Làm cách nào để viết một chính sách trong Oracle SQL hạn chế quyền truy cập của những người không phải là chủ sở hữu đối với một bảng?

Bạn hoàn toàn không phải làm bất cứ điều gì về nó.

Các bảng (và dữ liệu được lưu trữ bên trong) thuộc sở hữu của người dùng A. Không ai có thể xem bảng đó trừ khi người dùng A cấp một số đặc quyền cho người dùng khác, chẳng hạn như người dùng B.

Điều đó có thể được thực hiện bằng cách cấp một số đặc quyền, tức là

grant select on my_table to user_B;

và người dùng B sau đó sẽ tìm nạp dữ liệu dưới dạng

select * from user_A.my_table;

Người dùng B sẽ không thể sửa đổi dữ liệu (vì nó không được cấp chèn / cập nhật / xóa).

Hơn nữa, bạn (với tư cách là người dùng A) có thể tạo chế độ xem chỉ chọn một phần dữ liệu, ví dụ:

create view v_my_table as 
  select * 
  from my_table
  where score > 4;

grant select on v_my_table to user_B;

Làm như vậy, người dùng B sẽ chỉ thấy các hàng có điểm lớn hơn 4.

Nếu có người dùng C, nó hoàn toàn không thể nhìn thấy bất cứ điều gì. Nếu bạn muốn nó xem một số dữ liệu, bạn sẽ làm những gì bạn đã làm với người dùng B - cấp các đặc quyền nhất định.

Tuy nhiên, có một tùy chọn để cho phép người dùng B "chuyển tiếp" các đặc quyền cho người dùng khác - bạn sẽ sử dụng with grant option , ví dụ:

grant select on my_table to user_B with grant option;

Điều đó sẽ cho phép người dùng B cấp quyền chọn cho những người dùng khác, ví dụ:

grant select on user_A.my_table to user_C;

Cuối cùng (nói về câu trả lời này), nếu có nhiều người dùng mà bạn muốn cấp các đặc quyền đó, bạn có thể tạo vai trò . Sau đó, bạn sẽ cấp đặc quyền cho một vai trò và cấp vai trò cho (những) người dùng khác. Nó cho phép bạn sửa đổi các vai trò tùy thuộc vào mong muốn của bạn (và của những người dùng khác).

create role my_role;
grant select on my_table to my_role;

Ví dụ, để bắt đầu, bạn có thể cấp cho select tới my_role , rồi cấp my_role cho người dùng B, C và D.

grant my_role to user_B;
grant my_role to user_C;

Sau đó, bạn có thể cấp insert tới my_role

grant insert on my_table to my_role;

và tất cả người dùng được cấp my_role sẽ tự động có thể chèn các hàng vào my_table của người dùng A.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - Cách chọn hàng có cột có giá trị lớn nhất

  2. Oracle SQL:Chọn dữ liệu và tên phân vùng từ bảng và cắt bớt các phân vùng

  3. Cách cài đặt cx_Oracle trên El Capitan

  4. Làm thế nào để tham chiếu id của cha mẹ trong id của trẻ với JPA / Hibernate?

  5. PostgreSQL so với Oracle:Sự khác biệt về chi phí, tính dễ sử dụng và chức năng