Từ dbms_metadata
tài liệu:
Nếu người dùng không có đặc quyền được cấp một số hình thức truy cập vào một đối tượng trong giản đồ của người khác, họ sẽ có thể truy xuất đặc tả cấp thông qua API siêu dữ liệu, nhưng không phải siêu dữ liệu thực tế của đối tượng.
Vì vậy, trừ khi bạn được kết nối với tư cách là người dùng đặc quyền, bạn không thể xem DDL cho các đối tượng của người dùng khác. Bạn cần kết nối với tên SYS
hoặc có SELECT_CATALOG_ROLE
vai trò được cấp cho người dùng của bạn để có thể lấy định nghĩa đối tượng của XT.
Ngay cả với vai trò đó:
Trong các thủ tục, hàm và gói quyền định nghĩa được lưu trữ, các vai trò (chẳng hạn như SELECT_CATALOG_ROLE) bị vô hiệu hóa. Do đó, một chương trình PL / SQL như vậy chỉ có thể tìm nạp siêu dữ liệu cho các đối tượng trong lược đồ của chính nó. Nếu bạn muốn viết một chương trình PL / SQL tìm nạp siêu dữ liệu cho các đối tượng trong một lược đồ khác (dựa trên quyền sở hữu của kẻ xâm lược là SELECT_CATALOG_ROLE), bạn phải tạo quyền đối với chương trình.
Nếu bạn đang gọi dbms_metadata
từ một khối PL / SQL ẩn danh không quan trọng, nhưng nếu bạn đang gọi nó từ một thủ tục, bạn sẽ phải bao gồm một AUTHID
trong khai báo thủ tục, thêm AUTHID CURRENT_USER
.