PostgreSQL procedury wyzwalane.
=?ISO-8859-2?Q?Cezary_Gr=B1dys?= - 04-11-2005 23:16
PostgreSQL procedury wyzwalane.
Witam. Tak dla próby stworzyłem sobie procedure wyzwalaną, która przy operacjach typu insert, update kopiuje zmieniany/ wstawiany wiersz do tabeli kopia. No i wszystko działa, ale pomyślałem sobie, że stworzę procedurę zabraniającą wpisów bezpośrednio do tabeli kopia. No i niestety ta procedura uniemożliwia tej poprzedniej dokonanie wpisu do tabeli :( Mam pytanie. Jak to można elegancko rozwiązać ? Chodzi mi o procedurę uruchamianą przez trigger, a nie zabieranie praw do zapisu. Czyli jak poznać, że jest to już kolejny poziom wyzwalacza.
Pozdrawiam
-- Cezary Grądys czarekgr@wa.onet.pl
hubert depesz lubaczewski - 04-11-2005 23:16
Dnia 30.10.2005 Cezary Grądys <czarekgr@wa.onet.pl> napisał/a: > Tak dla próby stworzyłem sobie procedure wyzwalaną, która przy > operacjach typu insert, update kopiuje zmieniany/ wstawiany wiersz do > tabeli kopia. No i wszystko działa, ale pomyślałem sobie, że stworzę > procedurę zabraniającą wpisów bezpośrednio do tabeli kopia. No i > niestety ta procedura uniemożliwia tej poprzedniej dokonanie wpisu do > tabeli :( > Mam pytanie. Jak to można elegancko rozwiązać ? Chodzi mi o procedurę > uruchamianą przez trigger, a nie zabieranie praw do zapisu. Czyli jak > poznać, że jest to już kolejny poziom wyzwalacza.
nie sądze by dało się to zrobić bez praw. tzn. oczywiście możesz dodać do tabeli "kopia" dodatkowe pole i jeśli ktoś nie ustawia tam wartości to zakazać, a trigger główny by ustawiał. ale myslę, że dużo bardziej elegancko jest:
1. stworzyć nowego usera (archiwista) 2. tabelę kopia utworzyć z ownerem archiwista 3. zabrać wszelkie prawa do kopii wszystkim poza archiwistą 4. dać uprawnienia wszystkie do tabeli podstawowej archiwiście. 5. funkcję triggera stwrozyć z ownerem archiwista i opcją: with security definer 6. założyć triggera na tabeli podstawowej.
powinno zadziałać ładnie i elegancko z wydocznym rozróżniem funkcji.
depesz
-- *------------------------------------------------------------------* najwspanialszą rzeczą jaką dało nam nowoczesne społeczeństwo, jest niesamowita wręcz łatwość unikania kontaktów z nim
=?ISO-8859-2?Q?Cezary_Gr=B1dys?= - 04-11-2005 23:16
Użytkownik hubert depesz lubaczewski napisał: > Dnia 30.10.2005 Cezary Grądys <czarekgr@wa.onet.pl> napisał/a: > >>Tak dla próby stworzyłem sobie procedure wyzwalaną, która przy >>operacjach typu insert, update kopiuje zmieniany/ wstawiany wiersz do >>tabeli kopia. No i wszystko działa, ale pomyślałem sobie, że stworzę >>procedurę zabraniającą wpisów bezpośrednio do tabeli kopia. No i >>niestety ta procedura uniemożliwia tej poprzedniej dokonanie wpisu do >>tabeli :( >>Mam pytanie. Jak to można elegancko rozwiązać ? Chodzi mi o procedurę >>uruchamianą przez trigger, a nie zabieranie praw do zapisu. Czyli jak >>poznać, że jest to już kolejny poziom wyzwalacza. > > > nie sądze by dało się to zrobić bez praw. > tzn. oczywiście możesz dodać do tabeli "kopia" dodatkowe pole i jeśli > ktoś nie ustawia tam wartości to zakazać, a trigger główny by ustawiał. > ale myslę, że dużo bardziej elegancko jest: > > 1. stworzyć nowego usera (archiwista) > 2. tabelę kopia utworzyć z ownerem archiwista > 3. zabrać wszelkie prawa do kopii wszystkim poza archiwistą > 4. dać uprawnienia wszystkie do tabeli podstawowej archiwiście. > 5. funkcję triggera stwrozyć z ownerem archiwista i opcją: with security > definer > 6. założyć triggera na tabeli podstawowej. > > powinno zadziałać ładnie i elegancko z wydocznym rozróżniem funkcji. > > depesz >
Dzięki.
-- Cezary Grądys czarekgr@wa.onet.pl
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[PostgreSQL] - jak =?ISO-8859-2?Q?zabezpieczy=E6_interesy_tw?==?ISO-8859-2?Q?=F3rcy_systemu_=3F=3F=3F?=
postgresql - int/int
postgresql Select count(*) czy raczej Select count(ID)
[PostgreSQL] jak =?ISO-8859-2?Q?pobra=E6_warto=B6=E6_zwracan?==?ISO-8859-2?Q?=B1_przez_funkcj=EA=3F?=
[postgresql] INSERT OR UPDATE - jak =?ISO-8859-2?Q?b=EAdzie_na?==?ISO-8859-2?Q?jlepiej=3F?=
[postgresql] kilka =?ISO-8859-2?Q?rekord=F3w_subquery_jako_?==?ISO-8859-2?Q?string?=
[PostgreSQL] Jak =?ISO-8859-2?Q?po=B3=B1czy=E6_funkcje_z_w?==?ISO-8859-2?Q?idokiem?=
Postgres - replikcja master-master
Dopasowanie do "najlepszego" dopasowania :) [ PostgreSQL]
Problemy z =?ISO-8859-2?Q?instalacj=B1_PostgreSQL_na_syste?==?ISO-8859-2?Q?mach_Windows?=
zanotowane.pldoc.pisz.plpdf.pisz.plmorebeer.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|