@@ -1569,3 +1569,86 @@ DROP USER regressuser4;
1569
1569
DROP USER regressuser5;
1570
1570
DROP USER regressuser6;
1571
1571
ERROR: role "regressuser6" does not exist
1572
+ -- permissions with LOCK TABLE
1573
+ CREATE USER locktable_user;
1574
+ CREATE TABLE lock_table (a int);
1575
+ -- LOCK TABLE and SELECT permission
1576
+ GRANT SELECT ON lock_table TO locktable_user;
1577
+ SET SESSION AUTHORIZATION locktable_user;
1578
+ BEGIN;
1579
+ LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should fail
1580
+ ERROR: permission denied for relation lock_table
1581
+ ROLLBACK;
1582
+ BEGIN;
1583
+ LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should pass
1584
+ COMMIT;
1585
+ BEGIN;
1586
+ LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should fail
1587
+ ERROR: permission denied for relation lock_table
1588
+ ROLLBACK;
1589
+ \c
1590
+ REVOKE SELECT ON lock_table FROM locktable_user;
1591
+ -- LOCK TABLE and INSERT permission
1592
+ GRANT INSERT ON lock_table TO locktable_user;
1593
+ SET SESSION AUTHORIZATION locktable_user;
1594
+ BEGIN;
1595
+ LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass
1596
+ COMMIT;
1597
+ BEGIN;
1598
+ LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail
1599
+ ERROR: permission denied for relation lock_table
1600
+ ROLLBACK;
1601
+ BEGIN;
1602
+ LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should fail
1603
+ ERROR: permission denied for relation lock_table
1604
+ ROLLBACK;
1605
+ \c
1606
+ REVOKE INSERT ON lock_table FROM locktable_user;
1607
+ -- LOCK TABLE and UPDATE permission
1608
+ GRANT UPDATE ON lock_table TO locktable_user;
1609
+ SET SESSION AUTHORIZATION locktable_user;
1610
+ BEGIN;
1611
+ LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass
1612
+ COMMIT;
1613
+ BEGIN;
1614
+ LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail
1615
+ ERROR: permission denied for relation lock_table
1616
+ ROLLBACK;
1617
+ BEGIN;
1618
+ LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass
1619
+ COMMIT;
1620
+ \c
1621
+ REVOKE UPDATE ON lock_table FROM locktable_user;
1622
+ -- LOCK TABLE and DELETE permission
1623
+ GRANT DELETE ON lock_table TO locktable_user;
1624
+ SET SESSION AUTHORIZATION locktable_user;
1625
+ BEGIN;
1626
+ LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass
1627
+ COMMIT;
1628
+ BEGIN;
1629
+ LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail
1630
+ ERROR: permission denied for relation lock_table
1631
+ ROLLBACK;
1632
+ BEGIN;
1633
+ LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass
1634
+ COMMIT;
1635
+ \c
1636
+ REVOKE DELETE ON lock_table FROM locktable_user;
1637
+ -- LOCK TABLE and TRUNCATE permission
1638
+ GRANT TRUNCATE ON lock_table TO locktable_user;
1639
+ SET SESSION AUTHORIZATION locktable_user;
1640
+ BEGIN;
1641
+ LOCK TABLE lock_table IN ROW EXCLUSIVE MODE; -- should pass
1642
+ COMMIT;
1643
+ BEGIN;
1644
+ LOCK TABLE lock_table IN ACCESS SHARE MODE; -- should fail
1645
+ ERROR: permission denied for relation lock_table
1646
+ ROLLBACK;
1647
+ BEGIN;
1648
+ LOCK TABLE lock_table IN ACCESS EXCLUSIVE MODE; -- should pass
1649
+ COMMIT;
1650
+ \c
1651
+ REVOKE TRUNCATE ON lock_table FROM locktable_user;
1652
+ -- clean up
1653
+ DROP TABLE lock_table;
1654
+ DROP USER locktable_user;
0 commit comments