Thread: permissions & foreign keys

permissions & foreign keys

From
"Tamsin"
Date:
Hi,

I am having some problems setting up security on my database:

I have a table 'feedback', with a foriegn key to a table 'feedback_type'
(tables at end).  I want to give the user all permissions on feedback, but
to only be able to select the possible values from the feedback_type table.
So, I have granted select, insert, update, delete on feedback, and only
select on feedback_type.  But...

When I try to update feedback, (e.g. update feedback set fb_type = 'bug'
where fb_id = 1011)
I get ERROR: feedback_type: permission denied, and looking at the debug
output, its doing:
'select oid from "feedback_type" where "fb_type" = $1 for update of
"feedback_type".
When I created the constraint, I just did:
ALTER TABLE feedback
       ADD CONSTRAINT fk_feedback_type
              FOREIGN KEY (fb_type)
                             REFERENCES feedback_type;

I don't really see why it wants to update feedback_type?  Can anyone tell me
what I'm doing wrong, or will I just have to grant update on feedback_type
(and all other tables referenced by FKs)?

Thanks for any help,
Tamsin

----------------------------
The tables are (abbreviated):

CREATE TABLE feedback (
       fb_id                INTEGER NOT NULL,
       usr_id               INTEGER NOT NULL,
       fb_type              VARCHAR(20) DEFAULT 'bug' NOT NULL,
       CONSTRAINT XPKfeedback
              PRIMARY KEY (fb_id)
);



CREATE TABLE feedback_type (
       fb_type              VARCHAR(20) NOT NULL,
       CONSTRAINT XPKfeedback_type
              PRIMARY KEY (fb_type)
);






Re: permissions & foreign keys

From
Jan Wieck
Date:
Tamsin wrote:
>
> I don't really see why it wants to update feedback_type?  Can anyone tell me
> what I'm doing wrong, or will I just have to grant update on feedback_type
> (and all other tables referenced by FKs)?
>

    It doesn't want to update it. It just does the SELECT ... FOR
    UPDATE to lock the now referenced row.  Doing  it  without  a
    lock  would  make  it  possible, that just after your backend
    checked that the PK row exists but before you got a chance to
    commit,  another  backend could delete that PK without seeing
    your just inserted reference. End  would  be  a  violated  FK
    constraint.

    The  bug  here is, that doing a SELECT ... FOR UPDATE already
    requires UPDATE permissions. The correct solution would be to
    require   a   REFERENCES  privilege  for  the  owner  of  the
    referencing table. But we don't have that up to now.

    Maybe I can do something about it for 7.1.


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #



RE: permissions & foreign keys

From
"Tamsin"
Date:
That's cleared that up, thanks!
Tamsin

-----Original Message-----
From: Jan Wieck [mailto:janwieck@Yahoo.com]
Sent: 04 September 2000 15:50
To: Tamsin
Cc: Pgsql-General@Postgresql.Org
Subject: Re: [GENERAL] permissions & foreign keys


Tamsin wrote:
>
> I don't really see why it wants to update feedback_type?  Can anyone tell
me
> what I'm doing wrong, or will I just have to grant update on feedback_type
> (and all other tables referenced by FKs)?
>

    It doesn't want to update it. It just does the SELECT ... FOR
    UPDATE to lock the now referenced row.  Doing  it  without  a
    lock  would  make  it  possible, that just after your backend
    checked that the PK row exists but before you got a chance to
    commit,  another  backend could delete that PK without seeing
    your just inserted reference. End  would  be  a  violated  FK
    constraint.

    The  bug  here is, that doing a SELECT ... FOR UPDATE already
    requires UPDATE permissions. The correct solution would be to
    require   a   REFERENCES  privilege  for  the  owner  of  the
    referencing table. But we don't have that up to now.

    Maybe I can do something about it for 7.1.


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#================================================== JanWieck@Yahoo.com #