]> granicus.if.org Git - postgresql/commitdiff
Fix incorrect permissions check in information_schema.key_column_usage view:
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 16 Jan 2007 18:32:26 +0000 (18:32 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 16 Jan 2007 18:32:26 +0000 (18:32 +0000)
it was checking a pg_constraint OID instead of pg_class OID, resulting in
"relation with OID nnnnn does not exist" failures for anyone who wasn't
owner of the table being examined.  Per bug #2848 from Laurence Rowe.

Note: for existing 8.2 installations a simple version update won't fix this;
the easiest fix is to CREATE OR REPLACE this view with the corrected
definition.

src/backend/catalog/information_schema.sql

index 3393f01f8bad1308450f45d141bbcfe1a87ff36d..a41801b5ac7ac8538b9977cee32b187acae11e12 100644 (file)
@@ -4,7 +4,7 @@
  *
  * Copyright (c) 2003-2007, PostgreSQL Global Development Group
  *
- * $PostgreSQL: pgsql/src/backend/catalog/information_schema.sql,v 1.39 2007/01/05 22:19:24 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/catalog/information_schema.sql,v 1.40 2007/01/16 18:32:26 tgl Exp $
  */
 
 /*
@@ -964,10 +964,10 @@ CREATE VIEW key_column_usage AS
                 AND r.relkind = 'r'
                 AND (NOT pg_is_other_temp_schema(nr.oid))
                 AND (pg_has_role(r.relowner, 'USAGE')
-                     OR has_table_privilege(c.oid, 'SELECT')
-                     OR has_table_privilege(c.oid, 'INSERT')
-                     OR has_table_privilege(c.oid, 'UPDATE')
-                     OR has_table_privilege(c.oid, 'REFERENCES')) ) AS ss
+                     OR has_table_privilege(r.oid, 'SELECT')
+                     OR has_table_privilege(r.oid, 'INSERT')
+                     OR has_table_privilege(r.oid, 'UPDATE')
+                     OR has_table_privilege(r.oid, 'REFERENCES')) ) AS ss
     WHERE ss.roid = a.attrelid
           AND a.attnum = (ss.x).x
           AND NOT a.attisdropped;