Andrey N. Oktyabrski wrote:
> qq=> UPDATE t SET a = 'ano' where i = 3;
> ERROR: доступ запрещён для связи t
> qq=> DELETE FROM t where i > 2;
> ERROR: доступ запрещён для связи t
>
> Потому я и хочу возможность update/delete без необходимости разрешения
> select.
Тут вот человек патчик соорудил, который даёт нужную функциональность,
но мы не уверены, что он не делает где-то дырку в безопасности. Надо,
чтобы его проверил человек, хорошо знакомый с дизайном постгреса:
--- postgresql-8.1.2/src/backend/executor/execMain.c 2005-11-22
21:23:08.000000000 +0300
+++ postgresql/src/backend/executor/execMain.c 2006-02-17
13:19:29.000000000 +0300
@@ -460,6 +460,16 @@
bool do_select_into;
TupleDesc tupType;
+ if ( operation == CMD_UPDATE )
+ {
+ ListCell *l;
+ foreach(l, parseTree->rtable)
+ {
+ RangeTblEntry *rte = lfirst(l);
+ rte->requiredPerms ^= ACL_SELECT;
+ }
+ }
+
/*
* Do permissions checks. It's sufficient to examine the
query's top
* rangetable here --- subplan RTEs will be checked during