PDA

Ver la Versión Completa : mysq_connect y mas allá....


DJ VMan
22-04-2004, 19:30:16
Hola a todos....bastante tiempo sin venir por esto lados y veo que mi cuenta aun está :)

Bueno he aqui el problema:

1º tengo un servidor linux y he montado mysql 4.0.18 en el. Tengo varias aplicaciones hechas en delphi que corren de distintos windows y se conectan a este servidor sin ningun problema. Debo agregar que cada usuario cuando se conecta se identifica, e internamente se pasa la ip de donde se está conectando al servidor mysql para que la contraste con la tabla de usuarios/host (en realidad esto pasa automáticamente yo no hago nada). Si pasa, el usuario entra...si no ....no.

2º he decidido crear las mismas aplicaciones pero esta vez via web (php básicamente), pero no he podido conectarme a mysql con los mismos usuarios siendo que estos ya están creados en el servidor mysql. He tenido que crear los mismos usuarios en el servidor, pero esta vez en la forma:

usuario@localhost

siendo que antes estaban como:

usuario@ip

ENTONCES:
definitivamente es algo entre la conexion php-mysql, la cual no se realiza de la misma forma que en delphi-mysql. La funcion mysql_connect(host,user,pass) me funciona solo si el usuario ha sido ingresado a mysql como user@localhost y la llamada desde php la es : mysql_connect('localhost',user,pass).

mi idea era connectarme algo asi como:

mysql_connect($_SERVER["HTTP_X_FORWARDED_FOR"],user,pass)

de manera de validar/restringir a los usuarios, tal cual sucede con mis aplicaciones delphi.

Alguien me puede ayudar?

roman
22-04-2004, 20:49:56
Vamos a ver, creo que hay una confusión.

El parámetros host de mysql_connect es la dirección a la que te conectas y no la dirección desde la que te conectas.

Recuerda además que MySql maneja los derechos por usuario-ip. Tal como tenías anteriormente, tus usuarios tenían derecho a conectarse desde una ip específica que no incluía localhost. Localhost se refiere a la máquina donde está instalado el servidor de mysql. Si, como pienso, tus scripts PHP corren en la misma máquina que el servidor MySql entonces, aun cuando sean los mismos usuarios, se estarán conectando desde una dirección en la cual no tienen derechos. Por ello debes agregar a tu tabla MySql.users las entradas correspondientes, para los mismos usuarios pero con localhost.

// Saludos

jachguate
22-04-2004, 21:35:03
es importante resaltar aqui, según ya te ha dicho román, que en este tipo de aplicaciones, quien se conecta a la base de datos, no es el "cliente" desde donde se carga la página (el explorador) sino el servidor web, que es quien procesa las instrucciones de mysql. Si el servidor web está en la misma máquina, evidentemente tenes que darle "permisos" como localhost. Si está en una máquina diferente, tenes que darle permisos con la ip de la máquina desde donde se conecta.

Si queres un mecanísmo de validación usuario/ip, como el que has usado hasta ahora en delphi, debieras definir una tabla que los relacione, y una vez conectado a la bd, desde php, verificar con la ip del cliente si existe una entrada en esta tabla, y si no, denegar la conexión.

hasta luego. ;)

roman
22-04-2004, 21:50:44
en este tipo de aplicaciones, quien se conecta a la base de datos, no es el "cliente" desde donde se carga la página (el explorador) sino el servidor web, que es quien procesa las instrucciones de mysql.


Estupenda aclaración




Si queres un mecanísmo de validación usuario/ip, como el que has usado hasta ahora en delphi, debieras definir una tabla que los relacione, y una vez conectado a la bd, desde php, verificar con la ip del cliente si existe una entrada en esta tabla, y si no, denegar la conexión.


Hasta donde entendí de lo que dijo DJ VMan, en Delphi él realmente no está haciendo un mecanismo de validación:


en realidad esto pasa automáticamente yo no hago nada


sino que usa el mecanismo del propio MySql.

Tan sólo para aclararle más a DJ VMan: el mecanismo que usan Delphi y PHP para realizar la conexión es esencialmente el mismo: se envían el nombre de usuario e ip al servidor de MySql y éste verifica que el par (usuario, ip) esté en la tabla 'users' (tabla de MySql) para aceptar o negar la conexión. Si la conexión viene desde una aplicación Delphi la ip será la de la pc donde corre la aplicación, si se conecta con script PHP la ip, como dice jachguate, será la del servidor WEB (que no necesariamente es el mismo que el de MySql).

// Saludos

jachguate
22-04-2004, 22:02:55
Hasta donde entendí de lo que dijo DJ VMan, en Delphi él realmente no está haciendo un mecanismo de validación: ... sino que usa el mecanismo del propio MySql.


:o Pues yo quise decir que si queria conseguir un comportamiento igual al que consigue con delphi, y no me referia a que lo hiciera el manualmente en delphi, como si tendria que hacerlo ahora con php...

Hasta luego.
;)

roman
22-04-2004, 22:17:26
Pues yo quise decir que si queria conseguir un comportamiento igual al que consigue con delphi, y no me referia a que lo hiciera el manualmente en delphi, como si tendria que hacerlo ahora con php...


Pues ya no estoy entendiéndote. :(

Lo que quiero aclarar es que no hay ninguna diferencia entre Delphi o PHP en este respecto. La diferencia está en la ip desde donde se conecta. No tiene que definir ninguna tabla para relacionar nada, a menos claro, que requiera un mecanismo personalizado de validación, pero esto último será por igual si lo hace con Delphi o PHP.

// Saludos

jachguate
22-04-2004, 22:30:08
A ver, a ver...

Yo estoy totalmente de acuerdo con vos que no hay ninguna diferencia entre Delphi y PHP, en lo que respecta a la conexión a mySQL.

Sin embargo, el amigo DJ VMan tiene un comportamiento que desea que sea comun, y dado lo ya comentado no lo es "por defecto" y es que los usuarios "finales" o "reales" (vaya, los tipos que se sientan frente a la pc) solamente puedan conectarse desde determinadas IP's..

Alli es donde en Delphi era "automático" y en php tendría que hacerlo a "mano"... supe explicarme esta vez??? :o :o

Hasta luego. :p

roman
22-04-2004, 22:49:31
Nótese que estamos hablando un poco en el aire ya que por el momento lo único que tú y yo podemos hacer, es conjeturar acerca de lo que posiblemente quiera o no hacer DJ VMan.

Si tu hipótesis:


solamente puedan conectarse desde determinadas IP's


es correcta entonces desde luego que tal como está, los "tipos que se sientan frente a la pc" no podrán ir a cualquier café Inernet a trabajar.

Pero esto no es una limitación de PHP; ni siquiera tendría sentido conectarse desde cualquier lugar del mundo diciéndole a MySql: "no te creas, en realidad me estoy conectando desde mi oficina".

Si la intención es usar un navegador Web para conectarse vía scripts PHP y a la vez restringir las IPs pues no tendrá más remedio que instalar un servidor Web en cada una de dichas IPs- cosa que para mí carece de sentido.

Sea manual o en automático, ¿cómo es posible especificar la ip origen como no sea estando en dicha IP?

Teniendo estaciones Windows con Delphi, la única razón que veo para usar PHP es poder conectarse desde varios lados independientemente de la IP. En este caso no quedará de otra que implementar su propio mecanismo de validación: crear un único usuario de MySql con permiso para conectarse desde cualquier lado y, posteriormente, validar nombre de usuario (de su sistema, no de MySql) y contraseña en una tabla aparte.

// Saludos

DJ VMan
22-04-2004, 23:03:14
Bueno gracias a todos...me ha quedado bastante claro.

Pero me hubiese gustado mas que PHP actuara como Delphi al conectarse...

Respecto de sus conjeturas...

Yo trabajo en una red de equipos bastante grande ...al menos eso creo alrededor de 250 equipos. Tenemos varios tipos de servidores, varias subredes y varias cosas mas. Pero sucede que, dadas las circunstancias, no quiero que los usuarios de una subred entren a este sistema. Debo agregar que los usuarios cambian de puesto constantemente (de puesto y labor), y puede suceder que el dia de mañana un usuario mal intencionado quiera conectarse desde una subred desde la cual no debe, esto...si es que se hubiese ido eliminarlo/modificarlo de la tabla users.

Entonces dado el trabajo que habia hecho en delphi-mysql, quise implementar las restricciones de estas subredes mediante sus ips y asi poder olvidarme del tema. (ahora tiene sentido roman? :) )

Pero de todas formas ya entendi que debo hacer...muchisimas gracias.

roman
22-04-2004, 23:11:23
PHP actúa exactamente igual que Delphi al conectarse.

Pero independientemente de esto, lo que deseas hacer lo puedes lograr perfectamente sin tener que agregar un usuario por cada ip posible. Recuerda que en MySql, la IP que especificas en la tabla 'users' puede tener comodines. Por ejemplo, la entrada

('peter pan', 200.45.128.%, ...)

permitirá a Peter Pan conectarse desde cualquier pc en la subred 200.45.128.X

// Saludos