Cómo crear y eliminar cuentas de usuario para Microsoft Access |
Por Enrique Martínez Montejo |
Última revisión: 30/04/2005 |
Al igual que sucede con los grupos de trabajo, al crear un nuevo archivo de información de grupo de trabajo, por defecto se crea un único usuario administrador (Admin), el cual pertenece a los grupos de trabajo de administradores (Admins) y usuarios (Users).
El usuario que desee crear nuevas cuentas de usuarios, deberá pertenecer al grupo Admins, o a otro grupo con permisos para poder crear nuevos usuarios.
La cadena que identifica al usuario, así como la contraseña del mismo, no pueden exceder de veinte caracteres de longitud. La contraseña del usuario es opcional, aunque se recomienda que cada usuario tenga su respectiva contraseña. Referente al identificador personal (PID), su longitud deberá estar comprendida entre 4 y 20 caracteres, que al igual que la contraseña del usuario, distingue entre mayúsculas y minúsculas.
A continuación muestro una función genérica y segura para crear nuevas cuentas de usuario utilizando ADO .NET, donde únicamente deberá de pasar un objeto OleDbConnection previamente abierto, así como el nombre del usuario y el identificador personal (PID) de la cuenta, siendo opcional la contraseña y el grupo de trabajo al que inicialmente será adscrito el usuario. Asimismo, la función tendrá en cuenta si los parámetros pasados cumplen con la longitud adecuada para establecer el nombre, el PID del usuario y la contraseña del mismo:
Private
Function CreateUser(ByVal
cnn As OleDb.OleDbConnection, _
ByVal userName
As String,
_
ByVal userPID
As String, _
Optional
ByVal userPwd As
String = "", _
Optional
ByVal groupName As
String = "")
As Boolean
' Si no se ha especificado un
objeto OleDbConnection,
' o éste se encuentra cerrado, abandonamos la función
'
If cnn
Is Nothing
Or cnn.State = ConnectionState.Closed
Then
MessageBox.Show("No hay ninguna
conexión abierta.", _
"Crear cuenta de usuario", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Return
False
End
If
' Validamos si el nombre del
usuario y la contraseña, cumplen la longitud requerida
'
If Len(userName) =
0 Or Len(userName) > 20
Or Len(userPwd) > 20
Then
MessageBox.Show("El nombre de la
cuenta, o la contraseña, " & _
"debe estar comprendido entre 1 y 20 caracteres alfanuméricos.", _
"Crear cuenta de usuario", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Return
False
End
If
'
If Len(userPID) < 4
Or Len(userPID) > 20
Then
MessageBox.Show("El identificador
personal debe estar comprendido " & _
"entre 4 y 20 caracteres alfanuméricos.", _
"Crear cuenta de usuario", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Return
False
End
If
' Creamos un nuevo objeto
OleDbCommand
Dim cmd
As New
OleDb.OleDbCommand()
Try
' Creamos
la cuenta de usuario
With
cmd
.Connection =
cnn
.CommandText
= "CREATE USER [" & userName & _
"] [" & userPwd & _
"] [" & userPID & "]"
.CommandType
= CommandType.Text
' Ejecutamos
el comando
.ExecuteNonQuery()
End
With
' Añadimos
al usuario al grupo de trabajo especificado
If
(groupName <> "") Then
With cmd
.CommandText = "ADD USER [" & userName & _
"] TO [" & groupName & "]"
' Ejecutamos el comando
.ExecuteNonQuery()
End With
End
If
Return
True
Catch ex
As Exception
' Se
produjo una excepción
MessageBox.Show(ex.Message, _
"Crear cuenta usuario", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Return
False
Finally
cmd.Dispose()
cmd =
Nothing
End
Try
End Function
Obsérvese que los parámetros cuenta de usuario, contraseña y PID de usuario deben estar separador al menos por un espacio en blanco. Si alguno de los tres parámetros contiene espacios en blanco, éstos deberán ir entre corchetes:
' Creamos la cuenta de usuario
cmd.CommandText = "CREATE USER [Enrique Martínez] [Contraseña] [PID
Enrique]"
La instrucción CREATE USER nos permite añadir varias cuentas de usuarios de una sola vez. Para ello deberemos de separar con una coma los distintos nombres de cuentas:
' Creamos dos nuevas cuentas de
usuario
cmd.CommandText = "CREATE USER User1 Contraseña1 PID_User1, User2
Contraseña2 PID_User2"
Antes de llamar a la función, necesitará establecer una conexión con el origen de datos:
Dim cnn
As New
OleDb.OleDbConnection()
Dim bln As
Boolean
' Abrimos la conexión especificando únicamente la
' ruta del archivo de información de grupos de trabajo
'
cnn.ConnectionString = _
"Provider = Microsoft.Jet.OLEDB.4.0;" & _
"Data Source = C:\Mis documentos\System.mdw;" & _
"Jet OLEDB:System Database = C:\Mis documentos\System.mdw;" &
_
"User Id = Admin;" & _
"Password="
Try
cnn.Open()
bln = CreateUser(cnn, "Nombre Usuario", "PIDUsuario",
"contraseña", "Users")
' Cerramos la conexión
cnn.Close()
If bln =
True Then
MessageBox.Show("Se ha creado con
éxito la cuenta de usuario.", _
"Crear cuenta de usuario", _
MessageBoxButtons.OK, _
MessageBoxIcon.Information)
End
If
Catch ex As
Exception
' Se produjo una excepción
MessageBox.Show(ex.Message, _
"Crear cuenta de usuario", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Finally
cnn.Dispose()
cnn = Nothing
End Try
NOTA: El lector habrá observado que en la cadena de conexión se ha establecido, como valor de la propiedad Data Source, el nombre del archivo de información de grupo de trabajo. La razón de su utilización es para indicar la indiferencia existente entre utilizar el nombre de una base de datos o el del archivo de información, como valor de la propiedad Data Source.
Para eliminar cuentas de usuario, deberá ejecutar la instrucción DROP USER del lenguaje SQL del motor Microsoft Jet 4.0. Una vez que tenga un objeto OleDbConnection abierto, procederá a configurar y ejecutar el objeto OleDbCommand de la siguiente manera:
With cmd
.Connection = cnn
.CommandText = "DROP USER [Nombre Usuario]"
.CommandType = CommandType.Text
.ExecuteNonQuery()
End With
Es recomendable incluir siempre el nombre de la cuenta entre corchetes para prevenir el error que se pueda producir en el supuesto de que el nombre de la cuenta incluya espacios en blanco.
Al igual que ocurría con la instrucción CREATE USER, mediante la instrucción DROP USER también podemos eliminar de una vez varias cuentas de usuarios, siempre y cuando estén separadas por una coma:
' Eliminamos las cuentas de
grupo especificadas
cmd.CommandText = "DROP USERS User1, User2"
Una vez creada una cuenta de usuario, puede ser que nos interese añadirla a un grupo de trabajo nuevo, o bien, eliminar definitivamente la cuenta de un grupo específico. Para ello, únicamente bastará con ejecutar las correspondientes instrucciones SQL: ADD USER (para añadir un usuario a un grupo) y DROP USER (para eliminar una cuenta de usuario de un grupo de trabajo).
' Añadir una cuenta de usuario a
un grupo
With cmd
.Connection = cnn
.CommandText = "ADD USER [Nombre Usuario] TO [Nombre Grupo]"
.CommandType = CommandType.Text
.ExecuteNonQuery()
End With
En el siguiente ejemplo se eliminará una cuenta de usuario de un grupo mediante la instrucción DROP USER. Observe que en este supuesto, hay que especificar el grupo de trabajo mediante la palabra clave FROM, la cual no se especificará si nuestra intención es eliminar definitivamente la cuenta de usuario del archivo de información de grupos de trabajo:
' Eliminar una cuenta de usuario
de un grupo
With cmd
.Connection = cnn
.CommandText = "DROP USER [Nombre Usuario] FROM [Nombre
Grupo]"
.CommandType = CommandType.Text
.ExecuteNonQuery()
End With
Otros enlaces de interés:
Cómo crear un nuevo archivo de información de grupos de trabajo para Microsoft Access
Cómo crear y eliminar grupos de trabajo para Microsoft Access
Enrique Martínez Montejo - 2005
NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.
NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.