Pregunta

¿Cómo consigo que ms-access se conecte (a través de ODBC) a una base de datos ms-sql como un usuario diferente a su ID de Active Directory?

No quiero especificar una cuenta en la conexión ODBC, quiero hacerlo en el lado de acceso ms para ocultarla a mis usuarios.Hacerlo en la conexión ODBC me devolvería a la situación original que estoy tratando de evitar.

Sí, esto se relaciona con una pregunta anterior: http://www.stackoverflow.com/questions/50164/

¿Fue útil?

Solución

Creo que puedes hacer que esto funcione como quieres si usas un "Conexión ODBC SIN DSN"

Si es necesario, mantenga sus DSN de ODBC en las máquinas de sus usuarios mediante la autenticación de Windows.Ofrezca a sus usuarios acceso de solo lectura a su base de datos.(Si crean un nuevo archivo mdb y vinculan las tablas, solo podrán leer los datos).

Cree un inicio de sesión SQL que tenga permiso de lectura/escritura en su base de datos.

Escriba una rutina VBA que recorra sus tablas vinculadas y restablezca la conexión para usar su inicio de sesión SQL, pero asegúrese de usar la sintaxis "DSN-Less".

"ODBC;Driver={SQL Native Client};" &
       "Server=MyServerName;" & _
       "Database=myDatabaseName;" & _
       "Uid=myUsername;" & _
       "Pwd=myPassword"

Llame a esta rutina como parte de su código de inicio.

Un par de notas sobre este enfoque:

  • Access parece tener un problema con la información de conexión una vez que cambia de Lectura/Escritura a Solo lectura e intenta volver a Lectura/Escritura sin cerrar y volver a abrir el archivo de la base de datos (mde/mdb).Si puede cambiar esto una vez al inicio a Lectura/Escritura y no cambiarlo durante la sesión, esta solución debería funcionar.

  • Al utilizar un DSN: menos conexión, puede ocultar las credenciales del usuario en el código (suponiendo que les esté proporcionando un archivo mde, debería estar bien).Normalmente, codificar cadenas de conexión no es una buena idea, pero dado que se trata de una aplicación interna, debería aceptar este enfoque.

Otros consejos

Creo que tendrías que iniciar el proceso de MS Access con la cuenta que deseas usar para conectarte.Hay varias herramientas que le permiten hacer esto, como CPAU.Esta herramienta también te permitirá cifrar la contraseña.

Admitimos aquí que está utilizando una conexión ODBC a su base de datos con la Seguridad Integrada activada, por lo que no tiene/no quiere escribir un valor de nombre de usuario/contraseña en la cadena de conexión (que, en mi opinión, es la elección correcta).

En este caso, afortunadamente no existe ninguna posibilidad de "simular" a otro usuario al conectarse a los datos.¡Admita conmigo que poder hacer algo así sería un gran avance en la seguridad integrada!

Entendí por tu publicación anterior que querías que los usuarios pudieran actualizar los datos o no dependiendo de la interfaz de cliente que usaran.En mi opinión, la idea sería crear para cada tabla una vista vinculada "no actualizable".Digamos que para cada tabla llamada Table_Blablabla creas una vista (=consulta en Access) llamada View_Table_Blablabla ...).

Al utilizar Access, puede decidir en tiempo de ejecución si desea abrir la tabla actualizable o la vista de solo lectura.Esto se puede hacer, por ejemplo, en tiempo de ejecución, en el form_Open evento, estableciendo el origen del registro del formulario en la tabla o en la vista.

@Philippe
Supongo que estás usando la palabra admitir como aproximadamente equivalente a entender o quizás aceptar;a diferencia de lo contrario de denegar.

Entiendo las implicaciones de que todos los usuarios inicien sesión en la base de datos usando una identificación y contraseña (y almacenarlas en la aplicación).Para mí, eso es un riesgo menor que el problema al que me enfrento ahora.
@apagado

Algunos antecedentes más del problema:Tengo conexiones ODBC configuradas en cada una de las estaciones de trabajo de los usuarios utilizando la autenticación Windwos NT.La mayoría de las veces, los usuarios se conectan usando una configuración MDE para usar esa conexión ODBC; en este caso SIEMPRE tienen la capacidad de agregar/actualizar/eliminar datos.

El problema surge porque algunos de los usuarios tienen suficiente conocimiento sobre MS-Access como para crear un nuevo mdb y vincularlo al servidor MS-SQL.Luego pueden editar los datos directamente dentro de las tablas en lugar de pasar por la aplicación, que realiza una cierta cantidad de validación y control manual.Y ellos como haciendo esto, pero a veces lo estropean y me causan problemas.

Lo que esperaba hacer (con lo que acabo de experimentar) era actualizar los enlaces a la base de datos de esta manera para cada tabla (Nota:Cambié la conexión ODCB a la autenticación de SQL Server para este experimento y también agregué las cuentas al servidor SQL: solo lectura - que no puede recibir ninguna actualización, y leer escribir - que tiene todos los privilegios sobre la mesa).

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readonly;" & _
                "PWD=readonly_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

esto les impide editar, pero no puedo hacer que funcione una lectura y escritura posterior

myTable.Connect = _
                "ODBC;" & _
                "DATABASE=" & "MyTestDB" & ";" & _
                "UID=readwrite;" & _
                "PWD=readwrite_password;" & _
                "DSN=" & "MyTestDB" & ";"
myTable.RefreshLink

Parece que cualquier permiso con el que me conecte primero, se mantiene permanentemente.Si comencé con lectura y escritura y luego paso a solo lectura, la tabla permanece con los privilegios de lectura y escritura.

¿Por qué no utilizar la seguridad integrada/de Windows?Puede otorgar a un grupo de directorio activo los derechos que desea para los usuarios y luego agregar las cuentas de los usuarios a ese grupo.Creo que también puede usar la función de roles del servidor SQL además de esto para limitar la funcionalidad según la aplicación cliente que se esté utilizando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top