mirror of
https://github.com/postgres/postgres.git
synced 2025-10-25 13:17:41 +03:00
Clean up some loose ends from the column privileges patch: add
has_column_privilege and has_any_column_privilege SQL functions; fix the information_schema views that are supposed to pay attention to column privileges; adjust pg_stats to show stats for any column you have select privilege on; and fix COPY to allow copying a subset of columns if the user has suitable per-column privileges for all the columns. To improve efficiency of some of the information_schema views, extend the has_xxx_privilege functions to allow inquiring about the OR of a set of privileges in just one call. This is just exposing capability that already existed in the underlying aclcheck routines. In passing, make the information_schema views report the owner's own privileges as being grantable, since Postgres assumes this even when the grant option bit is not set in the ACL. This is a longstanding oversight. Also, make the new has_xxx_privilege functions for foreign data objects follow the same coding conventions used by the older ones. Stephen Frost and Tom Lane
This commit is contained in:
@@ -184,8 +184,11 @@ INSERT INTO atest5 VALUES (1,2,3);
|
||||
SET SESSION AUTHORIZATION regressuser4;
|
||||
SELECT * FROM atest5; -- fail
|
||||
SELECT one FROM atest5; -- ok
|
||||
COPY atest5 (one) TO stdout; -- ok
|
||||
SELECT two FROM atest5; -- fail
|
||||
COPY atest5 (two) TO stdout; -- fail
|
||||
SELECT atest5 FROM atest5; -- fail
|
||||
COPY atest5 (one,two) TO stdout; -- fail
|
||||
SELECT 1 FROM atest5; -- ok
|
||||
SELECT 1 FROM atest5 a JOIN atest5 b USING (one); -- ok
|
||||
SELECT 1 FROM atest5 a JOIN atest5 b USING (two); -- fail
|
||||
@@ -213,6 +216,10 @@ SELECT one, two FROM atest5 NATURAL JOIN atest6; -- ok now
|
||||
|
||||
-- test column-level privileges for INSERT and UPDATE
|
||||
INSERT INTO atest5 (two) VALUES (3); -- ok
|
||||
COPY atest5 FROM stdin; -- fail
|
||||
COPY atest5 (two) FROM stdin; -- ok
|
||||
1
|
||||
\.
|
||||
INSERT INTO atest5 (three) VALUES (4); -- fail
|
||||
INSERT INTO atest5 VALUES (5,5,5); -- fail
|
||||
UPDATE atest5 SET three = 10; -- ok
|
||||
@@ -227,6 +234,7 @@ SET SESSION AUTHORIZATION regressuser4;
|
||||
SELECT one FROM atest5; -- fail
|
||||
UPDATE atest5 SET one = 1; -- fail
|
||||
SELECT atest6 FROM atest6; -- ok
|
||||
COPY atest6 TO stdout; -- ok
|
||||
|
||||
-- test column-level privileges when involved with DELETE
|
||||
SET SESSION AUTHORIZATION regressuser1;
|
||||
|
||||
Reference in New Issue
Block a user