Seguridad - reded - a quien le interese

marcelov
30 de Junio del 2004
Hola gente, hace tiempo abrí un post en este foro, para ver si alguien sabia como hacer para lograr seguridad en un sistema que funciona en red, de forma que sin utilizar SQl server o algo asi, NO permita el acceso a las bases de datos ubicadas en el servidor por ejemplo: desde "Mi PC" o de otra forma.
Bueno, no obtube respuestas y luego de investigar, logre resolver el problema y pongo a disposición de quien le interese, la solución.

Presento un ejemplo, la cosa se basa en la "impersonalizacion" de una conexión a red.
de esta forma, el acceso a las bases del sistema
son accedidas UNICAMENTE por el programa que
abrío la conexión desde vfp.

El hilo de acceso es inclusive UNICAMENTE para la sesión de VFP que abrió la conexión.

Por supuesto, no aparecerá en "MI PC" la conexión.



** Personalización de acceso a la red

** Declara las funciones de la api que utilizara.
declare integer LogonUser in Win32API string userName, string domain, string passwd,;
integer logonType, integer logonProv, integer @handle

declare integer CloseHandle in Win32API integer handle
declare integer ImpersonateLoggedOnUser in Win32API integer handle
declare integer RevertToSelf in Win32API


** Efectua el login al nuevo usuario. Si falla es porque el usuario o el dominio no
** existen o porque la password no corresponde.
** En LogonUser:
** logonType = 3 (LOGON32_LOGON_NETWORK)
** logonProv = 0 (LOGON32_PROVIDER_DEFAULT)

PUBLIC logHandle

logHandle = 0
res = LogonUser("carpetacompartida", "servidor", "clavedeacceso", 2, 0, @logHandle)

if res = 0
MESSAGEBOX("Error conectando a la red..." ,32,"Acceso al sistema...",5000)
RETURN 0
endif

** Impersonaliza el usuario actual
res = ImpersonateLoggedOnUser(logHandle)
if res = 0
MESSAGEBOX("Fallo de login del usuario ...",32,"Acceso al sistema...",5000)
RETURN 0
endif

on error err_ = .t.
err_ = .f.
if !err_

* wait window (msg + ": Se abrio OK !!")

else

wait window ("Conectando a la red: " + msg + ": Error '" + message() + "'...")

endif

on error


Luego, para usar una base del servidor:

use \carpetacomartidabaseausar


Para cerrar la conexión:

** Cierra y deja todo en orden.
RevertToSelf() && Finaliza la impersonalizacion.
CloseHandle(logHandle) && Desloginea el usuario.

Espero les sirva.
salu2





Sergio
30 de Junio del 2004
Marcelo :


Tengo el mismo problema que vos. Mi pregunta es si esto impide el acceso a los datos desde el explorador y luego al entrar al entorno de red.
Según tengo entendido tenés que tener compatida la carpeta en donde están los datos.

Alvaro
30 de Junio del 2004
Que tal amigo marcelo una ?

es necesario escribir en el codigo fuente use \carpetacomartidabaseausar, la ruta del servidor que contiene la base de datos, es que esa parte no entiendo si esta en red no necesariamente tienes que escribir la ruta del servidor no se si me hago entender

Saludos de ecuador