Вы можете напрямую управлять таблицами прав в базе данных mysql
.
Таблица mysql.user
содержит универсальные права для пользователей (права доступа ко всем базам данных)
Таблица mysql.db
содержит права доступа длябаза данных
таблица mysql.table_priv
: права доступа для таблицы
Измените триггер на:
DELIMITER $$
CREATE TRIGGER bu_members BEFORE UPDATE ON members FOR EACH ROW
BEGIN
IF old.fname = "xyz" AND new.status = "b" THEN BEGIN
/*revoke select, update on mkdb.* from xyz;*/
UPDATE mysql.db SET
select_priv = 'N'
, update_priv = 'N'
WHERE mysql.db.user = 'xyz' AND mysql.db.db = 'mkdb';
END; END IF;
END $$
Обратите внимание, что изменения вступят в силу только после завершения текущей транзакции.
Это должно происходить вне триггера, как уже объяснил @Denis.
Предупреждение
Остерегайтесь того, что структура схемы mysql
может измениться (и имеетизменено в прошлом) .
Если это произойдет, ваш запрос может прерваться.
GRANT
/ REVOKE
не вызывайте эту проблему.
Используйте этот вид кода с осторожностью и проверьте, чтобы увидетьесли все работает, если вы обновляете сервер MySQL.