revoke postgres objects example ejemplos dba databases all postgresql grant

objects - postgresql grant execute on function



Postgresql: el error "debe ser propietario de la relaciĆ³n" al cambiar un objeto propietario (2)

¿Cuál es la opción / truco de grant debo dar al usuario actual (" usuarioA ") para permitirle cambiar el propietario de un objeto que pertenece a otro usuario (" usuarioC ")?

Más precisamente, la tabla de contactos es propiedad del usuario C y cuando realizo la siguiente consulta para cambiar el propietario al usuario B , conectado con el usuario A :

alter table contact owner to userB;

Me sale este error:

ERROR: must be owner of relation contact

Pero el usuario A tiene todos los derechos necesarios para hacerlo normalmente (la opción de concesión " crear en esquema " debería ser suficiente):

grant select,insert,update,delete on all tables in schema public to userA; grant select,usage,update on all sequences in schema public to userA; grant execute on all functions in schema public to userA; grant references, trigger on all tables in schema public to userA; grant create on schema public to userA; grant usage on schema public to userA;

Gracias

Salida de línea de comando:

root@server:~# psql -U userA myDatabase myDataBase=>/dt contact List of relations Schema | Name | Type | Owner -------+---------+----------+--------- public | contact | table | userC (1 row) myDataBase=> myDataBase=>alter table contact owner to userB; ERROR: must be owner of relation public.contact myDataBase=>


Del buen manual .

Debe ser propietario de la tabla para usar ALTER TABLE.

O ser un superusuario de bases de datos.

ERROR: debe ser propietario del contacto de relación

Los mensajes de error de PostgreSQL generalmente son correctos. Este es perfecto.


Gracias al comentario de Mike, volví a leer el documento y me di cuenta de que mi usuario actual (es decir, el usuario A que ya tiene el privilegio de crear ) no era un miembro directo / indirecto del nuevo rol propietario ...

Entonces la solución fue bastante simple: acabo de hacer esta concesión:

grant userB to userA;

Eso es todo amigos ;-)

Actualizar:

Otro requisito es que el objeto debe ser propiedad del usuario usuario A antes de modificarlo ...