From: | "Russell Smith" <mr-russ(at)pws(dot)com(dot)au> |
---|---|
To: | pgsql-bugs(at)postgresql(dot)org |
Subject: | BUG #3265: 8.1 -> 8.2 behviour change: View owner must have access to underlying tables |
Date: | 2007-05-10 04:53:59 |
Message-ID: | 200705100453.l4A4rxZr013519@wwwmaster.postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged online:
Bug reference: 3265
Logged by: Russell Smith
Email address: mr-russ(at)pws(dot)com(dot)au
PostgreSQL version: 8.2.4
Operating system: RHEL4
Description: 8.1 -> 8.2 behviour change: View owner must have access
to underlying tables
Details:
During the testing phase of an upgrade from 8.1.3 to 8.2.4 I discovered the
following;
If the owner of a view does not have permission to the underlying tables,
then nobody can use the view. Not even SUPERUSERS. This may be expected
behaviour. The error "ERROR: permission denied for relation t1" is
displayed when executing the "SELECT * from v1" step. However the same SQL
executed on 8.1.3 will display the row from v1. The SQL below was run as a
superuser.
I am of the opinion that the 8.2.4 behaviour is what is expected and the
8.1.3 behaviour is incorrect.
So the issues are really;
1. 8.1.3 has a bug that allows execution of a view with privileges other
than the view owner.
2. 8.2.4 doesn't bypass privileges for views (possibly correct)
3. 8.1 -> 8.2 Documentation doesn't reflect the behaviour change.
I was unable to test on 8.1.8 sorry.
[further irc dicussion...]
It also appears to be an issue with the way PUBLIC is implied when you
create a table in 8.1 is different from the way it's done in 8.2.
I'm a little confused after all of the investigation done so far. So I'm
submitting what I've got and am happy to provide further clarification if I
get a clearer idea in my head of what I'm saying. Either way, the behaviour
has changed and a doc not about it is at least required.
Begin Reproduction Script;
BEGIN;
CREATE ROLE "USER";
create table t1 (a integer);
INSERT INTO t1 VALUES (1);
CREATE view v1 as select * from t1;
ALTER TABLE v1 OWNER TO "USER";
REVOKE ALL ON t1 FROM "USER";
SELECT * from v1;
DROP VIEW v1;
DROP TABLE t1;
DROP ROLE "USER";
ROLLBACK;
From | Date | Subject | |
---|---|---|---|
Next Message | Adam Kunen | 2007-05-10 05:11:41 | Re: BUG #3264: SPI: int64's sometimes returned by value sometimes by reference |
Previous Message | Tom Lane | 2007-05-10 04:37:18 | Re: BUG #3264: SPI: int64's sometimes returned by value sometimes by reference |