Hemos estado tratando de crear muchos roles y usuarios en una de las bases de datos. En un momento me encontré con este problema que me resulta difícil de reproducir.
Es reproducible dentro de la base de datos, pero cuando creo una nueva base de datos y pruebo lo mismo, no sucede :(
ALTER TABLE public.table_name OWNER TO role_name;
Por lo general, después de ejecutar esta consulta. table_name será owned del rol/usuario role_name .
Después de ejecutar la consulta anterior, si ejecutamos la siguiente consulta:
select grantee, table_catalog, privilege_type, table_schema, table_name from information_schema.table_privileges where table_name = 'table_name' order by grantee, table_schema, table_nameObtendremos los siguientes resultados:
role_name | database_name | INSERT | public | table_name role_name | database_name | DELETE | public | table_name role_name | database_name | SELECT | public | table_name role_name | database_name | UPDATE | public | table_name role_name | database_name | TRUNCATE | public | table_name role_name | database_name | REFERENCES | public | table_name role_name | database_name | TRIGGER | public | table_name Sin embargo, en una base de datos particularmente jodida (perdón por el idioma, pero Dios sabe por lo que he pasado y estoy seguro de que me disculpará esta vez: P) después de otorgar la propiedad, el nuevo rol se convierte en el propietario, pero no tiene SELECT, INSERT o cualquier privilegio para el caso.
Entonces, mi pregunta es:
¿Hay algún escenario en el que cuando asignamos la propiedad de una tabla a un rol, el rol puede ser el propietario y aún así no tener privilegios de selección, inserción, actualización o eliminación?
En caso afirmativo, ¿cuándo y por qué?
¿el rol puede ser el propietario y aún no tener el privilegio de seleccionar, insertar, actualizar, eliminar?
Sí. El manual:
El propietario de un objeto puede optar por revocar sus propios privilegios ordinarios, por ejemplo, para hacer que una tabla sea de solo lectura para ellos y para los demás. Pero siempre se trata a los propietarios como poseedores de todas las opciones de concesión, por lo que siempre pueden volver a conceder sus propios privilegios.
Y un superusuario puede hacer cualquier cosa que el propietario pueda hacer.
Detalle complicado: el propietario (o un superusuario) puede REVOKE privilegios de sí mismo (el propietario). Si la propiedad cambia de manos, el nuevo propietario hereda el conjunto de privilegios que tenía el propietario anterior , además de los privilegios que el nuevo propietario ya podría tener. Así la unión de los privilegios anteriores del rol y los privilegios del propietario. Esos son entonces los nuevos privilegios del propietario .
Si la propiedad vuelve a cambiar de manos, ¡se transfiere todo el conjunto de privilegios! El propietario anterior pierde todos los privilegios que ha tenido directamente.
Pero cualquier rol puede heredar privilegios adicionales mediante la pertenencia a otro rol o mediante privilegios PUBLIC .
Estrechamente relacionada: