Мне нужно настроить «учетную запись администратора» в моем приложении с ограниченными привилегиями «выполнить».Моя логика такова:
У меня есть несколько пользователей, один из которых жестко задан в качестве основного администратора приложения (мой клиент).
Есть несколько пользователей, каждый из которых может войти в одну из многих баз данных уровня клиента (не одновременно) в системе.Каждому из этих пользователей автоматически назначается одна и та же предварительно созданная (standard_client) учетная запись пользователя mysql для основных операций CRUD в любой базе данных на уровне клиента.
Администратор имеет собственную базу данных администратора и mysql.учетная запись пользователя с привилегией 'execute'.
Что я хочу сделать, так это дать администратору возможность создать совершенно новую базу данных и назначить учетную запись пользователя mysql standard_client этой новой базе данных.Я не хочу раскрывать фальсификаторы администратора БД через мое приложение к нему.Итак, я написал хранимую процедуру, которая создаст стандартную предварительно разработанную схему базы данных, и я хочу, чтобы администратор просто выполнил эту процедуру.Кроме того, он должен иметь возможность получить обзор всего приложения, то есть просмотреть все клиентские базы данных в приложении и просмотреть пользователей, назначенных для каждой базы данных и т. Д. *
Все учетные записи пользователей настроены нормально, базы данных и сохраненные данныепроцедура, все ок.Но, дав администратору привилегию на выполнение в тестировании от phpMyAdmin (где была написана процедура), я не могу найти способ использовать входную переменную, которая будет содержать имя создаваемой новой базы данных.При тестировании переменная IN, даже если она окружена обратными чертами, интерпретируется как строковый литерал.Должен ли я создать всю процедуру из моего приложения с PHP?если да, могу ли я избежать обратных галочек или оставить их, предполагая, что я конкатенирую SQL, тогда $ new_db_name будет безопасно интерпретироваться, да ??
BEGIN
DROP DATABASE IF EXISTS `newDbName`;
CREATE DATABASE IF NOT EXISTS `newDbName` COLLATE 'utf8_general_ci';
END
My IN parameter is 'newDbName' varchar(80)