|
|
|
@ -2278,9 +2278,9 @@ SELECT pg_input_is_valid('regress_priv_user1=rY', 'aclitem'); |
|
|
|
|
(1 row) |
|
|
|
|
|
|
|
|
|
SELECT * FROM pg_input_error_info('regress_priv_user1=rY', 'aclitem'); |
|
|
|
|
message | detail | hint | sql_error_code |
|
|
|
|
----------------------------------------------------------+--------+------+---------------- |
|
|
|
|
invalid mode character: must be one of "arwdDxtXUCTcsAm" | | | 22P02 |
|
|
|
|
message | detail | hint | sql_error_code |
|
|
|
|
---------------------------------------------------------+--------+------+---------------- |
|
|
|
|
invalid mode character: must be one of "arwdDxtXUCTcsA" | | | 22P02 |
|
|
|
|
(1 row) |
|
|
|
|
|
|
|
|
|
-- |
|
|
|
@ -2621,38 +2621,38 @@ set session role regress_priv_user4; |
|
|
|
|
grant select on dep_priv_test to regress_priv_user5; |
|
|
|
|
\dp dep_priv_test |
|
|
|
|
Access privileges |
|
|
|
|
Schema | Name | Type | Access privileges | Column privileges | Policies |
|
|
|
|
--------+---------------+-------+------------------------------------------------+-------------------+---------- |
|
|
|
|
public | dep_priv_test | table | regress_priv_user1=arwdDxtm/regress_priv_user1+| | |
|
|
|
|
| | | regress_priv_user2=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user3=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user4=r*/regress_priv_user2 +| | |
|
|
|
|
| | | regress_priv_user4=r*/regress_priv_user3 +| | |
|
|
|
|
| | | regress_priv_user5=r/regress_priv_user4 | | |
|
|
|
|
Schema | Name | Type | Access privileges | Column privileges | Policies |
|
|
|
|
--------+---------------+-------+-----------------------------------------------+-------------------+---------- |
|
|
|
|
public | dep_priv_test | table | regress_priv_user1=arwdDxt/regress_priv_user1+| | |
|
|
|
|
| | | regress_priv_user2=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user3=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user4=r*/regress_priv_user2 +| | |
|
|
|
|
| | | regress_priv_user4=r*/regress_priv_user3 +| | |
|
|
|
|
| | | regress_priv_user5=r/regress_priv_user4 | | |
|
|
|
|
(1 row) |
|
|
|
|
|
|
|
|
|
set session role regress_priv_user2; |
|
|
|
|
revoke select on dep_priv_test from regress_priv_user4 cascade; |
|
|
|
|
\dp dep_priv_test |
|
|
|
|
Access privileges |
|
|
|
|
Schema | Name | Type | Access privileges | Column privileges | Policies |
|
|
|
|
--------+---------------+-------+------------------------------------------------+-------------------+---------- |
|
|
|
|
public | dep_priv_test | table | regress_priv_user1=arwdDxtm/regress_priv_user1+| | |
|
|
|
|
| | | regress_priv_user2=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user3=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user4=r*/regress_priv_user3 +| | |
|
|
|
|
| | | regress_priv_user5=r/regress_priv_user4 | | |
|
|
|
|
Schema | Name | Type | Access privileges | Column privileges | Policies |
|
|
|
|
--------+---------------+-------+-----------------------------------------------+-------------------+---------- |
|
|
|
|
public | dep_priv_test | table | regress_priv_user1=arwdDxt/regress_priv_user1+| | |
|
|
|
|
| | | regress_priv_user2=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user3=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user4=r*/regress_priv_user3 +| | |
|
|
|
|
| | | regress_priv_user5=r/regress_priv_user4 | | |
|
|
|
|
(1 row) |
|
|
|
|
|
|
|
|
|
set session role regress_priv_user3; |
|
|
|
|
revoke select on dep_priv_test from regress_priv_user4 cascade; |
|
|
|
|
\dp dep_priv_test |
|
|
|
|
Access privileges |
|
|
|
|
Schema | Name | Type | Access privileges | Column privileges | Policies |
|
|
|
|
--------+---------------+-------+------------------------------------------------+-------------------+---------- |
|
|
|
|
public | dep_priv_test | table | regress_priv_user1=arwdDxtm/regress_priv_user1+| | |
|
|
|
|
| | | regress_priv_user2=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user3=r*/regress_priv_user1 | | |
|
|
|
|
Schema | Name | Type | Access privileges | Column privileges | Policies |
|
|
|
|
--------+---------------+-------+-----------------------------------------------+-------------------+---------- |
|
|
|
|
public | dep_priv_test | table | regress_priv_user1=arwdDxt/regress_priv_user1+| | |
|
|
|
|
| | | regress_priv_user2=r*/regress_priv_user1 +| | |
|
|
|
|
| | | regress_priv_user3=r*/regress_priv_user1 | | |
|
|
|
|
(1 row) |
|
|
|
|
|
|
|
|
|
set session role regress_priv_user1; |
|
|
|
@ -2782,20 +2782,6 @@ LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass |
|
|
|
|
COMMIT; |
|
|
|
|
\c |
|
|
|
|
REVOKE TRUNCATE ON lock_table FROM regress_locktable_user; |
|
|
|
|
-- LOCK TABLE and MAINTAIN permission |
|
|
|
|
GRANT MAINTAIN ON lock_table TO regress_locktable_user; |
|
|
|
|
SET SESSION AUTHORIZATION regress_locktable_user; |
|
|
|
|
BEGIN; |
|
|
|
|
LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should pass |
|
|
|
|
ROLLBACK; |
|
|
|
|
BEGIN; |
|
|
|
|
LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass |
|
|
|
|
COMMIT; |
|
|
|
|
BEGIN; |
|
|
|
|
LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass |
|
|
|
|
COMMIT; |
|
|
|
|
\c |
|
|
|
|
REVOKE MAINTAIN ON lock_table FROM regress_locktable_user; |
|
|
|
|
-- clean up |
|
|
|
|
DROP TABLE lock_table; |
|
|
|
|
DROP USER regress_locktable_user; |
|
|
|
@ -2909,59 +2895,3 @@ DROP SCHEMA regress_roleoption; |
|
|
|
|
DROP ROLE regress_roleoption_protagonist; |
|
|
|
|
DROP ROLE regress_roleoption_donor; |
|
|
|
|
DROP ROLE regress_roleoption_recipient; |
|
|
|
|
-- MAINTAIN |
|
|
|
|
CREATE ROLE regress_no_maintain; |
|
|
|
|
CREATE ROLE regress_maintain; |
|
|
|
|
CREATE ROLE regress_maintain_all IN ROLE pg_maintain; |
|
|
|
|
CREATE TABLE maintain_test (a INT); |
|
|
|
|
CREATE INDEX ON maintain_test (a); |
|
|
|
|
GRANT MAINTAIN ON maintain_test TO regress_maintain; |
|
|
|
|
CREATE MATERIALIZED VIEW refresh_test AS SELECT 1; |
|
|
|
|
GRANT MAINTAIN ON refresh_test TO regress_maintain; |
|
|
|
|
CREATE SCHEMA reindex_test; |
|
|
|
|
-- negative tests; should fail |
|
|
|
|
SET ROLE regress_no_maintain; |
|
|
|
|
VACUUM maintain_test; |
|
|
|
|
WARNING: permission denied to vacuum "maintain_test", skipping it |
|
|
|
|
ANALYZE maintain_test; |
|
|
|
|
WARNING: permission denied to analyze "maintain_test", skipping it |
|
|
|
|
VACUUM (ANALYZE) maintain_test; |
|
|
|
|
WARNING: permission denied to vacuum "maintain_test", skipping it |
|
|
|
|
CLUSTER maintain_test USING maintain_test_a_idx; |
|
|
|
|
ERROR: permission denied for table maintain_test |
|
|
|
|
REFRESH MATERIALIZED VIEW refresh_test; |
|
|
|
|
ERROR: permission denied for table refresh_test |
|
|
|
|
REINDEX TABLE maintain_test; |
|
|
|
|
ERROR: permission denied for table maintain_test |
|
|
|
|
REINDEX INDEX maintain_test_a_idx; |
|
|
|
|
ERROR: permission denied for index maintain_test_a_idx |
|
|
|
|
REINDEX SCHEMA reindex_test; |
|
|
|
|
ERROR: must be owner of schema reindex_test |
|
|
|
|
RESET ROLE; |
|
|
|
|
SET ROLE regress_maintain; |
|
|
|
|
VACUUM maintain_test; |
|
|
|
|
ANALYZE maintain_test; |
|
|
|
|
VACUUM (ANALYZE) maintain_test; |
|
|
|
|
CLUSTER maintain_test USING maintain_test_a_idx; |
|
|
|
|
REFRESH MATERIALIZED VIEW refresh_test; |
|
|
|
|
REINDEX TABLE maintain_test; |
|
|
|
|
REINDEX INDEX maintain_test_a_idx; |
|
|
|
|
REINDEX SCHEMA reindex_test; |
|
|
|
|
ERROR: must be owner of schema reindex_test |
|
|
|
|
RESET ROLE; |
|
|
|
|
SET ROLE regress_maintain_all; |
|
|
|
|
VACUUM maintain_test; |
|
|
|
|
ANALYZE maintain_test; |
|
|
|
|
VACUUM (ANALYZE) maintain_test; |
|
|
|
|
CLUSTER maintain_test USING maintain_test_a_idx; |
|
|
|
|
REFRESH MATERIALIZED VIEW refresh_test; |
|
|
|
|
REINDEX TABLE maintain_test; |
|
|
|
|
REINDEX INDEX maintain_test_a_idx; |
|
|
|
|
REINDEX SCHEMA reindex_test; |
|
|
|
|
RESET ROLE; |
|
|
|
|
DROP TABLE maintain_test; |
|
|
|
|
DROP MATERIALIZED VIEW refresh_test; |
|
|
|
|
DROP SCHEMA reindex_test; |
|
|
|
|
DROP ROLE regress_no_maintain; |
|
|
|
|
DROP ROLE regress_maintain; |
|
|
|
|
DROP ROLE regress_maintain_all; |
|
|
|
|