sql >> データベース >  >> RDS >> Oracle

Oracleすべてのディレクトリを特定のディレクトリ内に作成する必要があるという制限付きでCREATEANYDIRECTORYを付与するにはどうすればよいですか?

    Oracleがutl_fileコマンドからアクセスできるOSディレクトリを制限する場合は、utl_file_dirを設定できます。 パラメータ。残念ながら、このパラメータはシステム全体であるため、このパラメータを使用して特定のユーザーに付与/取り消すことはできません。また、このパラメータに変更を加えた場合、それらの変更はOracleデータベースが再起動されるまで有効にならないことに注意してください。

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

    12.1Oracleドキュメントを参照してください utl_file_dirの詳細については 。

    とは言うものの、Oracleディレクトリを作成できるユーザーを特定のOSディレクトリに本当に制限したい場合は、そのタスクに適した手順です。これにより、よりきめ細かい制御が可能になります(そして、非常に強力なcreate any directory プロシージャの所有者への特権):

    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. サブクエリからの複数の行を単一の区切りフィールドに結合するSQLServer関数を作成するにはどうすればよいですか?

    2. SQL Server(T-SQL)から電子メールでクエリ結果を送信するときにパディングを削除する

    3. [データ]チェックボックスをオンにして[次へ]をクリックし、選択した行の選択を解除します

    4. 悪い習慣:SQLServerでのNULLの回避