0
我想運行一個不可靠的任務,如果一個條目更新/刪除/插入到我創建的postgresql表。Ansible - 如何檢查postgresql表更改?
我正在尋找一種方便的方法來實現這一點。如果不開發我自己的模塊,是否可以這樣做?
我想運行一個不可靠的任務,如果一個條目更新/刪除/插入到我創建的postgresql表。Ansible - 如何檢查postgresql表更改?
我正在尋找一種方便的方法來實現這一點。如果不開發我自己的模塊,是否可以這樣做?
當然你可以用Postgres(9.3開始)觸發。但我認爲這將是一個壞主意。反正只是爲了證明可以在數據改變運行shell命令的方式:
t=# create user no_priv password 'p';
CREATE ROLE
t=# create table r (t text); --to copy from program to
CREATE TABLE
t=# create or replace function bad_idea() returns trigger as
$$
begin
execute format ($f$copy r from program 'echo %s'$f$,TG_OP);
return new;
end;
$$ language plpgsql security definer;
CREATE FUNCTION
t=# create table bi (i int);
CREATE TABLE
t=# create trigger t before insert ON bi execute procedure bad_idea();
CREATE TRIGGER
t=# insert into bi select 0;
INSERT 0 1
t=# insert into bi select 0;
INSERT 0 1
t=# select * from r;
t
--------
INSERT
INSERT
(2 rows)
t=# grant all on bi, r to no_priv;
GRANT
現在合理的問題是什麼用戶no_priv和贈款是。出於顯而易見的原因,您需要超級用戶才能從程序中複製。爲了克服它,我們在函數創建時使用安全性定義,以便證明不是超級用戶仍然可以運行程序:
MacBook-Air:~ vao$ psql -h 192.168.8.110 -d t -U no_priv
Password for user no_priv:
Timing is on.
psql (9.6.1, server 9.6.3)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help.
t=> insert into bi select 0;
INSERT 0 1
Time: 53.883 ms
t=> select * from r;
t
--------
INSERT
INSERT
INSERT
(3 rows)
Time: 72.457 ms