mirror of https://github.com/citusdata/citus.git
Make sure to prevent unauthorized users to drop tables in Citus MX
parent
f9520be011
commit
7f0a57a153
|
@ -104,6 +104,8 @@ master_remove_distributed_table_metadata_from_workers(PG_FUNCTION_ARGS)
|
||||||
|
|
||||||
CheckCitusVersion(ERROR);
|
CheckCitusVersion(ERROR);
|
||||||
|
|
||||||
|
CheckTableSchemaNameForDrop(relationId, &schemaName, &tableName);
|
||||||
|
|
||||||
MasterRemoveDistributedTableMetadataFromWorkers(relationId, schemaName, tableName);
|
MasterRemoveDistributedTableMetadataFromWorkers(relationId, schemaName, tableName);
|
||||||
|
|
||||||
PG_RETURN_VOID();
|
PG_RETURN_VOID();
|
||||||
|
|
|
@ -287,8 +287,39 @@ SELECT count(*) FROM pg_tables WHERE tablename = 'should_commit';
|
||||||
1
|
1
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
-- Resume ordinary recovery
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
|
CREATE USER no_access_mx;
|
||||||
|
NOTICE: not propagating CREATE ROLE/USER commands to worker nodes
|
||||||
|
HINT: Connect to worker nodes directly to manually create all necessary users and roles.
|
||||||
|
SELECT run_command_on_workers($$CREATE USER no_access_mx;$$);
|
||||||
|
run_command_on_workers
|
||||||
|
-----------------------------------
|
||||||
|
(localhost,57637,t,"CREATE ROLE")
|
||||||
|
(localhost,57638,t,"CREATE ROLE")
|
||||||
|
(2 rows)
|
||||||
|
|
||||||
|
SET ROLE no_access_mx;
|
||||||
|
DROP TABLE distributed_mx_table;
|
||||||
|
ERROR: must be owner of table distributed_mx_table
|
||||||
|
SELECT master_remove_distributed_table_metadata_from_workers('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
ERROR: must be owner of table distributed_mx_table
|
||||||
|
SELECT master_drop_all_shards('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
ERROR: must be owner of table distributed_mx_table
|
||||||
|
SELECT master_remove_partition_metadata('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
ERROR: must be owner of table distributed_mx_table
|
||||||
|
\c - no_access_mx - :worker_1_port
|
||||||
|
DROP TABLE distributed_mx_table;
|
||||||
|
ERROR: must be owner of table distributed_mx_table
|
||||||
|
SELECT master_remove_distributed_table_metadata_from_workers('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
ERROR: must be owner of table distributed_mx_table
|
||||||
|
SELECT master_drop_all_shards('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
ERROR: operation is not allowed on this node
|
||||||
|
HINT: Connect to the coordinator and run it again.
|
||||||
|
SELECT master_remove_partition_metadata('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
ERROR: operation is not allowed on this node
|
||||||
|
HINT: Connect to the coordinator and run it again.
|
||||||
|
-- Resume ordinary recovery
|
||||||
|
\c - postgres - :master_port
|
||||||
ALTER SYSTEM RESET citus.recover_2pc_interval;
|
ALTER SYSTEM RESET citus.recover_2pc_interval;
|
||||||
SELECT pg_reload_conf();
|
SELECT pg_reload_conf();
|
||||||
pg_reload_conf
|
pg_reload_conf
|
||||||
|
|
|
@ -175,7 +175,24 @@ SELECT count(*) FROM pg_dist_transaction;
|
||||||
SELECT count(*) FROM pg_tables WHERE tablename = 'should_abort';
|
SELECT count(*) FROM pg_tables WHERE tablename = 'should_abort';
|
||||||
SELECT count(*) FROM pg_tables WHERE tablename = 'should_commit';
|
SELECT count(*) FROM pg_tables WHERE tablename = 'should_commit';
|
||||||
|
|
||||||
-- Resume ordinary recovery
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
|
|
||||||
|
CREATE USER no_access_mx;
|
||||||
|
SELECT run_command_on_workers($$CREATE USER no_access_mx;$$);
|
||||||
|
|
||||||
|
SET ROLE no_access_mx;
|
||||||
|
DROP TABLE distributed_mx_table;
|
||||||
|
SELECT master_remove_distributed_table_metadata_from_workers('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
SELECT master_drop_all_shards('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
SELECT master_remove_partition_metadata('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
|
||||||
|
\c - no_access_mx - :worker_1_port
|
||||||
|
DROP TABLE distributed_mx_table;
|
||||||
|
SELECT master_remove_distributed_table_metadata_from_workers('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
SELECT master_drop_all_shards('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
SELECT master_remove_partition_metadata('distributed_mx_table'::regclass, 'public', 'distributed_mx_table');
|
||||||
|
|
||||||
|
-- Resume ordinary recovery
|
||||||
|
\c - postgres - :master_port
|
||||||
ALTER SYSTEM RESET citus.recover_2pc_interval;
|
ALTER SYSTEM RESET citus.recover_2pc_interval;
|
||||||
SELECT pg_reload_conf();
|
SELECT pg_reload_conf();
|
||||||
|
|
Loading…
Reference in New Issue