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.