Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitbe90032

Browse files
committed
Remove partial and undocumented GRANT .. FOREIGN TABLE support.
Instead, foreign tables are treated just like views: permissions canbe granted using GRANT privilege ON [TABLE] foreign_table_name TO role,and revoked similarly. GRANT/REVOKE .. FOREIGN TABLE is no longersupported, just as we don't support GRANT/REVOKE .. VIEW. The set ofaccepted permissions for foreign tables is now identical to the set forregular tables, and views.Per report from Thom Brown, and subsequent discussion.
1 parentaf0f200 commitbe90032

File tree

6 files changed

+2
-69
lines changed

6 files changed

+2
-69
lines changed

‎doc/src/sgml/ref/grant.sgml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ GRANT <replaceable class="PARAMETER">role_name</replaceable> [, ...] TO <replace
8080

8181
<para>
8282
The <command>GRANT</command> command has two basic variants: one
83-
that grants privileges on a database object (table, column, view,sequence,
84-
database, foreign-data wrapper, foreign server, function,
83+
that grants privileges on a database object (table, column, view,foreign
84+
table, sequence,database, foreign-data wrapper, foreign server, function,
8585
procedural language, schema, or tablespace), and one that grants
8686
membership in a role. These variants are similar in many ways, but
8787
they are different enough to be described separately.

‎src/backend/catalog/aclchk.c

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,6 @@ restrict_and_check_grant(bool is_grant, AclMode avail_goptions, bool all_privs,
274274
caseACL_KIND_FOREIGN_SERVER:
275275
whole_mask=ACL_ALL_RIGHTS_FOREIGN_SERVER;
276276
break;
277-
caseACL_KIND_FOREIGN_TABLE:
278-
whole_mask=ACL_ALL_RIGHTS_FOREIGN_TABLE;
279-
break;
280277
default:
281278
elog(ERROR,"unrecognized object kind: %d",objkind);
282279
/* not reached, but keep compiler quiet */
@@ -480,10 +477,6 @@ ExecuteGrantStmt(GrantStmt *stmt)
480477
all_privileges=ACL_ALL_RIGHTS_FOREIGN_SERVER;
481478
errormsg=gettext_noop("invalid privilege type %s for foreign server");
482479
break;
483-
caseACL_OBJECT_FOREIGN_TABLE:
484-
all_privileges=ACL_ALL_RIGHTS_FOREIGN_TABLE;
485-
errormsg=gettext_noop("invalid privilege type %s for foreign table");
486-
break;
487480
default:
488481
elog(ERROR,"unrecognized GrantStmt.objtype: %d",
489482
(int)stmt->objtype);
@@ -554,7 +547,6 @@ ExecGrantStmt_oids(InternalGrant *istmt)
554547
{
555548
caseACL_OBJECT_RELATION:
556549
caseACL_OBJECT_SEQUENCE:
557-
caseACL_OBJECT_FOREIGN_TABLE:
558550
ExecGrant_Relation(istmt);
559551
break;
560552
caseACL_OBJECT_DATABASE:
@@ -604,7 +596,6 @@ objectNamesToOids(GrantObjectType objtype, List *objnames)
604596
{
605597
caseACL_OBJECT_RELATION:
606598
caseACL_OBJECT_SEQUENCE:
607-
caseACL_OBJECT_FOREIGN_TABLE:
608599
foreach(cell,objnames)
609600
{
610601
RangeVar*relvar= (RangeVar*)lfirst(cell);
@@ -1702,21 +1693,11 @@ ExecGrant_Relation(InternalGrant *istmt)
17021693
errmsg("\"%s\" is not a sequence",
17031694
NameStr(pg_class_tuple->relname))));
17041695

1705-
/* Used GRANT FOREIGN TABLE on a non-foreign-table? */
1706-
if (istmt->objtype==ACL_OBJECT_FOREIGN_TABLE&&
1707-
pg_class_tuple->relkind!=RELKIND_FOREIGN_TABLE)
1708-
ereport(ERROR,
1709-
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
1710-
errmsg("\"%s\" is not a foreign table",
1711-
NameStr(pg_class_tuple->relname))));
1712-
17131696
/* Adjust the default permissions based on object type */
17141697
if (istmt->all_privs&&istmt->privileges==ACL_NO_RIGHTS)
17151698
{
17161699
if (pg_class_tuple->relkind==RELKIND_SEQUENCE)
17171700
this_privileges=ACL_ALL_RIGHTS_SEQUENCE;
1718-
elseif (pg_class_tuple->relkind==RELKIND_FOREIGN_TABLE)
1719-
this_privileges=ACL_ALL_RIGHTS_FOREIGN_TABLE;
17201701
else
17211702
this_privileges=ACL_ALL_RIGHTS_RELATION;
17221703
}
@@ -1752,16 +1733,6 @@ ExecGrant_Relation(InternalGrant *istmt)
17521733
this_privileges &= (AclMode)ACL_ALL_RIGHTS_SEQUENCE;
17531734
}
17541735
}
1755-
elseif (pg_class_tuple->relkind==RELKIND_FOREIGN_TABLE)
1756-
{
1757-
if (this_privileges& ~((AclMode)ACL_ALL_RIGHTS_FOREIGN_TABLE))
1758-
{
1759-
ereport(ERROR,
1760-
(errcode(ERRCODE_INVALID_GRANT_OPERATION),
1761-
errmsg("foreign table \"%s\" only supports SELECT privileges",
1762-
NameStr(pg_class_tuple->relname))));
1763-
}
1764-
}
17651736
else
17661737
{
17671738
if (this_privileges& ~((AclMode)ACL_ALL_RIGHTS_RELATION))
@@ -1819,9 +1790,6 @@ ExecGrant_Relation(InternalGrant *istmt)
18191790
caseRELKIND_SEQUENCE:
18201791
old_acl=acldefault(ACL_OBJECT_SEQUENCE,ownerId);
18211792
break;
1822-
caseRELKIND_FOREIGN_TABLE:
1823-
old_acl=acldefault(ACL_OBJECT_FOREIGN_TABLE,ownerId);
1824-
break;
18251793
default:
18261794
old_acl=acldefault(ACL_OBJECT_RELATION,ownerId);
18271795
break;
@@ -1866,9 +1834,6 @@ ExecGrant_Relation(InternalGrant *istmt)
18661834
caseRELKIND_SEQUENCE:
18671835
aclkind=ACL_KIND_SEQUENCE;
18681836
break;
1869-
caseRELKIND_FOREIGN_TABLE:
1870-
aclkind=ACL_KIND_FOREIGN_TABLE;
1871-
break;
18721837
default:
18731838
aclkind=ACL_KIND_CLASS;
18741839
break;
@@ -1963,16 +1928,6 @@ ExecGrant_Relation(InternalGrant *istmt)
19631928

19641929
this_privileges &= (AclMode)ACL_SELECT;
19651930
}
1966-
elseif (pg_class_tuple->relkind==RELKIND_FOREIGN_TABLE&&
1967-
this_privileges& ~((AclMode)ACL_SELECT))
1968-
{
1969-
/* Foreign tables have the same restriction as sequences. */
1970-
ereport(WARNING,
1971-
(errcode(ERRCODE_INVALID_GRANT_OPERATION),
1972-
errmsg("foreign table \"%s\" only supports SELECT column privileges",
1973-
NameStr(pg_class_tuple->relname))));
1974-
this_privileges &= (AclMode)ACL_SELECT;
1975-
}
19761931

19771932
expand_col_privileges(col_privs->cols,relOid,
19781933
this_privileges,
@@ -3147,8 +3102,6 @@ static const char *const no_priv_msg[MAX_ACL_KIND] =
31473102
gettext_noop("permission denied for foreign-data wrapper %s"),
31483103
/* ACL_KIND_FOREIGN_SERVER */
31493104
gettext_noop("permission denied for foreign server %s"),
3150-
/* ACL_KIND_FOREIGN_TABLE */
3151-
gettext_noop("permission denied for foreign table %s"),
31523105
/* ACL_KIND_EXTENSION */
31533106
gettext_noop("permission denied for extension %s"),
31543107
};
@@ -3193,8 +3146,6 @@ static const char *const not_owner_msg[MAX_ACL_KIND] =
31933146
gettext_noop("must be owner of foreign-data wrapper %s"),
31943147
/* ACL_KIND_FOREIGN_SERVER */
31953148
gettext_noop("must be owner of foreign server %s"),
3196-
/* ACL_KIND_FOREIGN_TABLE */
3197-
gettext_noop("must be owner of foreign table %s"),
31983149
/* ACL_KIND_EXTENSION */
31993150
gettext_noop("must be owner of extension %s"),
32003151
};
@@ -3491,9 +3442,6 @@ pg_class_aclmask(Oid table_oid, Oid roleid,
34913442
caseRELKIND_SEQUENCE:
34923443
acl=acldefault(ACL_OBJECT_SEQUENCE,ownerId);
34933444
break;
3494-
caseRELKIND_FOREIGN_TABLE:
3495-
acl=acldefault(ACL_OBJECT_FOREIGN_TABLE,ownerId);
3496-
break;
34973445
default:
34983446
acl=acldefault(ACL_OBJECT_RELATION,ownerId);
34993447
break;

‎src/backend/parser/gram.y

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5408,14 +5408,6 @@ privilege_target:
54085408
n->objs =$3;
54095409
$$ = n;
54105410
}
5411-
|FOREIGNTABLEqualified_name_list
5412-
{
5413-
PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget));
5414-
n->targtype = ACL_TARGET_OBJECT;
5415-
n->objtype = ACL_OBJECT_FOREIGN_TABLE;
5416-
n->objs =$3;
5417-
$$ = n;
5418-
}
54195411
|FUNCTIONfunction_with_argtypes_list
54205412
{
54215413
PrivTarget *n = (PrivTarget *) palloc(sizeof(PrivTarget));

‎src/backend/utils/adt/acl.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -782,10 +782,6 @@ acldefault(GrantObjectType objtype, Oid ownerId)
782782
world_default=ACL_NO_RIGHTS;
783783
owner_default=ACL_ALL_RIGHTS_FOREIGN_SERVER;
784784
break;
785-
caseACL_OBJECT_FOREIGN_TABLE:
786-
world_default=ACL_NO_RIGHTS;
787-
owner_default=ACL_ALL_RIGHTS_FOREIGN_TABLE;
788-
break;
789785
default:
790786
elog(ERROR,"unrecognized objtype: %d", (int)objtype);
791787
world_default=ACL_NO_RIGHTS;/* keep compiler quiet */

‎src/include/nodes/parsenodes.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1282,7 +1282,6 @@ typedef enum GrantObjectType
12821282
ACL_OBJECT_DATABASE,/* database */
12831283
ACL_OBJECT_FDW,/* foreign-data wrapper */
12841284
ACL_OBJECT_FOREIGN_SERVER,/* foreign server */
1285-
ACL_OBJECT_FOREIGN_TABLE,/* foreign table */
12861285
ACL_OBJECT_FUNCTION,/* function */
12871286
ACL_OBJECT_LANGUAGE,/* procedural language */
12881287
ACL_OBJECT_LARGEOBJECT,/* largeobject */

‎src/include/utils/acl.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,6 @@ typedef ArrayType Acl;
150150
#defineACL_ALL_RIGHTS_DATABASE(ACL_CREATE|ACL_CREATE_TEMP|ACL_CONNECT)
151151
#defineACL_ALL_RIGHTS_FDW(ACL_USAGE)
152152
#defineACL_ALL_RIGHTS_FOREIGN_SERVER (ACL_USAGE)
153-
#defineACL_ALL_RIGHTS_FOREIGN_TABLE (ACL_SELECT)
154153
#defineACL_ALL_RIGHTS_FUNCTION(ACL_EXECUTE)
155154
#defineACL_ALL_RIGHTS_LANGUAGE(ACL_USAGE)
156155
#defineACL_ALL_RIGHTS_LARGEOBJECT(ACL_SELECT|ACL_UPDATE)
@@ -195,7 +194,6 @@ typedef enum AclObjectKind
195194
ACL_KIND_TSCONFIGURATION,/* pg_ts_config */
196195
ACL_KIND_FDW,/* pg_foreign_data_wrapper */
197196
ACL_KIND_FOREIGN_SERVER,/* pg_foreign_server */
198-
ACL_KIND_FOREIGN_TABLE,/* pg_foreign_table */
199197
ACL_KIND_EXTENSION,/* pg_extension */
200198
MAX_ACL_KIND/* MUST BE LAST */
201199
}AclObjectKind;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp