Niezrozumiałe insufficient privileges

0

Potrzebuję miejsca dla tymczasowych danych w procedurze i aktualnie próbuję widoku, ale dostaję ten sam komunikat co przy globalnej tabeli tymczasowej, którą tworzyłem podobnie wcześniej: ORA-01031: insufficient privileges, czego nie rozumiem, bo jestem zalogowany jako SYSTEM i spoza procedury jestem w stanie wykonać to bez problemu, a więc pewnie nie wiem o czymś, czego dotąd jeszcze nie wygoogle'owałem, mogę liczyć na pomoc?

create or replace procedure proc
(...)
is
...
begin
...
while  ...
loop
execute immediate 'create or replace view tempview as select field1, field2 from sometable where sth = ''' || sthsim || ''' and instr(''' || somerecord || ''', '''|| item ||''') = 0';
...
end loop;
end;
0
CREATE OR REPLACE PROCEDURE proc
(...)
AUTHID CURRENT_USER
IS

i doczytaj sobie po co to

0

Dotąd nie miałem o tym pojęcia, a teraz procedura będzie wywoływana z uprawnieniami usera (nie jak authid definer z uprawnieniami twórcy), który ją wywołuje, więc SYSTEMu na szczęście.

Działa, duże dzięki !

0

U mnie domyślnie system ma takie uprawnienia

select * from dba_sys_privs
where grantee = 'SYSTEM';

USERNAME                       PRIVILEGE                                ADMIN_OPTION 
------------------------------ ---------------------------------------- ------------ 
SYSTEM                         GLOBAL QUERY REWRITE                     NO           
SYSTEM                         CREATE MATERIALIZED VIEW                 NO           
SYSTEM                         CREATE TABLE                             NO           
SYSTEM                         UNLIMITED TABLESPACE                     YES          
SYSTEM                         SELECT ANY TABLE                         NO  
 

czyli nie ma uprawnień CREATE VIEW ani CREATE ANY VIEW.

U Ciebie pewno jest podobnie.

W procedurach są brane pod uwagę tylko uprawnienia przypisane wprost, ale już nie poprzez rolę.

Role są brane pod uwagę tylko przy interaktywnej sesji oraz w procedurach utworzonych z dyrektywą AUTHID CURRENT_USER
Użytkownik SYSTEM posiada takie role:

select * from dba_role_privs
where grantee = 'SYSTEM';

GRANTEE                        GRANTED_ROLE                   ADMIN_OPTION DEFAULT_ROLE 
------------------------------ ------------------------------ ------------ ------------ 
SYSTEM                         AQ_ADMINISTRATOR_ROLE          YES          YES          
SYSTEM                         CONNECT                        NO           YES          
SYSTEM                         DBA                            YES          YES     

Rola DBA pozwala tworzyć i kasować widoki (view)

select * from dba_sys_privs
where grantee = 'DBA' and privilege like '%VIEW%'
;

GRANTEE                        PRIVILEGE                                ADMIN_OPTION 
------------------------------ ---------------------------------------- ------------ 
DBA                            DROP ANY MATERIALIZED VIEW               YES          
DBA                            DROP ANY VIEW                            YES          
DBA                            CREATE VIEW                              YES          
DBA                            UNDER ANY VIEW                           YES          
DBA                            ALTER ANY MATERIALIZED VIEW              YES          
DBA                            CREATE ANY VIEW                          YES          
DBA                            MERGE ANY VIEW                           YES          
DBA                            CREATE ANY MATERIALIZED VIEW             YES          
DBA                            CREATE MATERIALIZED VIEW                 YES 

Na koniec generalna uwaga - w schematach SYS i SYSTEM nie należy tworzyć żadnych obiektów,
ani tym bardziej testować żadnych rzeczy. Przypadkowo coś skasujesz, zmienisz,
albo zapełnisz SYS/SYSTEM tablespace i kłopoty - grozi instalacja bazy od zera albo odtwarzanie z backupu.

0

Zaglądam tutaj od jakiegoś czasu i cieszę się, że to miejsce istnieje, właśnie pomogliście mi to zrozumieć (dziwiłem się, że system nie może zrobić 'wszystkiego', ot tak) i przy okazji poszukiwań znalazłem impuls do szukania głębiej. Dzięki za poświęcony czas, pomoc i dobre rady panowie

1 użytkowników online, w tym zalogowanych: 0, gości: 1