2012-04-20 37 views
15

Esta pregunta surge por curiosidad. Busqué en google esto pero no entendí nada.sql conexión abierta en modo de solo lectura

Supongamos que un usuario tiene acceso completo de lectura/escritura a la base de datos MySQL. Me pregunto, ¿hay alguna forma (algún parámetro en la cadena de conexión) para conectar a la base de datos con el mismo nombre de usuario y contraseña en modo de solo lectura?

Quiero sin cambiando los permisos de este usuario porque el mismo usuario también puede requerir permiso de escritura en otro momento. Esto sería útil (si es posible) para evitar modificaciones accidentales en la base de datos.

+0

Consulte las preguntas relacionadas. http://stackoverflow.com/questions/654656/odbc-5-1-connection-string-for-mysql-with-read-only-access http://stackoverflow.com/questions/10122745/mvc3-read-only-mysql-connection-string – hgulyan

+1

Según ellos, no hay forma de especificar el acceso de solo lectura a través de la cadena de conexión. En realidad, debe crear usuarios sql con permisos de solo lectura o crear permisos en la lógica de negocios de su software. – hgulyan

Respuesta

4

La mejor solución aquí es crear otra cuenta en el servidor mysql con permisos de solo lectura, y conectarse usando eso.

+0

Lo sé. Pero me preguntaba si hay alguna opción sin esto? Gracias. – gtiwari333

+0

Lamentablemente, no. Consideré hacer algo inteligente como bloquear inmediatamente todas las tablas en su base de datos para leer, pero (a) eso causaría una pesadilla por concurrencia y (b) es fácil romper maliciosamente si DESBLOQUEA TABLAS, y (c) le impide de usar el bloqueo en su consulta (aunque una sesión de solo lectura probablemente no sea muy probable que la use de todos modos).) Usted sabe más sobre el sistema objetivo que nosotros, de modo que si LOCK TABLES tablename READ funcionará para usted, hurra, de lo contrario sí, lo mejor y ~ correcto ~ que hacer es tener dos usuarios, y uno de ellos es de solo lectura. –

11

La respuesta a su pregunta es

No, no hay manera de especificar acceso de sólo lectura en la cadena de conexión.

Las alternativas son

1. Crear usuario SQL con permiso de lectura

MVC3 Read-Only MySql Connection String

2. crear vistas o procedimientos almacenados con permisos lógica de comprobación en ellos

MS SQL Grant permission to only a view

MySQL Grant a user permission to only view a mysql view

3. Implementar capa de permisos en su lógica de negocio

buena suerte!

+0

En el elemento 3, el enlace que ha proporcionado es para el servidor MS SQL. No estoy seguro de cómo asegurar el acceso similar en MySQL es de solo lectura. –

+1

@GeorgeBailey ¿Quiere decir en el punto 2 sobre la concesión de permisos en el nivel de vista? Gracias por la captura. Agregué un enlace para MySQL, parece que la sintaxis es similar. ¡Gracias de nuevo! – hgulyan

0

Dependiendo de su caso de uso y del control que tenga, podría hacer que el código invoque "establecer transacción de solo lectura" inmediatamente después de conectarse, o use el parámetro --init-command en connect. Esto funcionó para un caso de uso de prueba que tenemos,

Aquí está el documento de transacción establecido: https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html, del mismo modo también puede establecerlo como una variable de sesión si eso hace una diferencia https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_transaction_read_only.

Cuestiones relacionadas