Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Uprawnienia Select do tabel dynamicznych
primo102
post 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 questionmark.gif
Go to the top of the page
+Quote Post
redman2
post 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ń:
  1. SELECT 'grant select on ' || table_name || ' to user1;' FROM dba_tables WHERE table_name LIKE 'TB%'


Kursor ten czytaj w pętli i wykonuj go execute immediate ....

Procedurę zaś zapisz do programu i uruchamiaj cyklicznie przez dba_scheduler'a.

Pozdrawiam
Go to the top of the page
+Quote Post
primo102
post 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 questionmark.gif





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;
/
Go to the top of the page
+Quote Post
redman2
post 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.
Go to the top of the page
+Quote Post
primo102
post 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Ę.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 02:34