Instalé la base de datos de PostgreSQL 9 (migración desde Oracle10g) y estoy realmente confundido por la administración del usuario/rol. Cuando creo un nuevo usuario usando el comando SQL como CREATE USER
o CREATE ROLE
, o mediante la herramienta Navicat, ¡el usuario creado puede ver todas las bases de datos! Él realmente puede conectarlos! Aunque no puede seleccionar ningún dato de la tabla, puede ver objetos de tabla y secuencias, etc. Estaba intentando revocar privilegios de conexión, pero no tiene efecto. Se esperaba que el nuevo usuario no tenga privilegios y no pueda ver nada. Realmente no sé por qué él puede.¿Por qué el nuevo usuario en PostgreSQL se puede conectar a todas las bases de datos?
Respuesta
Debe usar GRANT y/o REVOKE para definir los privilegios para el usuario o rol. También puede usar las siguientes funciones link para ver si un usuario tiene un privilegio específico en una tabla, base de datos, etc. ...
Sí, lo hice. U utilizó el comando SQL del manual de PostgreSQL - REVOKE CONNECT ON DATABASE dbname FROM username; y no tiene ningún efecto -> ver el hilo de comentarios de Aaron Sheffey. Pero gracias. – veselej
Probablemente también necesite modificar el archivo pg_hba.conf
. De manera predeterminada, una instalación local no realiza verificaciones de autorización.
De http://www.postgresql.org/docs/9.2/static/sql-grant.html#SQL-GRANT-DESCRIPTION-OBJECTS (el énfasis es mío):
privilegios PostgreSQL subvenciones por defecto en algunos tipos de objetos a
PUBLIC
. No se otorgan privilegios aPUBLIC
de forma predeterminada en tablas, columnas, esquemas o espacios de tabla. Para otros tipos, los privilegios predeterminados otorgados aPUBLIC
son los siguientes:CONNECT
yCREATE TEMP TABLE
para las bases de datos;EXECUTE
privilegio para funciones; y privilegioUSAGE
para idiomas. El propietario del objeto puede, por supuesto,REVOKE
privilegios tanto por defecto como otorgados expresamente. (Para mayor seguridad, emita elREVOKE
en la misma transacción que crea el objeto, y luego no hay una ventana en la que otro usuario pueda usar el objeto). Además, estas configuraciones iniciales de privilegios predeterminados se pueden cambiar utilizando el comando ALTER DEFAULT PRIVILEGES.
Con el fin de eliminar todos los privilegios (incluyendo CONNECT
) para todos los usuarios especificados en una base de datos, utilice:
REVOKE ALL PRIVILEGES ON DATABASE <database> FROM public;
Ver también:
Gracias, excelente, excepto que, "para la máxima seguridad, emita el REVOKE en la misma transacción que crea el objeto; entonces no hay ventana en la cual otro usuario pueda usar el objeto "- esto sonó como un buen consejo, pero no funciona para las bases de datos porque (indicando el mensaje de error)" CREATE DATABASE no puede ejecutarse dentro de un bloque de transacción ". Entonces, ¿no hay forma de cerrar la ventana para que alguien use una nueva base de datos? – njlarsson
- 1. ¿Por qué todas las bases de datos tienen un esquema público en PostgreSQL?
- 2. Un usuario por base de datos contra usuario único para todas las bases de datos
- 3. JDBC - Conectar varias bases de datos
- 4. En mysql, las bases de datos show; el comando no enumera todas mis bases de datos
- 5. No se puede conectar a PostgreSQL con PHP pg_connect()
- 6. MongoDB soltar todas las bases de datos
- 7. ¿Cómo crear un usuario con privilegios de solo lectura para todas las bases de datos en Postgresql?
- 8. macports de Postgresql no se puede conectar al problema
- 9. No se puede conectar a la base de datos .mdf
- 10. Se puede conectar a EC2 como usuario de ubuntu pero no como el usuario que creé
- 11. ¿Cómo borrar todas las bases de datos en Postgres?
- 12. TIPO definido por el usuario en bases de datos
- 13. No se puede conectar PostgreSQL a la base de datos remota usando pgAdmin
- 14. Patrón para conectar a diferentes bases de datos usando JDBC
- 15. Postgresql la creación de bases de datos
- 16. ¿Dónde están todas las bases de datos nativas revisadas?
- 17. ¿Están las bases de datos orientadas a documentos destinadas a reemplazar las bases de datos relacionales?
- 18. Mysql - encuentre una tabla en todas las bases de datos
- 19. Cómo mostrar todas las tablas de múltiples bases de datos
- 20. ¿Cómo se puede acceder a los contenidos de las bases de datos de Android Emulator?
- 21. TypeError: Error al llamar a las bases MetaClass una clase de nuevo estilo no puede tener sólo las bases clásicas
- 22. PHP Mysql se une a las bases de datos
- 23. Soltar todas las bases de datos del servidor
- 24. en postgresql, ¿son las particiones o las bases de datos múltiples más eficientes?
- 25. MongoDB: ¿Obtener la lista de todas las bases de datos?
- 26. No se puede conectar a postgres desde el host remoto
- 27. Cómo exportar todas las bases de datos con phpmyadmin
- 28. Entender las claves en bases de datos
- 29. No se puede adjuntar bases de datos o crear uno nuevo - SQL Server 2008
- 30. No se puede conectar a la memcache
¿Cómo intentas revocar los privilegios CONNECT? –
Si está usando pgAdmin, puede consultar la función y los derechos de inicio de sesión del usuario. En su servidor, expanda Funciones de inicio de sesión, haga clic con el botón derecho en la Función de inicio de sesión en cuestión y verifique los privilegios de Roles y Membresías de roles. Luego, combine esos privilegios y membresías con los DB y los objetos DB en cuestión. Si un DB u objeto tiene una función otorgada, y el inicio de sesión de su usuario tiene esa función, eso explica el acceso. Si el usuario tiene casillas de verificación presionadas en la pestaña "Role privileges", eso explica otros derechos. – atrain
Así que inicié pgAdmin y miré en la pestaña de funciones en mis bases de datos (haga clic con el botón secundario en la base de datos, y luego en lo de permisos). Hubo un rol "público" junto con todas mis bases de datos. Entonces elimino eso. ¡Y ahora funciona! Muchas gracias porque estaba un poco asustado :-) – veselej