Không có gì lạ khi muốn có một tập lệnh duy nhất để triển khai thay đổi. Vấn đề là, một kịch bản như vậy cần phải được chạy bởi một người sử dụng điện, bởi vì nó cần phải có các đặc quyền hệ thống ở mức BẤT CỨ. Điều này thường có nghĩa là một tài khoản DBA, tốt hơn là một tài khoản ứng dụng nhưng nếu không thì SYSTEM hoặc SYS.
Vì vậy, kịch bản mà bạn muốn sẽ trông như thế này:
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 kịch bản phổ biến là chúng ta có một bộ kịch bản cá nhân mà đã được viết để được điều hành bởi người dùng khác nhau nhưng mà bây giờ chúng ta cần phải bó 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 tập lệnh.
Một cách để xây dựng mà kịch bản tổng thể 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 các kịch bản tổng thể. 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, thông qua một cú pháp của cú pháp không thể có tên lược đồ trong khai báo của chúng. Một lưu ý là người dùng không thay đổi, do đó, tập lệnh sử dụng cột giả USER có thể tạo ra kết quả không mong muốn.
Không có ý nghĩa - tập lệnh không tồn tại trong lược đồ, chúng chỉ là danh sách các lệnh mà người dùng bạn đang kết nối với cá thể có đặc quyền để chạy. Báo cáo cấp IIRC là cho mỗi đối tượng (IE: bảng). Vui lòng lặp lại câu hỏi của bạn để rõ ràng hơn những gì bạn đang hỏi. –