none
poner contraseña a una base de datos de acess 2007

    Pregunta

  • estoy trabajando en mi proyecto de vb.net 2008 , y access 2007 pero coupo ponerle contraseña a mi base de datos , como hago ?

    que codigo ocupo o que deberia hacer en la base de datos para ponerle contraseña

     

    domingo, 29 de mayo de 2011 5:14

Respuestas

  • "jochepe11" preguntó:
     
    > estoy trabajando en mi proyecto de vb.net 2008 , y access 2007 pero
    >  coupo ponerle contraseña a mi base de datos , como hago ?
    >
    > que codigo ocupo o que deberia hacer en la base de datos para ponerle contraseña
     
    Hola:
     
    Si la contraseña no se va a modificar durante la ejecución de tu aplicación, lo más sencillo es que establezcas la contraseña de la base de datos desde la propia interfaz de usuario de Microsoft Access. Pero si deseas que el usuario establezca la contraseña que le venga en gana, o modifique o elimine aquella que pudiera existir, tienes que ejecutar la siguiente consulta SQL del lenguaje de definición de datos de SQL:
     
        ALTER DATABASE PASSWORD [nueva_Contraseña] [contraseña_Actual]
     
    El siguiente procedimiento genérico se ocupa de establecer, modificar o eliminar la contraseña de una base de datos de Access, da igual que sea de Access 2010, 2007 u otra versión inferior, para la que exista un proveedor OleDb apropiado:
     
    Imports System.Data.OleDb

        ''' <summary>
        ''' Establece, modifica o elimina una contraseña de una
        ''' base de datos Microsoft Access.
        ''' </summary>
        ''' <author>Enrique Martínez Montejo - 2011</author>
        ''' <param name="connString">Cadena de conexión con la base de datos.</param>
        ''' <param name="newPwd">Nueva contraseña. Una cadena de longitud
        ''' cero para eliminar la contraseña actual.</param>
        ''' <remarks></remarks>
        Private Sub ChangePassword(ByVal connString As String, _
                                   ByVal newPwd As String)

            If (String.IsNullOrEmpty(connString)) Then _
                Throw New ArgumentNullException("connString")

            ' La longitud de la nueva contraseña no puede exceder de 20 caracteres.
            '
            If (newPwd.Length > 20) Then _
                Throw New ArgumentException("La longitud de la nueva contraseña no puede " & _
                                            "exceder de 20 caracteres.", "newPwd")
            Try
                ' Administramos el contenido de la cadena de conexión.
                '
                Dim sb As New OleDbConnectionStringBuilder(connString)

                Dim provider As String = sb.Provider
                If (provider = String.Empty) Then _
                    Throw New ArgumentException("No se ha especificado el proveedor de datos.")

                Dim dataSource As String = sb.DataSource
                If (dataSource = String.Empty) Then _
                    Throw New ArgumentException("No se ha especificado ninguna base de datos.")

                ' Compruebo si se ha especificado el parámetro Mode.
                '
                Dim isMode As Boolean = sb.ContainsKey("Mode")
                If (Not (isMode)) Then
                    ' La base de datos hay que abrirla de manera exclusiva.
                    '
                    sb.Add("Mode", "12")

                Else
                    sb.Item("Mode") = "12"

                End If

                ' Busco el parámetro 'Jet OLEDB:Database Password' para conocer
                ' la contraseña actual de la base de datos.
                '
                Dim oldPassword As String = "NULL"
                If (sb.ContainsKey("Jet OLEDB:Database Password")) Then _
                    oldPassword = Convert.ToString(sb.Item("Jet OLEDB:Database Password"))

                ' Verifico los valores de la antigua y nueva contraseña,
                ' colocando corchetes si los valores son distintos de NULL
                '
                If (oldPassword <> "NULL") Then oldPassword = "[" & oldPassword & "]"
                If (newPwd <> "NULL") Then newPwd = "[" & newPwd & "]"

                Using cnn As New OleDbConnection(sb.ConnectionString)

                    Dim cmd As OleDbCommand = cnn.CreateCommand()

                    ' Construimos la consulta SQL para cambiar la contraseña.
                    '
                    cmd.CommandText = "ALTER DATABASE PASSWORD " & _
                                      newPwd & " " & oldPassword

                    cnn.Open()

                    cmd.ExecuteNonQuery()

                End Using

            Catch ex As OleDbException
                ' Como la descripción de los errores del proveedor OleDb son
                ' bastantes descriptivos, decido no devolverlos a fin de no
                ' proporcionar datos al usuario de la aplicación sobre la
                ' ruta de la base de datos, o si es o no correcta la
                ' contraseña introducida.
                '
                Dim msg As String = "No se ha podido cambiar la contraseña. " & _
                                    "Verifique que el archivo no esté en uso y que los valores " & _
                                    "introducidos en la cadena de conexión sean correctos."
                Throw New ApplicationException(msg)

            Catch ex As Exception
                ' Devuelvo la excepción al procedimiento llamador
                Throw

            End Try

        End Sub
     
    Te advierto que para establecer una contraseña, o para modificar o eliminarla, la base de datos tiene que estar abierta en MODO EXCLUSIVO, cuestión ésta que se ocupa el procedimiento presentado.
     
    Cuando desees establecer una nueva contraseña a tu base de Access 2007, ejecutarías lo siguiente:
     
            Try
                Dim connString As String = _
                    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Data Source=C:\Mis documentos\Database1.accdb;"
     
                ChangePassword(connString, "contraseña")
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            End Try

    Para modificar una contraseña ya existente, ejecutarías:
     
            Try
                Dim connString As String = _
                    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Data Source=C:\Mis documentos\Database1.accdb;" & _
                    "Jet OLEDB:Database Password=contraseña_actual"
     
                ChangePassword(connString, "nueva_contraseña")
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            End Try

    Y por último, para eliminar la contraseña existente, ejecutarías:
     
            Try
                Dim connString As String = _
                    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Data Source=C:\Mis documentos\Database1.accdb;" & _
                    "Jet OLEDB:Database Password=contraseña_actual"
     
                ' Indicamos una cadena de longitud cero
                ChangePassword(connString, "")

                ' O bien el valor NULL
                ' ChangePassword(connString, "NULL")
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            End Try
     
    Procura que la contraseña no tenga más de 20 caracteres de longitud, a fin de evitar la excepción que con toda seguridad se producirá si supera la longitud mencionada.
     
    Un saludo
     
     

    Enrique Martínez
      [MS MVP - VB]




    domingo, 29 de mayo de 2011 8:09
  • hola

    pero la contraseña quieres ponersela desde codigo, o es desde el propio IDE del Ms Access ?

    porque por lo gneeral asignas una contraseña ya luego no la cambias tan seguido, sino que lo haces desde el propio Access y luego suas esta info en el connection string para lograr el acceso

    Microsoft Access Database: Encrypting your Database File

    en el link veras como definir un password para limnitar el acceso que luego puedes suar en el connection string

    para acceder a la info

    Connection strings for Access 2007

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Jet OLEDB:Database Password=MyDbPassword;

     

    Nota: al explicacion no es tan extensa como la aportada por Enrique pero por ahi el link aporta un poco visual para seguir los pasos

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 29 de mayo de 2011 13:19
  • "Leandro Tuttini" escribió:

    > pero la contraseña quieres ponersela desde codigo, o es
    > desde el propio IDE del Ms Access ?
    >
    > porque por lo gneeral asignas una contraseña ya luego no la
    > cambias tan seguido, sino que lo haces desde el propio Access
    > y luego suas esta info en el connection string para lograr
    > el acceso
    >
    > Microsoft Access Database: Encrypting your Database File

    Tú das por sentado que todo el mundo que participa en éste foro conoce el idioma de Shakespeare. ¿Tan difícil te resulta buscar enlaces en español, donde el usuario de habla hispana pueda leer el artículo sin problemas?

    Cifrar una base de datos utilizando una contraseña de base de datos

    Como podrás observar, un artículo escrito por Microsoft de Argentina. Yo me alegro mucho que domines el inglés a la perfección, pero debes de pensar en los demás usuarios de éste foro, que repito, es un FORO DE USUARIOS HISPANOHABLANTES.

    > Nota: al explicacion no es tan extensa como la aportada por
    > Enrique pero por ahi el link aporta un poco visual para
    > seguir los pasos

    ¿Qué pasa, Tuttini? ¿Que a la explicación que he dado, también le tenía que aportar "material visual"?

    Yo no es que haya dado una "explicación extensa"; me he limitado a explicar CÓMO SE ESTABLECE, CAMBIA O ELIMINA UNA CONTRASEÑA DE ACCESS DESDE UNA APLICACIÓN DE VISUAL BASIC .NET, porque como comprenderás, estamos en un foro de desarrollo, en éste caso, un foro de desarrollo del lenguaje Visual Basic .NET, y todo lo que se explique aquí se comprende que se va a ejecutar mediante código fuente de Visual Basic .NET.

    Lo que faltaría ahora es que a los usuarios le tengamos que dar una explicación de cómo cifrar una base de datos de Access 2007 desde la propia interfaz de usuario de Microsoft Office Access 2007. Para eso está la propia ayuda de Microsoft Office Access 2007, o los foros de Access.

    Pero, ¡claro! Conociéndote como ya te conozco, comprendo que aportes tu "granito de arena" a ésta conversación.

     


    Enrique Martínez
      [MS MVP - VB]



    domingo, 29 de mayo de 2011 16:10

Todas las respuestas

  • "jochepe11" preguntó:
     
    > estoy trabajando en mi proyecto de vb.net 2008 , y access 2007 pero
    >  coupo ponerle contraseña a mi base de datos , como hago ?
    >
    > que codigo ocupo o que deberia hacer en la base de datos para ponerle contraseña
     
    Hola:
     
    Si la contraseña no se va a modificar durante la ejecución de tu aplicación, lo más sencillo es que establezcas la contraseña de la base de datos desde la propia interfaz de usuario de Microsoft Access. Pero si deseas que el usuario establezca la contraseña que le venga en gana, o modifique o elimine aquella que pudiera existir, tienes que ejecutar la siguiente consulta SQL del lenguaje de definición de datos de SQL:
     
        ALTER DATABASE PASSWORD [nueva_Contraseña] [contraseña_Actual]
     
    El siguiente procedimiento genérico se ocupa de establecer, modificar o eliminar la contraseña de una base de datos de Access, da igual que sea de Access 2010, 2007 u otra versión inferior, para la que exista un proveedor OleDb apropiado:
     
    Imports System.Data.OleDb

        ''' <summary>
        ''' Establece, modifica o elimina una contraseña de una
        ''' base de datos Microsoft Access.
        ''' </summary>
        ''' <author>Enrique Martínez Montejo - 2011</author>
        ''' <param name="connString">Cadena de conexión con la base de datos.</param>
        ''' <param name="newPwd">Nueva contraseña. Una cadena de longitud
        ''' cero para eliminar la contraseña actual.</param>
        ''' <remarks></remarks>
        Private Sub ChangePassword(ByVal connString As String, _
                                   ByVal newPwd As String)

            If (String.IsNullOrEmpty(connString)) Then _
                Throw New ArgumentNullException("connString")

            ' La longitud de la nueva contraseña no puede exceder de 20 caracteres.
            '
            If (newPwd.Length > 20) Then _
                Throw New ArgumentException("La longitud de la nueva contraseña no puede " & _
                                            "exceder de 20 caracteres.", "newPwd")
            Try
                ' Administramos el contenido de la cadena de conexión.
                '
                Dim sb As New OleDbConnectionStringBuilder(connString)

                Dim provider As String = sb.Provider
                If (provider = String.Empty) Then _
                    Throw New ArgumentException("No se ha especificado el proveedor de datos.")

                Dim dataSource As String = sb.DataSource
                If (dataSource = String.Empty) Then _
                    Throw New ArgumentException("No se ha especificado ninguna base de datos.")

                ' Compruebo si se ha especificado el parámetro Mode.
                '
                Dim isMode As Boolean = sb.ContainsKey("Mode")
                If (Not (isMode)) Then
                    ' La base de datos hay que abrirla de manera exclusiva.
                    '
                    sb.Add("Mode", "12")

                Else
                    sb.Item("Mode") = "12"

                End If

                ' Busco el parámetro 'Jet OLEDB:Database Password' para conocer
                ' la contraseña actual de la base de datos.
                '
                Dim oldPassword As String = "NULL"
                If (sb.ContainsKey("Jet OLEDB:Database Password")) Then _
                    oldPassword = Convert.ToString(sb.Item("Jet OLEDB:Database Password"))

                ' Verifico los valores de la antigua y nueva contraseña,
                ' colocando corchetes si los valores son distintos de NULL
                '
                If (oldPassword <> "NULL") Then oldPassword = "[" & oldPassword & "]"
                If (newPwd <> "NULL") Then newPwd = "[" & newPwd & "]"

                Using cnn As New OleDbConnection(sb.ConnectionString)

                    Dim cmd As OleDbCommand = cnn.CreateCommand()

                    ' Construimos la consulta SQL para cambiar la contraseña.
                    '
                    cmd.CommandText = "ALTER DATABASE PASSWORD " & _
                                      newPwd & " " & oldPassword

                    cnn.Open()

                    cmd.ExecuteNonQuery()

                End Using

            Catch ex As OleDbException
                ' Como la descripción de los errores del proveedor OleDb son
                ' bastantes descriptivos, decido no devolverlos a fin de no
                ' proporcionar datos al usuario de la aplicación sobre la
                ' ruta de la base de datos, o si es o no correcta la
                ' contraseña introducida.
                '
                Dim msg As String = "No se ha podido cambiar la contraseña. " & _
                                    "Verifique que el archivo no esté en uso y que los valores " & _
                                    "introducidos en la cadena de conexión sean correctos."
                Throw New ApplicationException(msg)

            Catch ex As Exception
                ' Devuelvo la excepción al procedimiento llamador
                Throw

            End Try

        End Sub
     
    Te advierto que para establecer una contraseña, o para modificar o eliminarla, la base de datos tiene que estar abierta en MODO EXCLUSIVO, cuestión ésta que se ocupa el procedimiento presentado.
     
    Cuando desees establecer una nueva contraseña a tu base de Access 2007, ejecutarías lo siguiente:
     
            Try
                Dim connString As String = _
                    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Data Source=C:\Mis documentos\Database1.accdb;"
     
                ChangePassword(connString, "contraseña")
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            End Try

    Para modificar una contraseña ya existente, ejecutarías:
     
            Try
                Dim connString As String = _
                    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Data Source=C:\Mis documentos\Database1.accdb;" & _
                    "Jet OLEDB:Database Password=contraseña_actual"
     
                ChangePassword(connString, "nueva_contraseña")
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            End Try

    Y por último, para eliminar la contraseña existente, ejecutarías:
     
            Try
                Dim connString As String = _
                    "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                    "Data Source=C:\Mis documentos\Database1.accdb;" & _
                    "Jet OLEDB:Database Password=contraseña_actual"
     
                ' Indicamos una cadena de longitud cero
                ChangePassword(connString, "")

                ' O bien el valor NULL
                ' ChangePassword(connString, "NULL")
     
            Catch ex As Exception
                MessageBox.Show(ex.Message)
     
            End Try
     
    Procura que la contraseña no tenga más de 20 caracteres de longitud, a fin de evitar la excepción que con toda seguridad se producirá si supera la longitud mencionada.
     
    Un saludo
     
     

    Enrique Martínez
      [MS MVP - VB]




    domingo, 29 de mayo de 2011 8:09
  • hola

    pero la contraseña quieres ponersela desde codigo, o es desde el propio IDE del Ms Access ?

    porque por lo gneeral asignas una contraseña ya luego no la cambias tan seguido, sino que lo haces desde el propio Access y luego suas esta info en el connection string para lograr el acceso

    Microsoft Access Database: Encrypting your Database File

    en el link veras como definir un password para limnitar el acceso que luego puedes suar en el connection string

    para acceder a la info

    Connection strings for Access 2007

    Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Jet OLEDB:Database Password=MyDbPassword;

     

    Nota: al explicacion no es tan extensa como la aportada por Enrique pero por ahi el link aporta un poco visual para seguir los pasos

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    domingo, 29 de mayo de 2011 13:19
  • "Leandro Tuttini" escribió:

    > pero la contraseña quieres ponersela desde codigo, o es
    > desde el propio IDE del Ms Access ?
    >
    > porque por lo gneeral asignas una contraseña ya luego no la
    > cambias tan seguido, sino que lo haces desde el propio Access
    > y luego suas esta info en el connection string para lograr
    > el acceso
    >
    > Microsoft Access Database: Encrypting your Database File

    Tú das por sentado que todo el mundo que participa en éste foro conoce el idioma de Shakespeare. ¿Tan difícil te resulta buscar enlaces en español, donde el usuario de habla hispana pueda leer el artículo sin problemas?

    Cifrar una base de datos utilizando una contraseña de base de datos

    Como podrás observar, un artículo escrito por Microsoft de Argentina. Yo me alegro mucho que domines el inglés a la perfección, pero debes de pensar en los demás usuarios de éste foro, que repito, es un FORO DE USUARIOS HISPANOHABLANTES.

    > Nota: al explicacion no es tan extensa como la aportada por
    > Enrique pero por ahi el link aporta un poco visual para
    > seguir los pasos

    ¿Qué pasa, Tuttini? ¿Que a la explicación que he dado, también le tenía que aportar "material visual"?

    Yo no es que haya dado una "explicación extensa"; me he limitado a explicar CÓMO SE ESTABLECE, CAMBIA O ELIMINA UNA CONTRASEÑA DE ACCESS DESDE UNA APLICACIÓN DE VISUAL BASIC .NET, porque como comprenderás, estamos en un foro de desarrollo, en éste caso, un foro de desarrollo del lenguaje Visual Basic .NET, y todo lo que se explique aquí se comprende que se va a ejecutar mediante código fuente de Visual Basic .NET.

    Lo que faltaría ahora es que a los usuarios le tengamos que dar una explicación de cómo cifrar una base de datos de Access 2007 desde la propia interfaz de usuario de Microsoft Office Access 2007. Para eso está la propia ayuda de Microsoft Office Access 2007, o los foros de Access.

    Pero, ¡claro! Conociéndote como ya te conozco, comprendo que aportes tu "granito de arena" a ésta conversación.

     


    Enrique Martínez
      [MS MVP - VB]



    domingo, 29 de mayo de 2011 16:10