usuarios usuario solo revoke privilegios postgres mostrar listar lectura eliminar crear como asignar all administracion postgresql

solo - PostgreSQL: cómo colocar rápidamente a un usuario con privilegios existentes



mostrar privilegios de usuario postgresql (4)

Estoy tratando de hacer usuarios de bases de datos restringidas para la aplicación en la que estoy trabajando, y quiero eliminar el usuario de la base de datos de Postgres que estoy usando para experimentar. ¿Hay alguna manera de dejar al usuario sin tener que revocar todos sus derechos manualmente o revocar todas las concesiones que tiene un usuario?


Enfrenté el mismo problema y ahora encontré una forma de resolverlo. Primero debe eliminar la base de datos del usuario que desea eliminar. Entonces el usuario puede ser eliminado fácilmente.

Creé un usuario llamado "msf" y luché un rato para eliminar al usuario y recrearlo. Seguí los pasos a continuación y tuve éxito.

1) Suelta la base de datos

dropdb msf

2) soltar al usuario

dropuser msf

Ahora conseguí que el usuario cayera con éxito.


La respuesta aceptada resultó en errores para mí cuando intenté REASIGNAR POR O PROPIEDAD. Lo siguiente funcionó para mí:

REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM username; REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM username; REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM username; DROP USER username;

El usuario puede tener privilegios en otros esquemas, en cuyo caso tendrá que ejecutar la línea REVOKE apropiada con "público" reemplazado por el esquema correcto. Para mostrar todos los esquemas y tipos de privilegios para un usuario, edité el comando / dp para hacer esta consulta:

SELECT n.nspname as "Schema", CASE c.relkind WHEN ''r'' THEN ''table'' WHEN ''v'' THEN ''view'' WHEN ''m'' THEN ''materialized view'' WHEN ''S'' THEN ''sequence'' WHEN ''f'' THEN ''foreign table'' END as "Type" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE pg_catalog.array_to_string(c.relacl, E''/n'') LIKE ''%username%'';

No estoy seguro de qué tipos de privilegios corresponden a la revocación de TABLAS, SECUENCIAS o FUNCIONES, pero creo que todos caen dentro de uno de los tres.


Qué tal si

DROP USER <username>

Esto es en realidad un alias para DROP ROLE .

Debe explicitarse cualquier privilegio asociado con ese usuario, también mover su propiedad a otros roles (o soltar el objeto).

Esto se logra mejor si

REASSIGN OWNED BY <olduser> TO <newuser>

y

DROP OWNED BY <olduser>

Este último eliminará todos los privilegios otorgados al usuario.

Vea los documentos de postgres para DROP ROLE y la descripción más detallada de esto.


Adición:

Aparentemente, tratar de soltar a un usuario mediante el uso de los comandos mencionados aquí solo funcionará si los está ejecutando mientras está conectado a la misma base de datos de la que se hicieron los GRANTS originales, como se explica aquí:

https://www.postgresql.org/message-id/83894A1821034948BA27FE4DAA47427928F7C29922%40apde03.APD.Satcom.Local


También tenga en cuenta que si ha otorgado explícitamente:

CONNECT ON DATABASE xxx TO GROUP ,

Deberá revocar esto por separado de DROP OWNED BY, usando:

REVOKE CONNECT ON DATABASE xxx FROM GROUP