Thread: BUG #2278: problem with grants

BUG #2278: problem with grants

From
"Tomasz Kliczak"
Date:
The following bug has been logged online:

Bug reference:      2278
Logged by:          Tomasz Kliczak
Email address:      tklimczak@atsisa.com
PostgreSQL version: 8.0.3
Operating system:   RedHat
Description:        problem with grants
Details:

example of database structure :

CREATE TABLE dt_a
(
  id int4 NOT NULL DEFAULT nextval('dt_a_seq'::text),
  name varchar(40) NOT NULL,
  sy_b_id int4,
  CONSTRAINT dt_a_pkey PRIMARY KEY (id),

  CONSTRAINT sy_task_priority FOREIGN KEY (sy_b_id)
      REFERENCES sy_b (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,

)
WITH OIDS;
ALTER TABLE dt_task OWNER TO "server";

CREATE TABLE sy_b
(
  id int4 NOT NULL,
  name varchar(40) NOT NULL,
  CONSTRAINT sy_b_pkey PRIMARY KEY (id)
)
WITH OIDS;
ALTER TABLE sy_b OWNER TO "server";
GRANT SELECT ON TABLE sy_b TO "\""server\""";




When i try to add something into table  dt_a I get error :

ERROR: permission denied for relation sy_task_priority
CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."sy_b" x WHERE "id" = $1
FOR UPDATE OF x"

I want to have constraint on table dt_a, and for table sy_b only SELECT
grant.
But when I add UPDATE grant on sy_b it works.

Re: BUG #2278: problem with grants

From
Richard Huxton
Date:
Tomasz Kliczak wrote:
>   CONSTRAINT sy_task_priority FOREIGN KEY (sy_b_id)
>       REFERENCES sy_b (id) MATCH SIMPLE

> When i try to add something into table  dt_a I get error :
>
> ERROR: permission denied for relation sy_task_priority
> CONTEXT: SQL statement "SELECT 1 FROM ONLY "public"."sy_b" x WHERE "id" = $1
> FOR UPDATE OF x"
>
> I want to have constraint on table dt_a, and for table sy_b only SELECT
> grant.
> But when I add UPDATE grant on sy_b it works.

That's because the foreign-key takes a lock to *prevent* updates. To do
this it takes an update lock though, which is why you see the error message.

HTH
--
   Richard Huxton
   Archonet Ltd