Se parliamo di due database sullo stesso server:sì, una procedura memorizzata può accedere a un altro database. Devi assicurarti che l'utente con i cui privilegi viene eseguita la procedura disponga dei privilegi necessari su ciascun database.
Ad esempio, supponiamo di avere due database sullo stesso server, mydb1 e mydb2 e che ciascuno contiene una tabella denominata messages con la stessa struttura. Supponiamo di voler aggiungere una stored procedure a mydb2 che svuota i messages tabella in mydb2 e copia il contenuto dei messages tabella in mydb1 . Potresti farlo:
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
Guarda come ho qualificato completamente le tabelle con i database a cui appartengono. In effetti potresti sostenere che sono troppo zelante qui, perché abbiamo specificato che questa procedura memorizzata apparterrà a mydb2 . Non ho bisogno di aggiungere il qualificatore. Se la procedura memorizzata fosse in mydb2 .mydb1 database, avrei bisogno di quei qualificatori, ma al contrario non avrei bisogno del dove appare.mydb1 .
Per poter eseguire questa procedura (eventualmente per poterla definire?), devo assicurarmi che il mio utente abbia DELETE e INSERT privilegi su mydb2 , e anche SELECT privilegi su mydb1 .
I database su server diversi sembrano piuttosto più complicati.