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

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

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

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

  3. Администратор имеет собственную базу данных администратора и 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...