mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Improve several permission-related error messages.
Mainly move some detail from errmsg to errdetail, remove explicit mention of superuser where appropriate, since that is implied in most permission checks, and make messages more uniform. Author: Nathan Bossart <nathandbossart@gmail.com> Discussion: https://www.postgresql.org/message-id/20230316234701.GA903298@nathanxps13
This commit is contained in:
@ -491,7 +491,8 @@ ALTER FOREIGN TABLE agg_text OWNER TO regress_file_fdw_user;
|
||||
ALTER FOREIGN TABLE agg_text OPTIONS (SET format 'text');
|
||||
SET ROLE regress_file_fdw_user;
|
||||
ALTER FOREIGN TABLE agg_text OPTIONS (SET format 'text');
|
||||
ERROR: only superuser or a role with privileges of the pg_read_server_files role may specify the filename option of a file_fdw foreign table
|
||||
ERROR: permission denied to set the "filename" option of a file_fdw foreign table
|
||||
DETAIL: Only roles with privileges of the "pg_read_server_files" role may set this option.
|
||||
SET ROLE regress_file_fdw_superuser;
|
||||
-- cleanup
|
||||
RESET ROLE;
|
||||
|
@ -279,13 +279,19 @@ file_fdw_validator(PG_FUNCTION_ARGS)
|
||||
!has_privs_of_role(GetUserId(), ROLE_PG_READ_SERVER_FILES))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
errmsg("only superuser or a role with privileges of the pg_read_server_files role may specify the filename option of a file_fdw foreign table")));
|
||||
errmsg("permission denied to set the \"%s\" option of a file_fdw foreign table",
|
||||
"filename"),
|
||||
errdetail("Only roles with privileges of the \"%s\" role may set this option.",
|
||||
"pg_read_server_files")));
|
||||
|
||||
if (strcmp(def->defname, "program") == 0 &&
|
||||
!has_privs_of_role(GetUserId(), ROLE_PG_EXECUTE_SERVER_PROGRAM))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
|
||||
errmsg("only superuser or a role with privileges of the pg_execute_server_program role may specify the program option of a file_fdw foreign table")));
|
||||
errmsg("permission denied to set the \"%s\" option of a file_fdw foreign table",
|
||||
"program"),
|
||||
errdetail("Only roles with privileges of the \"%s\" role may set this option.",
|
||||
"pg_execute_server_program")));
|
||||
|
||||
filename = defGetString(def);
|
||||
}
|
||||
|
@ -54,13 +54,16 @@ RESET ROLE;
|
||||
-- plain user *can't* can control replication
|
||||
SET ROLE regress_lr_normal;
|
||||
SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_decoding');
|
||||
ERROR: must be superuser or replication role to use replication slots
|
||||
ERROR: permission denied to use replication slots
|
||||
DETAIL: Only roles with the REPLICATION attribute may use replication slots.
|
||||
INSERT INTO lr_test VALUES('lr_superuser_init');
|
||||
ERROR: permission denied for table lr_test
|
||||
SELECT data FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1');
|
||||
ERROR: must be superuser or replication role to use replication slots
|
||||
ERROR: permission denied to use replication slots
|
||||
DETAIL: Only roles with the REPLICATION attribute may use replication slots.
|
||||
SELECT pg_drop_replication_slot('regression_slot');
|
||||
ERROR: must be superuser or replication role to use replication slots
|
||||
ERROR: permission denied to use replication slots
|
||||
DETAIL: Only roles with the REPLICATION attribute may use replication slots.
|
||||
RESET ROLE;
|
||||
-- replication users can drop superuser created slots
|
||||
SET ROLE regress_lr_superuser;
|
||||
@ -90,7 +93,8 @@ SELECT 'init' FROM pg_create_logical_replication_slot('regression_slot', 'test_d
|
||||
RESET ROLE;
|
||||
SET ROLE regress_lr_normal;
|
||||
SELECT pg_drop_replication_slot('regression_slot');
|
||||
ERROR: must be superuser or replication role to use replication slots
|
||||
ERROR: permission denied to use replication slots
|
||||
DETAIL: Only roles with the REPLICATION attribute may use replication slots.
|
||||
RESET ROLE;
|
||||
-- all users can see existing slots
|
||||
SET ROLE regress_lr_superuser;
|
||||
|
Reference in New Issue
Block a user