Witam
Mam problem z nadaniem uprawnień w bazie Oracle (tylko do SELECT) do tabel dynamicznych czyli tabel które tworzą się codziennie z początkiem TB i z kolejnym numerem porządkowym - na razie codziennie dodaje uprawnienia do konkretnej tabeli. A chciałbym nadać uprawniania na stałem danemu użytkownikowi do wszystkich tabel zaczynających się od nazwy TB (podpiętych po użytkownika HR nie wiem czy to ważne)
teraz muszę codziennie
wklepywać :
grant select on HR.TB000.. to user1
a własnie chodzi mi czy jest możliwość wpisania polecenia coś w stylu:
grant select on any TB.* where tables like ('TB%')
ale nie działa nic takiego nie wiem może coś źle wpisuje, albo inne pomysły
Napisz procedurę pl/sql z kursorem, w którym zapiszesz dynamiczne generowanie uprawnień:
SELECT 'grant select on ' || table_name || ' to user1;' FROM dba_tables WHERE table_name LIKE 'TB%'
OK
myślę że tak jest dobrze:
BEGIN
FOR P IN (SELECT TABLE_NAME
FROM ALL_TABLES
WHERE TABLE_NAME LIKE 'TB%')
LOOP
EXECUTE IMMEDIATE 'grant select on '||P.TABLE_NAME|| ' to user1';
END LOOP;
END;
tylko nie bardzo rozumiem jak mam zapisać te procedurę do programu !?
a może wystarczy coś takiego- job który będzie wykonywał ten blok raz dziennie 0 12 00
BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB (
job_name => '"HR"."uprawnienie"',
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN
FOR P IN (SELECT TABLE_NAME
FROM ALL_TABLES
WHERE TABLE_NAME LIKE ''TB%'')
LOOP
EXECUTE IMMEDIATE ''grant select on ''||P.TABLE_NAME|| '' to user1'';
END LOOP;
END;',
number_of_arguments => 0,
start_date => TO_TIMESTAMP_TZ('2013-01-03 11:19:18 Europe/Belgrade','YYYY-MM-DD HH24.MI.SS TZR'),
repeat_interval => 'FREQ=DAILY;BYHOUR=12;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
job_class => '"SYS"."DEFAULT_JOB_CLASS"',
enabled => FALSE,
auto_drop => FALSE,
comments => 'only select to user1');
SYS.DBMS_SCHEDULER.SET_ATTRIBUTE(
name => '"HR"."uprawnienie"',
attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF);
SYS.DBMS_SCHEDULER.enable(
name => '"HR"."uprawnienie"');
END;
/
Job, program, procedura, funkcja. Cokolwiek, byle działało.
Zaproponowałem program, który będzie uruchamiany przez scheduler. Zrób, jak będzie Ci wygodniej. Idea taka sama, tylko implementacja trochę inna.
Powodzenia.
OK DZIĘKI ZA PODPOWIEDŹ TERAZ JUŻ DAM RADĘ.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)