Seguridad - reded - a quien le interese
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
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
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.
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.
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
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