Articulos de Colaboradores
Codigos Fuente
Compiladores
Documentos y Manuales
Programas y Librerias
Recursos y Articulos
Videotutoriales
Servidores (Aplicaciones)
Controles ActiveX

Analisis SEO
Conocer PageRank
Encriptar JS/HTML
Convertir HTML a JavaScript
Convertir HTML/JS a PHP
Tablas ASCII/HTML
Base Windows API
Directorio de Empresas
Libros de Informatica
Rotador de Banners

ARTICULOS TECNICOS SOBRE PROGRAMAS Y PROGRAMACION
PROGRAMACION Y DISEÑO PARA PROGRAMADORES Y WEBMASTERS


Seguridad en nuestros sistemas cuando usamos SQL Server - Pagina 2






Una idea de como tratar la seguridad en nuestros sistemas cuando usamos SQLServer
(Continuacion)
Takeichi Kanzaki Cabrera
.
Sobre la base del problema planteado y usando las especificaciones del módulo, empecemos a trabajar. Primeramente vamos a empezar por lo más fácil: la creación de la tabla dentro de la base de datos, la cual podemos generar con el siguiente código de Transact-SQL:
 

--Tabla con la Información de Registro del Usuario.--
CREATE TABLE tUsuariosInfo
(
Login NVarChar(20) NOT NULL,
Contrasena VarBinary(256) NOT NULL,
NombreUsuario NVarChar(50) NOT NULL,
IdSucursal Int NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE tUsuariosInfo ADD CONSTRAINT
PK_ tUsuariosInfo PRIMARY KEY CLUSTERED
(
Login
) ON [PRIMARY]
--****************************************--

OK, ya tenemos la tabla para guardar la información de registro del usuario, ahora empecemos con los procedimientos almacenados para agregar, modificar y validar usuarios (el de eliminar no lo vamos a implementar pues es bastante sencillo):

--Procedimiento almacenado para Agregar la Información de Registro de los Usuarios.
CREATE PROCEDURE spUsuariosIns
(@Login nvarchar(20),
@Contrasena nvarchar(50),
@Nombre nvarchar(50),
@IdSucursal int)

AS INSERT INTO tUsuariosInfo
(Login,
Contrasena,
NombreUsuario,
IdSucursal)

VALUES
(@Login,
pwdencrypt(@Contrasena),
@Nombre,
@IdSucursal)
GO
--****************************************--
 

--Procedimiento almacenado para Modificar la Información de Registro del Usuario.
CREATE PROCEDURE spUsuariosUpd
(
@Login nvarchar(20),
@Nombre nvarchar(50),
@Contrasena varbinary(256),
@IdSucursal int
)

AS UPDATE tUsuariosInfo

SET Nombre = @Nombre,
Contrasena = pwdencrypt(@Contrasena),
IdSucursal = @IdSucursal
WHERE
(Login = @Login)
GO
--****************************************--

--Procedimiento almacenado para Validar la Información de Registro del Usuario.
CREATE PROCEDURE spValidarUsuario
(
@Login nvarchar(20),
@Contrasena sysname
)

AS

DECLARE @pass sysname --contraseña del usuario en la base de datos
SELECT @pass=(SELECT Contrasena FROM tEstudiantes WHERE Login=@Login)

IF (pwdcompare(@Contrasena, @pass, 0)=1 )
SELECT
Login,
Nombre,
IdSucursal
FROM
tUsuariosInfo
WHERE
Login=@Login

GO
--****************************************--

No te preocupes si no has entendido mucho sobre lo que has visto hasta aquí, pues trataremos de explicar lo más significativo, sin entrar en detalles con el código SQL básico. En el procedimiento almacenado spUsuariosIns que usamos para agregar nuevos usuarios al sistema vemos por primera vez el uso de la función pwdencrypt, la cual como mencionamos anteriormente, toma como parámetro la contraseña en texto plano y nos devuelve la misma encriptada; fuera de este punto no hay nada más que llame la atención en el mismo pues lo demás es código SQL estándar que no nos proponemos detallar en este material. Lo mismo ocurre con el procedimiento spUsuariosUpd que usamos para actualizar la información de registro de los usuarios, aunque el mismo pudiera complicarse un poquito si para modificar esta información solicitáramos la contraseña actual del usuario, aunque bastaría con una llamada al procedimiento spValidarUsuario. En el procedimiento almacenado spValidarUsuario aparece la función pwdcompare, que como pudiste apreciar requiere de algunos parámetros: el primer parámetro es la contraseña que queremos verificar si es correcta, el segundo parámetro es la contraseña con la cual la queremos comparar y el tercero sería el método de encriptamiento usado para codificar la contraseña, este parámetro existe para tener lograr una compatibilidad con las versiones anteriores de SQLServer (como dijimos anteriormente este es el método de encriptamiento que usa el SQLServer para controlar el acceso a él) que usaban otro método de encriptamiento, en caso de que hallamos encriptado la misma usando pwdencrypt siempre le enviaremos un 0; la función pwdencrypt nos devuelve 1 si las dos contraseñas coinciden y un valor diferente a 1 en caso contrario; dentro del procedimiento almacenado verificamos si el valor de retorno es 1 y en este caso "cogemos" los datos del usuario que nos van a ser útiles dentro del sistema.

Hasta aquí llegaría la parte que tendríamos que implementar dentro del SQLServer, ahora veremos como podríamos hacer uso de esta usando Visual Basic .NET, partiremos de que tenemos una conexión establecida con el SQLServer por medio de una variable llamada cnnConnexión y de que tenemos dentro del sistema tres variables globales (sólo lo suponemos, no lo aconsejamos) para almacenar la información de registro del mismo, strLogin, strNombre y intIdSucursal.

'Función para validar los usuarios.
Public Function ValidarAcceso(ByVal strLogin As String, ByVal strContraseña As String) As Boolean
Dim cmdProc As SqlCommand
Dim dtrProc As SqlDataReader

cmdProc = New SqlCommand("spValidarUsuario", cnnConexión)
cmdProc.CommandType = CommandType.StoredProcedure
cmdProc.Parameters.Add(New SqlParameter("@Login", SqlDbType.NVarChar, 15))
cmdProc.Parameters("@Login").Value = strLogin
cmdProc.Parameters.Add(New SqlParameter("@Contraseña", SqlDbType.NVarChar, 50))
cmdProc.Parameters("@Password").Value = strContraseña
dtrProc = cmdProc.ExecuteReader
If dtrProc.Read Then
If Not dtrProc.IsDBNull(0) Then
strLogin = dtrProc.GetString(0)
strNombre = dtrProc.GetString(1)
intIdSucursal = dtrProc.GetInt32(0)
ValidarAcceso = True
Else
ValidarAcceso = False
End If
Else
ValidarAcceso = False
End If
dtrProc.Close()
End Function

'Procedimiento para agregar usuarios.
Public Sub AgregarUsuario(ByVal strLogin As String, ByVal strContraseña As String, ByVal strNombre as String, ByVal intIdSucursal As Integer)
Dim cmdProc As SqlCommand

cmdProc = New SqlCommand("spValidarUsuario", cnnConexión)
cmdProc.CommandType = CommandType.StoredProcedure
cmdProc.Parameters.Add(New SqlParameter("@Login", SqlDbType.NVarChar, 15))
cmdProc.Parameters("@Login").Value = strLogin
cmdProc.Parameters.Add(New SqlParameter("@Contraseña", SqlDbType.NVarChar, 50))
cmdProc.Parameters("@Password").Value = strContraseña
cmdProc.Parameters.Add(New SqlParameter("@Nombre", SqlDbType.NVarChar, 50))
cmdProc.Parameters("@Nombre").Value = strNombre
cmdProc.Parameters.Add(New SqlParameter("@IdSucursal", SqlDbType.Int))
cmdProc.Parameters("@IdSucursal").Value = intIdSucursal

Try
cmdProc.ExecuteNonReader
Catch Exp as SqlException
MsgBox(Exp.Message)
End Try
End Sub

Hasta aquí llegamos con nuestra idea, esperamos que les halla sido útil, cualquier comentario, idea o pregunta puede enviarlo a takeichi.kanzaki@uho.edu.cu o tkanzakic@hotmail.com

.
Sobre el autor:
Mi nombre es Takeichi Kanzaki Cabrera, tengo 22 años, vivo en Cuba. Actualmente soy estudiante de cuarto año de Ingeniería en Informática en la Universidad de Holguín, Cuba. Programo en Delphi, Visual Basic, Java, asp, ASP.NET, php,html, y nociones de LabView (sólo lo he usado para trabajos de la escuela). Entre los sistemas de base de datos Cliente/Servidor con los que he trabajado están SQLServer, Interbase y Firebird. Entre mis trabajos más está la confección de tres Intranets: para una corporación de turismo, una compañía de seguros y para una central termoeléctrica (asp, ASP.NET, Java y Delphi para sistemas auxiliares), además he trabajado en varios sistemas para la informatización de la universidad (Delphi y Visual Basic). Actualmente estoy al frente de un equipo de trabajo que se encuentra desarrollando la Intranet de la central termoeléctrica antes mencionada.




ProgramasProgramacion.com (ex-CGR Software.com)
© 2001-2024 C.G.R. @ Buenos Aires, Republica Argentina

Contacto | Privacidad