Consultar MySQL en servidor WEB desde C# ...

Iniciado por NetStorm, 31 Julio 2011, 01:06 AM

0 Miembros y 1 Visitante están viendo este tema.

NetStorm

Hola, estoy montando un software de facturación comercial, entonces trato de darle la mayor flexibilidad, algunos de mis clientes tienen páginas web, y bueno su hosting incluye BD en MySQL, el problema es que la BD es local, es decir desde PHP se trabajaría como "localhost", siendo así, ¿como podría acceder desde C# para realizar consultas?, alguno de Uds ya ha trabajado con algo parecido, necesito vuestra orientación.

Lo que trato de hacer es trabajar un sistema comercial que pueda ejecutarse desde una App de escritorio y desde el servidor web.

Saludos ;)

neoncyber

Hola, hace tiempo puse una entrada en mi blog que especifica la conexion a base de datos desde c# con mysql
http://donkeysharp.blogspot.com/2010/09/conectarse-mysql-desde-net.html

Saludos
Código (python) [Seleccionar]

#!/usr/bin/python
print "Visit:"
print "http:\\donkeysharp.blogspot.com"

.::IT::.

#2
Hola pues para ese entorno de trabajo  tienes 2 opciones :
1° la primera y más fácil es que desde el panel administrativo permitas acceso a la base de datos!! Y no todos los hosting lo permiten, consulta al proveedor del host .

2° la segunda opción pues es algo más trabajosa pero no tan complicada y es montar web services con php que luego consumirás desde tu aplicación web-escritorio.

Y bueno la otra opción es obvia cambiar de provedor de hosting , si lo que buscas es soporte para asp .net pero también base de datos libres como mysql –postgresql pues recomendaría
http://www.ubiquityhosting.com
Usan servidores Linux y emulan asp .net con Mono. Es 100% compatible con los web Services, con Asp .net tienes que cambiar algunas cosas.

Como pregunta personal,  ya tienes echa tu aplicación? Porque quieres usar Mysql? Te lo pregunto porque yo tengo avanzado mantenimiento de artículos(por familia-sub familias),clientes,proveedores y compras en c# y postgresql, uso web services para conexión de base de datos, si gustas pues  podemos compartir ya que todo eso lo tengo abandonado y quisiera terminarlo.
Simplemente .::IT::.

NetStorm

NeonCyber gracias por la referencia, eso es bastante conocido con MySQL Conector, eso lo uso cuando trabajo en entornos de redes LAN o localmente, allí sirve, pero para un hosting... NO, bueno no es que no sirva, sino que tu ejemplo se basa en entornos locales...

Bueno en realidad si tengo de como hacer esto con servidores de hosting que tienen la BD en un servidor aparte al del Host como GoDaddy, y desde el Cpanel configuras conexiones remotas de MySQL, eso porque te dan un servidor de MySQL al estilo: mySQL.hosting.com

pero... ¿Alguien tiene idea cómo hacerlo con servidores que albergan la BD y MySQL en el mismo servidor?, es decir allí tu servidor de MySQL no es "mySQL.hosting.com" sino "localhost" y ademas quiero conectarme desde una red normal de Pc's no desde otro dominio que creo sería más fácil.

.::IT::.

#4
Pues si tu host  lo permite y tiene cpanel en la opción de "base de datos" –"mysql remota" agregas las Ips que quieres que tenga acceso a la base de datos.




Y en tu programa cambias la cadena de conexion para que apunte a tu host eso es todo 100% probado.(en un host que administro)

Nota: si tus clientes tienen ip dinamico entonces coloca % para que permita acceso a todos los host.
Simplemente .::IT::.

NetStorm

#5
Por ejemplo si mi host es www.paquito.com ¿como sería mi namehost para MySQL?, me echas una mano con eso último por favor...

Y se me ocurre que en lugar de Ip's dinámicas podría enmascararlo con un subdominio de DynDns por ejemplo ¿funcionaría?  ;-)

Gracias por tu tiempo y atención ;)

Una curiosa duda ¿porqué tienes un payaso en tu avatar?

.::IT::.

#6
Pues don Dyndns lo probe y no funciono :( ahora si tu host es www.paquito.com pues tu namehost tambien seria igual(sin el www al comienso). si no te funciona prueba a poner tu ip en la lista de permitidos talves ese es el problema. tambien puedes probar a conectarte pero desde el administrador de consola del mismo mysql.

abre un terminal y escribe

mysql -u user -h paquito.com -p

donde "user" es el nombre de usuario mysql y "paquito.com" es el dominio sin www al comienso, y fijate que error te bota.

Simplemente .::IT::.

NetStorm

Uyuy!, ni modo tendré que usar eso del comodín "%", sabes la verdad no soy muy experto en MySQL, pero si permito todas las conexiones remotas, ¿Crees que se abren brechas de seguridad?, es cierto, el atacante quizás no conozca la estructura de mi BD, pero debe bastar conectarse, ejecutar comandillos y sacar datos o hacer maldades, ¿existe este riesgo?.

Tampoco me gustaría que me llamen "Mediocre programador" jajaja  ::)

.::IT::.

Pues Existe un problema se seguridad muy grande y es que la contraseña de la BD esta en el cliente (tu aplicación la contiene en su codigo fuente) por eso te recomendé Web Services que si es cierto es más trabajo te da mayor seguridad ya que puedes validar usuarios del lado del servidor usando las los SoapHeader!!
Simplemente .::IT::.

43H4FH44H45H4CH49H56H45H

Cita de: Xhushito en  1 Agosto 2011, 23:45 PMel atacante quizás no conozca la estructura de mi BD, pero debe bastar conectarse, ejecutar comandillos y sacar datos o hacer maldades, ¿existe este riesgo?.

Ni siquiera se necesitaria eso, hace unos meses le hice ingenieria inversa a una aplicacion de escritorio de una empresa dedicada a la Ingenieria de Software, la cual fue programada en vb 6 y trabajaba con mysql en un hosting  de pago (te mostraria el enlace al tema, pero los autores del software pidieron al moderador de la sección borrar dicho tema hasta mejorar su seguridad), luego de unos minutos pude obtener acceso al hosting con todos los permisos, accedi a todos los datos incluyendo las contraseñas de los usuarios root en mysql.
De ahi para automatizar la exploración hice un pequeño software en C++ con QT:



http://foro.elhacker.net/programacion_cc/mysql_browser_c_y_qt-t321390.0.html

Las imágenes no estan disponibles, culpa del sitio donde las subi. Si no sabes compilarlo, deje una descarga a un ejecutable para windows y otra con el proyecto + ejecutable para linux, puedes probarlo en un hosting gratuito solo para ver que sencillo que es navegar por las bases de datos.

Ahora lo uso con frecuencia en slackware para explorar BD's y con las mejoras que le hice este tiempo puedo testear inyecciones sql automaticamente.

De todo eso lo que podria recomendar a grandes rasgos es que si utilizas en una BD local lo hagas con una aplicación de escritorio, si lo haces via web y quieres utilizar una aplicación de escritorio las contraseñas deberan estar en la BD remota y el usuario debe escribirlas cada vez que ingresa a la aplicación, debes tener un buen manejo de los permisos de usuario, procedimientos almacenados y algunas tablas de apoyo, ademas puedes combinar la aplicación con funciones en php para hacerlo similar a los web services de manera sencilla.
Otra forma seria hacerlo directamente en php o en asp.net, tener la aplicación en tu hosting (eso para no dar el codigo fuente a tus clientes) y segun el usuario conectado direccionar a la BD del hosting de cada cliente, algo como rentarles tu aplicación y que sus datos vayan guardandose en la BD del hosting de cada cliente (ahi seria bueno un cifrado para que solo tu aplicación pueda leer dichos datos).

Bueno ya no me extiendo más.
Saluos.

-R IP
:0100
-A 100 
2826:0100 MOV AH,09
2826:0102 MOV DX,109
2826:0105 INT 21
2826:0105 MOV AH,08
2826:0105 INT 21
2826:0107 INT 20
2826:0109 DB 'MI NICK ES CODELIVE.$' 
2826:0127 
-R BX
:0000
-R CX
:20
-N CODELIVE.COM
-W