Как я могу позволить пользователю создать базу данных с помощью хранимой процедуры MySQL

Мне нужно настроить «учетную запись администратора» в моем приложении с ограниченными привилегиями «выполнить». Моя логика такова:

  1. У меня есть несколько пользователей, один из которых жестко задан в качестве основного администратора приложения (мой клиент).

  2. Существует несколько пользователей, каждый из которых может войти в одну из множества баз данных уровня клиента (не одновременно) в системе. Каждому из этих пользователей автоматически назначается одна и та же предварительно созданная (standard_client) учетная запись пользователя mysql для основных операций CRUD в любой базе данных уровня клиента.

  3. Администратор имеет свою собственную базу данных администратора и учетную запись пользователя mysql с привилегией ‘execute’.

То, что я хочу сделать, это дать администратору возможность создать новую базу данных и назначить учетную запись пользователя standard_client mysql для этой новой базы данных. Я не хочу раскрывать фальсификаторы администратора БД через мое приложение к нему. Итак, я написал хранимую процедуру, которая создаст стандартную предварительно разработанную схему базы данных, и я хочу, чтобы администратор просто выполнил эту процедуру. Кроме того, он должен иметь возможность получить обзор всего приложения, то есть просмотреть все клиентские базы данных в приложении и просмотреть пользователей, назначенных для каждой базы данных и т. Д.

Все учетные записи пользователей в порядке, базы данных и хранимая процедура — все в порядке. Но, дав администратору привилегию на выполнение в тестировании от 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)

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector