Jeśli mówimy o dwóch bazach danych na tym samym serwerze:tak, procedura składowana może uzyskać dostęp do innej bazy danych. Musisz upewnić się, że użytkownik, z którego uprawnień jest uruchamiana procedura, ma niezbędne uprawnienia w każdej bazie danych.
Załóżmy na przykład, że masz dwie bazy danych na tym samym serwerze, mydb1
i mydb2
i że każda zawiera tabelę o nazwie messages
o tej samej strukturze. Załóżmy, że chcesz dodać procedurę składowaną do mydb2
który opróżnia messages
tabela w mydb2
i kopiuje zawartość messages
tabela w mydb1
. Możesz to zrobić:
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
Zobacz, jak w pełni zakwalifikowałem tabele z bazami danych, do których należą. W rzeczywistości można argumentować, że jestem tutaj nadgorliwy, ponieważ określiliśmy, że ta procedura składowana będzie należeć do mydb2
. Nie muszę dodawać
kwalifikator. Jeśli procedura składowana znajdowała się w mydb2
.mydb1
bazy danych, potrzebowałbym tych kwalifikatorów, ale odwrotnie nie potrzebowałbym
gdzie się pojawia.mydb1
.
Aby móc uruchomić tę procedurę (być może aby móc ją zdefiniować?), muszę się upewnić, że mój użytkownik ma DELETE
i INSERT
uprawnienia do mydb2
, a także SELECT
uprawnienia do mydb1
.
Bazy danych na różnych serwerach wydają się bardziej skomplikowane.