Uprawnienia Select do tabel dynamicznych |
Uprawnienia Select do tabel dynamicznych |
2.01.2013, 21:29:01
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 2.01.2013 Ostrzeżenie: (0%) |
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 |
|
|
2.01.2013, 21:34:18
Post
#2
|
|
Grupa: Zarejestrowani Postów: 104 Pomógł: 3 Dołączył: 13.10.2004 Ostrzeżenie: (0%) |
Napisz procedurę pl/sql z kursorem, w którym zapiszesz dynamiczne generowanie uprawnień:
Kursor ten czytaj w pętli i wykonuj go execute immediate .... Procedurę zaś zapisz do programu i uruchamiaj cyklicznie przez dba_scheduler'a. Pozdrawiam |
|
|
3.01.2013, 11:22:01
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 2.01.2013 Ostrzeżenie: (0%) |
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; / |
|
|
3.01.2013, 11:25:51
Post
#4
|
|
Grupa: Zarejestrowani Postów: 104 Pomógł: 3 Dołączył: 13.10.2004 Ostrzeżenie: (0%) |
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. |
|
|
3.01.2013, 13:41:24
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 2.01.2013 Ostrzeżenie: (0%) |
OK DZIĘKI ZA PODPOWIEDŹ TERAZ JUŻ DAM RADĘ.
|
|
|
Wersja Lo-Fi | Aktualny czas: 29.03.2024 - 02:34 |