2011-04-05 7 views
5

Comenzando a desarrollar mi primera aplicación Ruby on Rails con postgresql en Ubuntu. He creado un usuario postgresql con una contraseña. En database.yml, puse el nombre de usuario y la contraseña postgresql.Ruby on Rails | Postgresql ignora mi contraseña en database.yml

Cada vez que ejecuto un rake db: migrate se ejecuta sin error sin importar en qué cambio la contraseña en el database.yml - incluso si el campo de contraseña está en blanco. Si cambio el nombre de usuario obtengo un error de autenticación.

¿Cómo obtengo la base de datos de Ruby on Rails para usar una contraseña?

TIA

+0

¿Cómo se ve el archivo 'database.yml'? Contraseñas en postgre funcionan para mí. – Matchu

Respuesta

13

Probablemente esté usando ident o incluso trust autenticación. Una breve sinopsis de los métodos de autenticación más comunes:

  • trust - Usted puede iniciar sesión en no importa qué.
  • ident - Puede iniciar sesión si su nombre de usuario de UNIX es el mismo que el nombre de usuario de PostgreSQL.
  • md5 - Puede iniciar sesión si su contraseña (cifrada con md5) es correcta.

Editar: PostgreSQL 9.0 introdujo el método de autenticación peer. De lo que deduzco, ident y peer tienen el mismo propósito —, su inicio de sesión está determinado por el nombre de usuario de su sistema operativo — pero ident habla con un servidor de identidades que escucha en el puerto 113, mientras que peer busca sus credenciales con una llamada al sistema. Ver http://www.postgresql.org/docs/9.1/static/auth-methods.html#AUTH-IDENT

localizar el archivo pg_hba.conf, y ver si puede encontrar algo que se parece a esto:

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 

# "local" is for Unix domain socket connections only 
local all   all        ident 
# IPv4 local connections: 
host all   all   127.0.0.1/32   md5 
# IPv6 local connections: 
host all   all   ::1/128    md5 

Cuando intenta conectarse, PostgreSQL pasa a través de esta línea por línea. Si el tipo de conexión (por ejemplo, local, host), la base de datos, el usuario (usuario de la base de datos, no el usuario del sistema) y la dirección coinciden, utilizará el método de autenticación proporcionado.

Si desea solicitar una contraseña para acceder a su propio usuario PostgreSQL, podría agregar una línea como esta en la superior, antes de la línea local all all ident:

# TYPE DATABASE USER  CIDR-ADDRESS   METHOD 
local mydbname myusername      md5 

asegúrese de reiniciar PostgreSQL después de cambiar pg_hba.conf.

+0

Muy útil, gracias.Creé un usuario de base de datos específico del proyecto y descubrí que necesitaba otorgar acceso 'projectusername' MD5 a la base de datos' postgres' predeterminada así como a las tres bases de datos de Rails. Eso permite 'rake db: create: all' (en Rails 3.1) para crear las bases de datos de Rails. Escribí los detalles [aquí] (http://www.mcbsys.com/techblog/2011/10/set-up-postgresql-for-rails-3-1/). –

1

que sólo apenas he usado PostgreSQL, pero sé que tiene una característica llamada sameuser. Si el nombre del usuario del sistema coincide con el nombre del usuario de la base de datos, la contraseña no es necesaria. Entonces, si entro en esta computadora con el nombre de usuario "matchu", y hay un usuario en PostgreSQL llamado "matchu", podría iniciar sesión en ese usuario de la base de datos sin autenticación adicional.

¿Podría ser eso lo que está pasando aquí?

+0

Gracias por la información – user678604