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

Indice de Ejemplos de ADO .NET


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.