[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/utPLSQL/utPLSQL/develop/source/check_object_grants.sql [Back]  [Original]

/*
  utPLSQL - Version 3
  Copyright 2016 - 2026 utPLSQL Project

  Licensed under the Apache License, Version 2.0 (the "License"):
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
*/

declare
  $if dbms_db_version.version >= 18 $then
    c_expected_grants constant dbmsoutput_linesarray := dbmsoutput_linesarray('DBMS_CRYPTO');
  $else
    c_expected_grants constant dbmsoutput_linesarray := dbmsoutput_linesarray('DBMS_LOCK','DBMS_CRYPTO');
  $end
  l_missing_grants varchar2(4000);
  l_target_table   varchar2(128);
  l_owner_column   varchar2(128);

  function get_view(a_dba_view_name varchar2) return varchar2 is
    l_invalid_object_name exception;
    l_result              varchar2(128) := lower(a_dba_view_name);
    pragma exception_init(l_invalid_object_name,-44002);
    begin
      l_result := dbms_assert.sql_object_name(l_result);
      return l_result;
      exception
      when l_invalid_object_name then
      return replace(l_result,'dba_','all_');
    end;

begin
  l_target_table := get_view('dba_tab_privs');
  l_owner_column := case when l_target_table like 'dba%' then 'owner' else 'table_schema' end;
  execute immediate q'[
  select /*+ no_parallel */ listagg(' -  '||object_name,CHR(10)) within group(order by object_name)
    from (
  select column_value as object_name
    from table(:l_expected_grants)
   minus
  select table_name as object_name
    from ]'||l_target_table||q'[
   where grantee = SYS_CONTEXT('userenv','current_schema')
     and ]'||l_owner_column||q'[ = 'SYS')]'
  into l_missing_grants using c_expected_grants;
  if l_missing_grants is not null then
    raise_application_error(
        -20000
        , 'The following object grants are missing for user "'||SYS_CONTEXT('userenv','current_schema')||'" to install utPLSQL:'||CHR(10)
          ||l_missing_grants||CHR(10)
          ||'Please read the installation documentation at http://utplsql.org/utPLSQL/'
    );
  end if;
end;
/

Web Proxy Viewer  |  New URL  |  Original Page