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

Cấp quyền cho người dùng trên các giản đồ khác nhau

Không có gì lạ khi bạn muốn có một tập lệnh duy nhất để triển khai một thay đổi. Vấn đề là, một tập lệnh như vậy cần được chạy bởi người dùng thành thạo, bởi vì nó cần có các đặc quyền hệ thống ở BẤT CỨ cấp độ nào. Điều này thường có nghĩa là tài khoản DBA, tốt nhất là tài khoản ứng dụng nhưng nếu không thì là HỆ THỐNG hoặc SYS.

Vì vậy, tập lệnh bạn muốn sẽ giống như sau:

grant select on user_a.t23 to user_b
/
grant select on user_a.t42 to user_b
/
create view user_b.v_69 as
select t23.col1, t42.col2
from   user_a.t42
       join user_a.t23
           on (t42.id = t23.id)
/
grant select on user_b.v_69 to user_c
/

Một tình huống phổ biến là chúng ta có một bộ các tập lệnh riêng lẻ đã được viết để chạy bởi những người dùng khác nhau nhưng hiện chúng ta cần tập hợp lại thành một triển khai duy nhất. Các tập lệnh gốc không chứa tên lược đồ và có nhiều lý do chính đáng khiến chúng tôi không muốn mã hóa chúng trong các tập lệnh.

Một cách để xây dựng tập lệnh chính đó là sử dụng thay đổi cú pháp CURRENT_SCHEMA:

alter session set current_schema=USER_A
/
@run_grants_to_userb.sql

alter session set current_schema=USER_B
/
@create_view69.sql
@run_grants_to_userc.sql

Chúng tôi vẫn cần một người dùng DBA để chạy tập lệnh chính. Một lợi thế của việc chuyển đổi lược đồ hiện tại là nó cho phép chúng ta triển khai các đối tượng như các liên kết cơ sở dữ liệu, mà thông qua một cú pháp sai lệch không thể có tên lược đồ trong khai báo của chúng. Một điểm cần lưu ý là người dùng không thay đổi, vì vậy một tập lệnh sử dụng cột giả USER có thể tạo ra kết quả không mong muốn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo chuỗi UUID không có REGEXP_REPLACE và PL / SQL

  2. Lọc các hàng chỉ có dữ liệu số trong SQL cột

  3. Sử dụng Babel trong Sản xuất - Cách biên dịch trước các tập lệnh

  4. Sửa lỗi ORA-65096 khi tạo kiểm tra tự động trong Django bằng Oracle

  5. Làm cách nào để trả về một chuỗi CSV từ kiểu bảng PL / SQL trong Oracle