Control de Acceso en SQL Server: Logins y Usuarios de
Aplicación
En SQL Server, la gestión de accesos y
permisos es fundamental para garantizar la seguridad de los datos.
Un enfoque común es la creación de logins y usuarios con distintos niveles de
acceso, asegurando que solo tengan las autorizaciones necesarias para sus
funciones.
En este artículo, exploraremos dos configuraciones comunes:
1. Usuarios con solo conexión, sin acceso a bases de datos
2. Usuarios de aplicación con acceso exclusivo a procedimientos almacenados
(SP) mediante Application Roles
1. Creación de un Login sin acceso a ninguna base de datos
Si necesitamos que un usuario pueda
autenticarse en SQL Server pero sin acceso a ninguna base de datos, podemos
seguir estos pasos:
Creación del Login en el Servidor
USE [master]
GO
CREATE LOGIN [user1] WITH PASSWORD=N'12345678',
DEFAULT_DATABASE=[MiDataEjemplo],
DEFAULT_LANGUAGE=[Español], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
Verificación de la Conexión desde Visual FoxPro (VFP)
ncon = Sqlstringconnect("Driver={SQL Server}; Server=5CG13128K2; uid=user1;
pwd=12345678")
If ncon < 0
?
"Error al conectar: " + Message()
Else
? "Conectado correctamente con ID: " + Str(ncon)
Endif
2. Creación de un Usuario de Aplicación con acceso
exclusivo a Procedimientos Almacenados
Creación del Usuario en la Base de Datos
USE [MiDataEjemplo]
GO
CREATE USER [user1] FOR LOGIN [user1] WITH DEFAULT_SCHEMA=[dbo]
GO
Creación de un Application Role
CREATE APPLICATION ROLE [Rol01] WITH DEFAULT_SCHEMA = [dbo],PASSWORD = '123456789'
GO
grant execute on [comercial].[area_venta_select] to rol01
GO
Pruebas desde Visual FoxPro (VFP)
Caso 1: Error al ejecutar el Procedimiento Almacenado sin
Activar el Application Role
ncon = Sqlstringconnect("Driver={SQL Server}; Server=5CG13128K2; uid=user1; pwd=12345678")
If ncon > 0
? "Conectado correctamente con ID: " + Str(ncon)
nExec = SQLExec(ncon, "EXEC comercial.area_venta_select", "resultado")
If nExec < 0
? "Error: No se tienen permisos para ejecutar el SP."
Else
Browse && Debería fallar en este caso
Endif
SQLDisconnect(ncon)
Else
? "Error en la conexión: " + Message()
Endif
Caso 2: Éxito al ejecutar el Procedimiento Almacenado con
Application Role
ncon = SQLSTRINGCONNECT("Driver={SQL Server}; Server=5CG13128K2; uid=user1;
pwd=12345678")
IF ncon > 0
?
"Conectado correctamente con ID: " + STR(ncon)
nExec = SQLEXEC(ncon, "EXEC
sp_setapprole 'Rol01', '123456789'")
IF nExec < 0
? "Error al activar el rol de aplicación"
ELSE
? "Rol de aplicación activado correctamente"
nExec = SQLEXEC(ncon, "EXEC
comercial.area_venta_select", "resultado")
IF nExec < 0
? "Error al ejecutar el procedimiento almacenado"
ELSE
BROWSE && Ahora debería mostrar los resultados correctamente
ENDIF
ENDIF
SQLDISCONNECT(ncon)
ELSE
? "Error en la conexión: " + MESSAGE()
ENDIF
Conclusión
Esta configuración nos permite mantener la seguridad y el control en SQL
Server, asegurando que:- Los logins sin acceso a bases de datos solo puedan autenticarse sin ver información.
- Los usuarios de aplicación solo puedan ejecutar procedimientos almacenados a través de Application Roles, sin acceso a las tablas directamente.
- Desde Visual FoxPro, podemos conectar estos usuarios, activar el rol de aplicación y ejecutar procedimientos almacenados sin exponer datos sensibles.
Estas prácticas mejoran la seguridad y el control del acceso a los datos, evitando vulnerabilidades innecesarias en el entorno de SQL Server.
Comentarios
Publicar un comentario