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 |