Hvis vi taler om to databaser på samme server:ja, en lagret procedure kan få adgang til en anden database. Du skal sikre dig, at den bruger, under hvis privilegier proceduren køres, har de nødvendige rettigheder på hver database.
Antag for eksempel, at du har to databaser på den samme server, mydb1 og mydb2 , og at hver indeholder en tabel med navnet messages med samme struktur. Antag, at du vil tilføje en lagret procedure til mydb2 der tømmer messages tabel i mydb2 og kopierer indholdet af messages tabel i mydb1 . Du kan gøre dette:
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
Se, hvordan jeg fuldt ud har kvalificeret tabellerne med de databaser, de tilhører. Faktisk kan du argumentere for, at jeg er overivrig her, fordi vi specificerede, at denne lagrede procedure hører hjemme i mydb2 . Jeg behøver ikke tilføje kvalifikation. Hvis den lagrede procedure var i mydb2 .mydb1 database, ville jeg have brug for disse kvalifikationer, men omvendt ville jeg ikke have brug for hvor det vises.mydb1 .
For at kunne køre denne procedure (muligvis for at kunne definere den?), skal jeg sørge for, at min bruger har DELETE og INSERT privilegier på mydb2 , og også SELECT privilegier på mydb1 .
Databaser på forskellige servere lyder noget mere kompliceret.