mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Use SELinux "db_table: { truncate }" to check if permission is granted to
TRUNCATE. Update example SELinux policy to grant needed permission for
TRUNCATE. Add new regression test to demonstrate a positive and negative
cases. Test will only be run if the loaded SELinux policy has the
"db_table: { truncate }" permission. Makes use of recent commit which added
object TRUNCATE hook. Patch by Yuli Khodorkovskiy with minor
editorialization by me. Not back-patched because the object TRUNCATE hook
was not.
Author: Yuli Khodorkovskiy
Reviewed-by: Joe Conway
Discussion: https://postgr.es/m/CAFL5wJcomybj1Xdw7qWmPJRpGuFukKgNrDb6uVBaCMgYS9dkaA%40mail.gmail.com
		
	
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
--
 | 
						|
-- Regression Test for TRUNCATE
 | 
						|
--
 | 
						|
--
 | 
						|
-- Setup
 | 
						|
--
 | 
						|
CREATE TABLE julio_claudians (name text, birth_date date);
 | 
						|
SECURITY LABEL ON TABLE julio_claudians IS 'system_u:object_r:sepgsql_regtest_foo_table_t:s0';
 | 
						|
INSERT INTO julio_claudians VALUES ('Augustus', 'September 23, 63 BC'), ('Tiberius', 'November 16, 42 BC'), ('Caligula', 'August 31, 0012'), ('Claudius', 'August 1, 0010'), ('Nero', 'December 15, 0037');
 | 
						|
CREATE TABLE flavians (name text, birth_date date);
 | 
						|
SECURITY LABEL ON TABLE flavians IS 'system_u:object_r:sepgsql_table_t:s0';
 | 
						|
INSERT INTO flavians VALUES ('Vespasian', 'November 17, 0009'), ('Titus', 'December 30, 0039'), ('Domitian', 'October 24, 0051');
 | 
						|
SELECT * from julio_claudians;
 | 
						|
   name   |  birth_date   
 | 
						|
----------+---------------
 | 
						|
 Augustus | 09-23-0063 BC
 | 
						|
 Tiberius | 11-16-0042 BC
 | 
						|
 Caligula | 08-31-0012
 | 
						|
 Claudius | 08-01-0010
 | 
						|
 Nero     | 12-15-0037
 | 
						|
(5 rows)
 | 
						|
 | 
						|
SELECT * from flavians;
 | 
						|
   name    | birth_date 
 | 
						|
-----------+------------
 | 
						|
 Vespasian | 11-17-0009
 | 
						|
 Titus     | 12-30-0039
 | 
						|
 Domitian  | 10-24-0051
 | 
						|
(3 rows)
 | 
						|
 | 
						|
TRUNCATE TABLE julio_claudians;			-- ok
 | 
						|
TRUNCATE TABLE flavians;			-- failed
 | 
						|
ERROR:  SELinux: security policy violation
 | 
						|
SELECT * from julio_claudians;
 | 
						|
 name | birth_date 
 | 
						|
------+------------
 | 
						|
(0 rows)
 | 
						|
 | 
						|
SELECT * from flavians;
 | 
						|
   name    | birth_date 
 | 
						|
-----------+------------
 | 
						|
 Vespasian | 11-17-0009
 | 
						|
 Titus     | 12-30-0039
 | 
						|
 Domitian  | 10-24-0051
 | 
						|
(3 rows)
 | 
						|
 |