2011-07-06 11 views
6

Quiero crear dos usuarios en mi base de datos de prueba MySQL, uno con acceso de solo lectura a tablas relevantes para generar informes, etc., el otro con acceso de lectura-escritura a las mismas tablas. Esto es para probar un subsistema que normalmente se conecta con un usuario de solo lectura pero cambia a un usuario de lectura y escritura para ciertas tareas. Creé el usuario de lectura y escritura con los privilegios correctos, y ahora necesito una versión de solo lectura del mismo usuario.MySQL copiar un usuario

Prefiero no crear la versión de solo lectura desde el principio ya que tuve que establecer muchos privilegios, lo cual fue bastante laborioso. ¿Hay alguna forma de que pueda crear un nuevo usuario basado en un usuario existente y luego eliminar los privilegios INSERT/UPDATE/DELETE del nuevo usuario? Algo como CREATE USER 'user2' LIKE 'user1' o similar? No pude encontrarlo en los documentos de MySQL si es posible hacer esto.

Respuesta

4

Encontré dos opciones.

Primero si es usuario de Windows, puede utilizar el Administrador de MySql. http://dev.mysql.com/doc/administrator/en/mysql-administrator-user-administration-user-accounts.html

segundo puede utilizar mysquserclone comando desde Mysql Utilidades: http://wb.mysql.com/utilities/man/mysqluserclone.html

Buena suerte.

+0

Fui a descargar el Administrador pero según MySQL.com ha dejado de desarrollarse. ¿Workbench admite esa funcionalidad en su lugar? – GordonM

+0

Ambos enlaces están muertos. – halloei

7

¿Qué le parece insertar en otra tabla, actualizar columnas? Algo así como:

CREATE TABLE user_tmp LIKE user; 
INSERT INTO user_tmp SELECT * FROM user WHERE host ='localhost' AND USER ='root'; 
UPDATE user_tmp SET user = 'readonlyuser', Insert_priv = 'N', Update_priv = 'N', 
    Delete_priv = 'N', /* TODO: ADAPT TO YOUR SUITS */ LIMIT 1; 
INSERT INTO user select * FROM user_tmp; 
DROP TABLE user_tmp; 
+0

¡Gracias! Estaba buscando una forma de agregar por lotes en algunos usuarios de localhost, y esto hizo que fuera más fácil copiar el% de usuarios con sus permisos y todo. +1 –

+1

Buena solución, pero ten en cuenta que no debes actualizar estas tablas. De http://dev.mysql.com/doc/refman/5.7/en/grant-tables.html: «La modificación directa de las tablas de concesión utilizando instrucciones como INSERTAR, ACTUALIZAR o ELIMINAR se desaconseja y se realiza por su cuenta riesgo. El servidor puede ignorar las filas que aparezcan mal formadas como resultado de tales modificaciones. » De todos modos, necesita un PRIVILEGIOS DE DESCARGA después de eso: « Al inicio, y en el tiempo de ejecución cuando se ejecuta FLUSH PRIVILEGES, el servidor verifica las filas de la tabla de usuarios. » –

+0

También piense en clonar las tablas de privilegios específicos (tables_priv, columns_priv, procs_priv, proxies_priv) –

Cuestiones relacionadas