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?PostgreSQL - cómo colocar rápidamente un usuario con privilegios existentes
Respuesta
¿Qué tal
DROP USER <username>
Esto es en realidad un alias para DROP ROLE
.
Tiene que explicity colocar cualquier privilegio asociado con ese usuario, también para mover su propiedad a otros roles (o soltar el objeto).
Esto se logra mejor mediante
REASSIGN OWNED BY <olduser> TO <newuser>
y
DROP OWNED BY <olduser>
Este último se eliminarán todos los privilegios concedidos al usuario.
Consulte los documentos de postgres para DROP ROLE y the more detailed description de esto.
Adición:
Al parecer, tratando de dejar caer un usuario mediante el uso de los comandos mencionados aquí sólo funcionará si se está ejecutando mientras están conectados a la misma base de datos que las subvenciones originales fueron hechos de, como se discute aquí:
también tenga en cuenta, si ha otorgado explícitamente:
CONNECT ON DATABASE xxx TO GROUP
,
tendrá que revocar esta separado de GOTA PROPIEDAD, usando:
REVOKE CONNECT ON DATABASE xxx FROM GROUP
que enfrentan el mismo problema y ahora encontró una manera de solucionarla. 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 tuve problemas para eliminar al usuario y recrearlo. Seguí los pasos a continuación y tuve éxito.
1) La caída de la base de datos de
dropdb msf
2) dejar que el usuario
dropuser msf
Ahora tengo el usuario eliminado satisfactoriamente.
Este es un enfoque increíblemente radical, ya que me habría requerido recrear el esquema de base de datos para cada iteración de mi trabajo. (Lo que implicaba tener permisos precisos en un esquema de base de datos existente; es decir, es mejor si el esquema de la base de datos permanece intacto). – millimoose
La respuesta aceptada resultó en errores para mí al intentar REASIGNAR POR O DEJAR DE PROPIEDAD.Los siguientes trabajado 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 de otros esquemas, en cuyo caso se tendrá que ejecutar la línea REVOKE apropiado 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 revocar en las mesas, las secuencias o funciones, pero creo que todos caen bajo uno de los tres.
- 1. postgresql nextval generar valores existentes
- 2. ¿Cómo crear un usuario con privilegios de solo lectura para todas las bases de datos en Postgresql?
- 3. Cómo creo un usuario de postgresql con estructura
- 4. cómo otorgar privilegios de usuario en un esquema específico?
- 5. Autenticación de CodeIgniter + privilegios de usuario
- 6. Cómo colocar un control de usuario XAML en una cuadrícula
- 7. ¿Cómo ver privilegios de usuario usando windows cmd?
- 8. ¿Cómo colocar un UIView?
- 9. ¿Cómo agregar un usuario a PostgreSQL en Windows?
- 10. ¿Cómo ejecutar un ejecutable personalizado con privilegios elevados?
- 11. Cómo asociar un nuevo modelo con modelos existentes usando has_and_belongs_to_many
- 12. ¿Puedo ejecutar Node.JS con privilegios bajos?
- 13. Concesión de privilegios de DBA al usuario en Oracle
- 14. SQL Server 2008: ¿cómo otorgo privilegios a un nombre de usuario?
- 15. Cómo llenar la memoria rápidamente con un valor `int32_t`?
- 16. ¿Cómo puedo llenar rápidamente una matriz con un valor específico?
- 17. Depuración PostgreSQL Funciones definidas por el usuario
- 18. ¿Cómo borrar rápidamente un objeto de JavaScript?
- 19. ¿Cómo puedo comprobar si un usuario tiene privilegios de administrador local en Win32
- 20. ¿Cómo se muestran todos los privilegios de un usuario en Oracle?
- 21. Instalar Clang como usuario (sin privilegios de root)?
- 22. consulta PostgreSQL para mostrar los grupos de un usuario
- 23. WPF: ¿cómo puedo colocar un control de usuario sobre un AdornedElementPlaceholder?
- 24. Ejecutar un ejecutable con privilegios de administrador en Mac
- 25. ¿Cómo obtener privilegios de root mediante programación?
- 26. Cómo colocar o cementar con seguridad un CGFloat a int?
- 27. ¿Cómo puedo eliminar privilegios en Perl?
- 28. Falló la función drop de PostgreSQL debido a los privilegios predeterminados
- 29. PostgreSQL 8.4 otorgar privilegios DML en todas las tablas a una función
- 30. Postgresql - límite de conexión por usuario
Haciendo: 'CREATE TABLE foo (bar SERIAL); ALTER TABLE foo DUEÑO PARA postgres; CREAR USUARIO usuario de prueba; OTORGAR TODO EN foo TO testuser; DROP USER testuser' dio los mensajes de error: 'ERROR: role" testuser "no puede descartarse porque algunos objetos dependen de él DETALLE: acceso a la tabla foo'. Sin embargo, 'DROP OWNED BY testuser' hizo el truco, aparentemente Postgres considera que las subvenciones son objetos que se pueden soltar. – millimoose
Aclare, @Tim Kane y milimoose: Realmente no quiero que se eliminen las tablas originales si OTORGO SELECT EN FOO AL TESTUSER y luego SACA DE PROPIEDAD DE TESTUSER. Creo que está diciendo que DROP OWNED BY solo está retirando las subvenciones, pero no abandonará el objeto para el que se realizó la concesión. ¿Correcto? –
Andrew, es mejor leer la documentación para aclararla. DROP OWNED BY * will * drop tables propiedad de ese usuario. REASIGN OWNED BY reasignará esas tablas a un usuario diferente. Elige uno. –