mirror of
https://github.com/postgres/postgres.git
synced 2025-07-03 20:02:46 +03:00
More cleanup of FOREIGN TABLE permissions handling.
This commit fixes psql, pg_dump, and the information schema to be
consistent with the backend changes which I made as part of commit
be90032e0d
, and also includes a
related documentation tweak.
Shigeru Hanada, with slight adjustment.
This commit is contained in:
@ -101,7 +101,7 @@ GRANT <replaceable class="PARAMETER">role_name</replaceable> [, ...] TO <replace
|
|||||||
There is also an option to grant privileges on all objects of the same
|
There is also an option to grant privileges on all objects of the same
|
||||||
type within one or more schemas. This functionality is currently supported
|
type within one or more schemas. This functionality is currently supported
|
||||||
only for tables, sequences, and functions (but note that <literal>ALL
|
only for tables, sequences, and functions (but note that <literal>ALL
|
||||||
TABLES</> is considered to include views).
|
TABLES</> is considered to include views and foreign tables).
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
@ -2557,8 +2557,8 @@ CREATE VIEW _pg_foreign_tables AS
|
|||||||
WHERE w.oid = s.srvfdw
|
WHERE w.oid = s.srvfdw
|
||||||
AND u.oid = c.relowner
|
AND u.oid = c.relowner
|
||||||
AND (pg_has_role(c.relowner, 'USAGE')
|
AND (pg_has_role(c.relowner, 'USAGE')
|
||||||
OR has_table_privilege(c.oid, 'SELECT')
|
OR has_table_privilege(c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER')
|
||||||
OR has_any_column_privilege(c.oid, 'SELECT'))
|
OR has_any_column_privilege(c.oid, 'SELECT, INSERT, UPDATE, REFERENCES'))
|
||||||
AND n.oid = c.relnamespace
|
AND n.oid = c.relnamespace
|
||||||
AND c.oid = t.ftrelid
|
AND c.oid = t.ftrelid
|
||||||
AND c.relkind = 'f'
|
AND c.relkind = 'f'
|
||||||
|
@ -11804,7 +11804,6 @@ dumpTable(Archive *fout, TableInfo *tbinfo)
|
|||||||
namecopy = strdup(fmtId(tbinfo->dobj.name));
|
namecopy = strdup(fmtId(tbinfo->dobj.name));
|
||||||
dumpACL(fout, tbinfo->dobj.catId, tbinfo->dobj.dumpId,
|
dumpACL(fout, tbinfo->dobj.catId, tbinfo->dobj.dumpId,
|
||||||
(tbinfo->relkind == RELKIND_SEQUENCE) ? "SEQUENCE" :
|
(tbinfo->relkind == RELKIND_SEQUENCE) ? "SEQUENCE" :
|
||||||
(tbinfo->relkind == RELKIND_FOREIGN_TABLE) ? "FOREIGN TABLE" :
|
|
||||||
"TABLE",
|
"TABLE",
|
||||||
namecopy, NULL, tbinfo->dobj.name,
|
namecopy, NULL, tbinfo->dobj.name,
|
||||||
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
|
tbinfo->dobj.namespace->dobj.name, tbinfo->rolname,
|
||||||
|
@ -2234,7 +2234,6 @@ psql_completion(char *text, int start, int end)
|
|||||||
" UNION SELECT 'DATABASE'"
|
" UNION SELECT 'DATABASE'"
|
||||||
" UNION SELECT 'FOREIGN DATA WRAPPER'"
|
" UNION SELECT 'FOREIGN DATA WRAPPER'"
|
||||||
" UNION SELECT 'FOREIGN SERVER'"
|
" UNION SELECT 'FOREIGN SERVER'"
|
||||||
" UNION SELECT 'FOREIGN TABLE'"
|
|
||||||
" UNION SELECT 'FUNCTION'"
|
" UNION SELECT 'FUNCTION'"
|
||||||
" UNION SELECT 'LANGUAGE'"
|
" UNION SELECT 'LANGUAGE'"
|
||||||
" UNION SELECT 'LARGE OBJECT'"
|
" UNION SELECT 'LARGE OBJECT'"
|
||||||
@ -2246,7 +2245,7 @@ psql_completion(char *text, int start, int end)
|
|||||||
pg_strcasecmp(prev_wd, "FOREIGN") == 0)
|
pg_strcasecmp(prev_wd, "FOREIGN") == 0)
|
||||||
{
|
{
|
||||||
static const char *const list_privilege_foreign[] =
|
static const char *const list_privilege_foreign[] =
|
||||||
{"DATA WRAPPER", "SERVER", "TABLE", NULL};
|
{"DATA WRAPPER", "SERVER", NULL};
|
||||||
|
|
||||||
COMPLETE_WITH_LIST(list_privilege_foreign);
|
COMPLETE_WITH_LIST(list_privilege_foreign);
|
||||||
}
|
}
|
||||||
|
@ -53,6 +53,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* yyyymmddN */
|
/* yyyymmddN */
|
||||||
#define CATALOG_VERSION_NO 201104251
|
#define CATALOG_VERSION_NO 201105131
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user