Me pregunto si los procedimientos almacenados de MySQL pueden funcionar con dos bases de datos diferentes en la misma máquina. ¿Qué tal si están en servidores diferentes?¿Puede un procedimiento almacenado trabajar con dos bases de datos diferentes? ¿Qué tal dos servidores?
Respuesta
Si hablamos de dos bases de datos en el mismo servidor: sí, un procedimiento almacenado puede acceder a otra base de datos. Debe asegurarse de que el usuario bajo cuyos privilegios se está ejecutando el procedimiento tenga los privilegios necesarios en cada base de datos.
Por ejemplo, supongamos que tiene dos bases de datos en el mismo servidor, mydb1
y mydb2
, y que cada una contiene una tabla denominada messages
con la misma estructura. Supongamos que desea agregar un procedimiento almacenado al mydb2
que vacía la tabla messages
en mydb2
y copia el contenido de la tabla messages
en mydb1
. Puede hacer esto:
CREATE PROCEDURE `SynchroniseMessages`()
LANGUAGE SQL
NOT DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
BEGIN
DELETE FROM `mydb2`.`messages`;
INSERT INTO
`mydb2`.`messages`
SELECT * FROM `mydb1`.`messages`;
END
Vea cómo he calificado completamente las tablas con las bases de datos a las que pertenecen. De hecho, podría argumentar que estoy siendo demasiado celoso aquí, porque especificamos que este procedimiento almacenado pertenecerá a mydb2
. No necesito agregar el
calificador. Si el procedimiento almacenado estuviera en la base de datos mydb2
.mydb1
, necesitaría esos calificadores, pero a la inversa no necesitaría el
donde aparece.mydb1
.
Con el fin de ser capaz de ejecutar este procedimiento (posiblemente con el fin de ser capaz de definirlo?), Que había necesidad de asegurarse de que mi usuario tiene privilegios DELETE
y INSERT
en mydb2
, y también SELECT
privilegios para mydb1
.
Bases de datos en diferentes servidores suena bastante más complicado.
En mi humilde opinión, puede trabajar con 2 bases de datos en un servidor, pero solo si tienen los mismos datos de inicio de sesión. No es posible en 2 servidores diferentes.
El procedimiento almacenado se ejecuta en una conexión de base de datos. Todas las bases de datos a las que tiene acceso el inicio de sesión de la conexión están disponibles en el procedimiento almacenado.
Simplemente use la notación de nombre de base de datos.nombre de tabla. Bases de datos remotas: no sé de ninguna manera en MySQL. Es posible en MS SQL Server.
Usted puede utilizar también bases de datos diferentes en diferentes servidores, pero es necesario vincularlos y utilizar una misma cuenta (por ejemplo, una cuenta de directorio activo) para los dos para conectar
- 1. Consultar datos uniendo dos tablas en dos bases de datos en servidores diferentes
- 2. Comparar dos versiones de un procedimiento almacenado
- 3. ¿Cómo copio o importo esquemas de Oracle entre dos bases de datos diferentes en servidores diferentes?
- 4. ¿Tablas de dos bases de datos diferentes en un DBML?
- 5. Sincronización entre dos bases de datos
- 6. ¿Puede el cliente socket.io conectarse a dos servidores/puertos diferentes?
- 7. ¿ActiveRecord habla con dos bases de datos?
- 8. Seleccionar dos o varias tablas de bases de datos diferentes
- 9. Pasando la tabla Valor del parámetro para el procedimiento almacenado en diferentes bases de datos
- 10. Consultar dos bases de datos con Oracle SQL Developer
- 11. mysql sincronización de dos tablas de 2 bases de datos
- 12. ¿Cómo comparar dos bases de datos?
- 13. Cómo llévese dos valor de retorno de Oracle procedimiento almacenado
- 14. Conéctese a dos bases de datos
- 15. ¿Comparar estructuras de dos bases de datos?
- 16. Comparar dos bases de datos SQL
- 17. Uso de dos bases de datos diferentes al mismo tiempo con Entity Framework
- 18. Datos básicos: ¿NSFetchedResultsController puede recuperar dos entidades diferentes?
- 19. Necesito ayuda para trabajar con bases de datos en C#
- 20. procedimiento almacenado con resultados condicionales
- 21. Referencia dos bases de datos con conexión en java
- 22. ¿Cómo conectar dos servidores node.js con websockets?
- 23. ¿Cómo se accede a dos bases de datos en Grails
- 24. Cómo llamar a un procedimiento almacenado desde otro procedimiento almacenado?
- 25. Usar la base de datos dentro de un procedimiento almacenado
- 26. ¿Cómo puedo encontrar las diferencias entre dos bases de datos?
- 27. Agregar relación de clave externa entre dos bases de datos
- 28. MySQL: se une a bases de datos en diferentes servidores ¿Utiliza Python?
- 29. Forma más rápida fusionar dos bases de datos SQLITE
- 30. Sincronizar el esquema de dos bases de datos en MySQL
lo que si quiero un usuario ** * * para poder invocar un procedimiento que manipule la base de datos ** b ** pero no quiero que el usuario ** a ** tenga esos permisos en la base de datos ** b ** ... por ejemplo una eliminación controlada: I wouldn No permita que el usuario ** a ** ejecute declaraciones de borrado arbitrarias en la base de datos ** b **, pero quizás quiera que pueda eliminar determinada información determinada dentro del procedimiento almacenado, como un caché. –
@santiago arizti, según tengo entendido, el comportamiento que describes ya está conferido por la cláusula 'SQL SECURITY DEFINER'. – Hammerite
interesante, veamos ... –