Foros del Web » Programando para Internet » PHP »

mysql_connect restringido

Estas en el tema de mysql_connect restringido en el foro de PHP en Foros del Web. Hola a todos. Se me planteo una idficultad y no encuentro hasta este momento alguna solución. La cuestión es que estamos programando un sistema con ...
  #1 (permalink)  
Antiguo 17/05/2007, 00:09
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
mysql_connect restringido

Hola a todos.
Se me planteo una idficultad y no encuentro hasta este momento alguna solución.

La cuestión es que estamos programando un sistema con muchas ramas. Cada módulo del sistema le fue encargado a un programador diferente o a un grupo de programadores.

Se ha programado una clase para la conexión a la base de datos donde cada programador esta restringido a ciertas tablas, a seleccionar, insertar, actualizar o borrar y qué campos puede manipular con dichos permisos.

Esto es para que cada progrtamador no pueda acceder a toda la base de datos que se conecta con mysql_connect con el mismno usuario y contraseña para todo el sistema.

Hasta aca todo bien. La cuestión esa que por medio de la clase cada programador esta restringido. Pero al hacer una simple consulta directamente en el código de fuente sin usar la clase de conexión a mysql de esta forma:

mysql_query($sql,$link)

y no se establece el $link entonces lo que hace php es buscar la ultima conexión a la base de datos abierta y es justamente la que abiro la clase al inicializarse.

Entonces de esa manera el programador puede hacer la consulta que quiera fuera de la clase y accediendo a la tabla que quiera.
Entoncea la duda es cómo restringir la conexión a mysql para ser usada sólo dentro de una clase y no de manera automatica cuando no se establece el link de mysql_query.

Espero haber sido claro y espero sus importantes aportes.
Hasta pronto.
  #2 (permalink)  
Antiguo 17/05/2007, 04:08
 
Fecha de Ingreso: abril-2007
Mensajes: 17
Antigüedad: 17 años
Puntos: 0
Re: mysql_connect restringido

Se me ocurre que en la clase de la DB cada vez que hagas la operación que quieres cierres la conexión. De esta manera no podrán usar mysql_query porque nunca habrá una conexión establecida con la DB y cada vez que quieran hacer algo tendrán que pasar por la clase para conectarse.

Un saludo
Adrián Fernández
[email protected]
  #3 (permalink)  
Antiguo 17/05/2007, 09:04
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: mysql_connect restringido

Se plantea entonces una cuestión de rendimiento del servidor.

No se exige más (recursos) el servidor que debe conectarse cada vez que se hace una consulta?

Que se deba hacer una nueva conexión en cada consulta no exige mas el servidor que abriendo una conexión usar ese link y cerrarla al final del script?

Entonces no hay una forma de restringir el uso de un link de conexión a una clase?

Espero sus comentarios.
Gracias
  #4 (permalink)  
Antiguo 17/05/2007, 09:15
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Re: mysql_connect restringido

Lo que entiendo es que en la clase tienes toda la logica de acceso a la bd, es eso?
Si es así, otra opción es colocar esa lógica en las tablas y que la clase solo controle las excepciones.
  #5 (permalink)  
Antiguo 17/05/2007, 10:12
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Pregunta Re: mysql_connect restringido

Hola, gracias por responder.
Claudio, la clase tiene varios métodos entre los cuales, los polémicos. Los presento de manera esquemática (ya que la clase funciona bien):

class MYSQL
{
public $...;
private $...;
protected $...;
// en fin todas las definiciones de atributos

function __construct () {

$this->conexion();

}


private function conexion(){

$this->link = connetc(...)

}

public function SQL($sql) {

$consulta = mysql_query($sql,$link)

}

etc etc etc he obviado la parte donde corrobora los permisos de cada programador o módulo y donde se filtra el código no permitido.

La cuestion es que cuando algun programador no decide utilizar la clase y pone directamente en el código mysql_query, PHP toma automáticamente la ultima conexión abierta que fue justamente a que se abrio dentro de la clase.
Entonces el programador puede acceder a toda la base de datos y efectuar los cambios que quera sin pasar por los filtros.

Esta bien la solución de abrir y cerrar la conexión en cada consulta y lo estoy implementando de esta manera (volviendo al esquema de arriba):


public function SQL($sql) {
$this->conexion();

$this->consulta = mysql_query($sql,$link)

$this->close();

}

Pero el interrogante es si esta modalidad no le quita rendimiento a php y a mysql tendiendo en cuenta que en cada script a veces hay más de 3 o 4 consultas.

Por otro lado lo positivo es que por lo generar se genera una consulta y despues se descargan los resultados de esa consulta dentro de un html y si la conexión queda abierta. Es tiempo perdido el que pasa desde la ultima consulta a la finalización de la descarga html.

POr ese lado esta bueno cerrar la conexión despues de cada consulta.

No se si se entiende la duda, cual sería el mejor rendimiento??

Y veo además que NO HAY FORMA de limitar un link a mysql dentro de una clase.

No es la útima palabra, por eso lo estoy plantenado aca.

Quiero aclarar además que el objewtivo de esta clase son dos:

1) GRANATIZAR que la consulta esta bien hecha
2) RESTRINGIR el accesp de cada programador a la base de datos de manera que sólo pueda acceder a las tablas que yo le permita, y dentro de esa tabla a loc campos que yo le permita ejecutando selects, deletes, updates e inserts de acuerdo a los permisos.

De esta menra esta bien sectorizada la programación sin que un programador pueda meterse en otras áreas resguardando de esta manera la integridad y la confidencialidad de datos.

Lo negativo de esto es que lófgicamente el rendimiento de php es un poco más exigido ya que sería mucho más rápido una consulta directa que una consulta armada, controlada y ejecutada por una clase. Pero en proyectos grandes donde participan muchos y el crecimiento es muy bueno es un mal necesario.

Desde ya muchas gracias y espero sus comentarios.

Última edición por usermax; 17/05/2007 a las 10:19
  #6 (permalink)  
Antiguo 17/05/2007, 10:24
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Re: mysql_connect restringido

lo mejor es cerrar las conexiones al final de las hojas, en cuanto a el rendimiento si debe afectar pero creo que es mínimo, tomando en cuenta que un server es un equipo con bastante hardware, otro punto, lei en algun lugar(no recuerdo donde; lo siento) que puedes restringir el número de conexiones a abrir (creo que se hace en el php.ini), con esto puedes tu reducir el uso de recursos, por otro lado, creo que sería bueno que crearas a tus usuarios directamente desde mysql y colocarle los permisos necesarios para cada uno y así te evitas de mas problemas .

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #7 (permalink)  
Antiguo 17/05/2007, 10:38
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: mysql_connect restringido

Hola Eits,
Gracias por responder.

Cerrar la conexión al final de la hoja no soluciona el problema ya que habrá alguna conexión abierta de la cual los programadores se pueden "colgar" para accesar a cualquier parte de la base.

Por otro lado se busca solucionar este problema fuera de los usuarios mysql, ya que a un programador, por ejemplo, le puedes asignar una tarea distinta y cambiar sus permisos, y sería un real enriedo hacerlo desde los usuarios mysql, mejor es hacer un sistema en php que pemrita filtrar como lo hemos hecho. Es un mejor control.

Cuando la programación de un módulo ha terminado lo que se hace es "traducir" la sentencia SQL controlada por la clase en una simple.

El uso de esta clase es "mientras" se programa. Al cerra la programasción la misma clase es la que genera un reporte con las sentencias sql reales que son las que se usarán.

Pero bueno, sigue la polémica.

Espero los comentarios.
Gracias
  #8 (permalink)  
Antiguo 17/05/2007, 19:43
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: mysql_connect restringido

Considerando que hasta el momento hay bastantes lecturas de este item y no hubo más respuestas, para cerrar el tema concluyo que:

NO SE PUEDE RESTRINGIR UN LINK A UNA CONEXIÓN A MYSQL DESDE PHP A UNA CLASE. SI QUIERES HACERLO DEBERÁS ABRIR Y CERRAR LA CONEXIÓN EN CADA CONSULTA.



Hasta pronto
  #9 (permalink)  
Antiguo 17/05/2007, 21:24
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: mysql_connect restringido

Creo que si nos enfocaramos en hacer un sistema $(Seguro) basandonos solo con PHP, no estaria completo en su totalidad, ya que deberiamos deberiamos considerar las variables de session PHP al equipo como un muralla mas que saltar para algun cracker, pero despues de esta se deben aplicar las otras capas de seguiridad, (mysql, usuario de sistema, acesso sobre IP, acceso unicamente a cierta hora, ....) que verdaderamente permitiran sentirnos seguros que se ha visto la seguridad de varios puntos de vista.

Algo que se debe practicar.

un saludo.
__________________
http://dev.wsnetcorp.com
  #10 (permalink)  
Antiguo 18/05/2007, 08:13
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: mysql_connect restringido

Hola ebe;
Gracias por escribir.

Estoy de acuerdo con lo que dices en tu post pero no veo que tenga alguito que ver con lo que se viene planteando.

Saludos
  #11 (permalink)  
Antiguo 18/05/2007, 20:12
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: mysql_connect restringido

me imagino que se ha de tratar de algo simple lo que estas desarrollando e implementando al no creer que tienen "alguito" que ver, sistemas seguros vida mas tranquila, pero sera de utilidad para alguien que no le guste pasarsela enredado dia y noche con un par de problemas a futuro.

un saludo.
__________________
http://dev.wsnetcorp.com
  #12 (permalink)  
Antiguo 18/05/2007, 21:41
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: mysql_connect restringido

Hola ebe,
Gracias nuevamente por escribir.
No quiero que tomes a mal lo que te esciribi en mi post anterior. La única intención rea comentarte que lo que se planteó originalmente en este post era la posibilidad de "restringir" la conexión a una base de datos a una clase determinada.
Si lees detenidamente este post desde el comienzo te darás cuenta.

Por lo demas creo que esta todo mas que claro y con respecto a implementar seguridad nunca está de más.

Hasta pronto
  #13 (permalink)  
Antiguo 18/05/2007, 21:57
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: mysql_connect restringido

pero mas aun,, estas consideraciones no las puedes hacer a un lado, empezando en querer crear un sistema para programadores, escribo de nuevo, programadores, tratando de confiar en las restricciones para estos programadores unicamente a traves de PHP.

Cita:
La cuestión es que estamos programando un sistema con muchas ramas. Cada módulo del sistema le fue encargado a un programador diferente o a un grupo de programadores.

Se ha programado una clase para la conexión a la base de datos donde cada programador esta restringido a ciertas tablas, a seleccionar, insertar, actualizar o borrar y qué campos puede manipular con dichos permisos.

Esto es para que cada progrtamador no pueda acceder a toda la base de datos que se conecta con mysql_connect con el mismno usuario y contraseña para todo el sistema.

o fue que obviaste el inicio de tu tema que son unos programadores y tu, programadores.

Creo que tu sistema lo has empezado (si ya lo inicializaste) de una manera no bien analizada, mas con este tipo de usuarios.

Yo no crearia un sistema para programadores teniendo solo la capa de seguridad por medio de PHP, yo iria mas alla desde un principio, mas si es algo que sera corporativo, interno, accesible solo por un grupo de programadores que puedo contar con los dedos de mis manos.

Pero bien,, un saludo y hasta pronto.
__________________
http://dev.wsnetcorp.com
  #14 (permalink)  
Antiguo 18/05/2007, 22:54
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: mysql_connect restringido

Ok. Dar más detalles no tendría sentido. Creo que la temática de este tema fue una "restringir el link de una conexión a una clase" y todo lo demás fueron ejemplos ilustrativos para llegar a ese punto.
Tu no sabes cuál es mi proyecto y si lo he inicializado o no como para hacer afirmaciones y sacar conclusiones. Si podrías preguntar e interrogar para estar segura antes de afirmar.

En los foros mas que poner en práctica la seguridad habría que poner en práctica la paciencia y el pensamiento constructivo y no el confrontativo.

De todas maneras tendré en cuenta tus comentarios y/o sugerencias.
Muchas gracias.

Última edición por usermax; 19/05/2007 a las 06:27
  #15 (permalink)  
Antiguo 19/05/2007, 13:39
Avatar de ebe
ebe
 
Fecha de Ingreso: marzo-2004
Ubicación: Guatemala
Mensajes: 363
Antigüedad: 20 años, 1 mes
Puntos: 11
Re: mysql_connect restringido

buena la edición; Exacto.. pensamientos constructivos, espero haberte ayudado a ver tu proyecto de diferentes puntos de vista.

PD: confrontativo no, analítico si, y si de mi dependiera replantearme las cosas por alguna sugerencia con argumentos, ok, bienvenida sea.

un saludo. =)
__________________
http://dev.wsnetcorp.com
  #16 (permalink)  
Antiguo 20/05/2007, 13:19
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: el real sentido de los foros

Aunque verdaderamente no me has ayudado en nada ya que la original causa de esta linea del post era saber "cómo se restringe la conexión a mysql a una clase determinada", todo lo demás fueron herramientas para explicar ese punto pero ya que estamos sobre el tema...

Una cosa es "sugerir", "aconsejar" y otra es la crítica o las insinuaciones.

Vuelvo al tema ya que me parece importante para los foros y para este especificamente. Nunca les pasó que escribiendo en el MSN quien está del otro lado interpreta las cosas de manera distinta de lo que realmente le querías comunicar?

Por ejemplo, si escribes en MAYUSCULAS se interporeta como un grito, y asi, hay que ser muy cuidadoso en "la forma" en que se plantean los temas ya que un foro no es para señalar al más ignorante sino el fin creo que es que entre todos podamos aprender y apoyarnos.

En el caso de ebe, yo estoy escribiendo esto porque quizas no me gusto la manera en que sacó conclusiones sobre un proyecto que no tiene la menor idea de lo que consiste y causa en quien recibe el mensaje cierta repulsión o enojo que puede desviar el sentido de un foro.

Más alla de todo esto, es la primera vez que escribo esto en un foro no queriendo reemplazar ni tachar a los moderadores, pero me parece que este tema es más que fundamental para optimizarnos entre todos.

Y nunca olviden que:

- Nunca uno lo sabe todo
- Lo más sencillo para uno puede ser un mundo para otro
- Lo mas complicado para uno puede ser lo mas sencillo para otro
- Nunca esta dicha la última palabra
- No es bueno ser sabio en la propia opinión
- No señales a otro sino aporta con el otro
- Estimulemos la paciencia y el pensaiento constructivo.

A quienes este post le esta estorbando mil disculpas, y de ahora en adelante sólo voy a seguir escribiendo para aportar en algo con la real cuestión de esta lina:

¿Se puede restringir una conexión a una clase si o no?
Mi conclusión hasta ahora es NO.

Muchas gracias y hasta siempre.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:07.