[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/utPLSQL/utPLSQL/develop/source/check_sys_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.
*/

define expected_grants = "&1"
declare
  c_expected_grants constant dbmsoutput_linesarray := dbmsoutput_linesarray( &expected_grants );

  l_expected_grants dbmsoutput_linesarray := c_expected_grants;
  l_missing_grants varchar2(4000);
begin
  if user != SYS_CONTEXT('userenv','current_schema') then
    for i in 1 .. l_expected_grants.count loop
      if l_expected_grants(i) != 'ADMINISTER DATABASE TRIGGER' then
        l_expected_grants(i) := replace(l_expected_grants(i),' ',' ANY ');
      end if;
    end loop;
  end if;

  with
    x as (
         select '' as remove from dual
         union all
         select ' ANY' as remove  from dual
    )
  select listagg(' -  '||privilege,CHR(10)) within group(order by privilege)
    into l_missing_grants
    from (
      select column_value as privilege
        from table(l_expected_grants)
      minus (
      select replace(p.privilege, x.remove) as privilege
        from role_sys_privs p
        join session_roles r using (role)
        cross join  x
      union all
      select replace(p.privilege, x.remove) as privilege
        from user_sys_privs p
        cross join  x
       )
    );
  if l_missing_grants is not null then
    raise_application_error(
        -20000
        , 'The following privileges are required for user "'||user||'" to install into schema "'||SYS_CONTEXT('userenv','current_schema')||'"'||CHR(10)
          ||l_missing_grants
          ||'Please read the installation documentation at http://utplsql.org/utPLSQL/'
    );
  end if;
end;
/

Web Proxy Viewer  |  New URL  |  Original Page