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

Oracle Làm thế nào để cấp quyền TẠO BẤT KỲ THƯ MỤC NÀO với hạn chế rằng tất cả các thư mục phải được tạo bên trong một thư mục nhất định?

Điều đó phụ thuộc, nếu bạn muốn hạn chế thư mục hệ điều hành nào mà Oracle có thể truy cập từ các lệnh utl_file, bạn có thể đặt utl_file_dir tham số. Rất tiếc, thông số này là trên toàn hệ thống, vì vậy bạn sẽ không thể cấp / thu hồi cho một người dùng cụ thể bằng cách sử dụng thông số này. Cũng nên nhớ rằng nếu bạn thực hiện thay đổi đối với tham số này, những thay đổi đó sẽ không có hiệu lực cho đến khi cơ sở dữ liệu Oracle được khởi động lại:

alter system set utl_file_dir = '/foo/bar' scope=spfile;
shutdown immediate;
startup open;

Tham khảo 12.1 Tài liệu Oracle để biết thêm thông tin về utl_file_dir .

Điều đó nói rằng, nếu bạn thực sự muốn hạn chế ai có thể tạo Thư mục Oracle cho các thư mục hệ điều hành cụ thể, một thủ tục sẽ thích hợp cho tác vụ đó vì điều đó sẽ cho phép bạn có quyền kiểm soát chi tiết hơn (và giới hạn người có create any directory đặc quyền cho chủ sở hữu của thủ tục):

sqlplus kjohnston

create or replace procedure mydircreate (p_dir varchar2)
as
  ex_custom EXCEPTION;
  PRAGMA EXCEPTION_INIT( ex_custom, -20001 );
begin
  if lower(p_dir) not like '/foo/bar/%' then
    raise_application_error( -20001, 'Not authorized' );
  end if;

  execute immediate 'create or replace directory mydir as ''' || p_dir || '''';
end mydircreate;

create user testuser identified by <password>;
grant create session to testuser;
grant execute on kjohnston.mydircreate to testuser;

exit;

sqlplus testuser

SQL> exec kjohnston.mydircreate('mydir', '/randomdir');
ORA-20001: Not authorized

SQL> exec kjohnston.mydircreate('mydir', '/foo/bar/baz');
PL/SQL procedure successfully completed.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. oracle làm thế nào để thay đổi bảng thêm phân vùng theo khoảng thời gian

  2. Vấn đề kết nối qt + oracle

  3. Logic kinh doanh:Cơ sở dữ liệu hoặc Lớp ứng dụng

  4. Gọi hàm pl / sql trong java?

  5. Cách đặt ưu tiên cho giá trị null trong khi chọn