2010-10-25 49 views

Respuesta

20

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 mydb2. calificador. Si el procedimiento almacenado estuviera en la base de datos mydb1, necesitaría esos calificadores, pero a la inversa no necesitaría el mydb1. donde aparece.

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.

+0

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é. –

+0

@santiago arizti, según tengo entendido, el comportamiento que describes ya está conferido por la cláusula 'SQL SECURITY DEFINER'. – Hammerite

+0

interesante, veamos ... –

0

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.

0

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.

1

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

Cuestiones relacionadas