У меня есть проект Yii2, который управляет некоторым набором баз данных. Он имеет одно базовое соединение с базой данных, где я храню данные аутентификации пользователей, а второе соединение указывает на базу данных, автоматически создаваемую для каждого пользователя.
Я должен создавать базы данных программно; Итак, у меня есть пользователь project
который имеет глобальную привилегию гранта и групповые привилегии на project\_%
. *. Это то, чем я занимаюсь:
$queries = [
"CREATE DATABASE ".$dbname,
"FLUSH PRIVILEGES",
"CREATE USER '{$dbuser}'@'localhost' IDENTIFIED BY '{$dbpass}'",
"GRANT ALL PRIVILEGES ON {$dbname}.* TO '{$dbuser}'@'localhost'"];
foreach($queries as $q) $application->db->createCommand($q)->execute();
$dbname is 'project_'.randomString(8).
Я дважды проверил все project
привилегии, проверено mysql
,user
а также information_scheme
У меня также есть грантируемые привилегии и опция предоставления, но все равно появляется ошибка доступа:
SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1044 Отказано в доступе для пользователя ‘project’ @ ‘localhost’ к базе данных ‘project_sck6jdyb’
Выполнение SQL было: ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА project_sck6jdyb. * TO ‘pu_sck6jDyB’ @ ‘localhost’.
MySQL version is 5.6.21
работает под XAMPP
Windows. Это ошибка или я что-то делаю не так?
Обновить: SHOW GRANTS for project@localhost;
GRANT INSERT, CREATE, DROP, RELOAD, INDEX, ALTER, SUPER, CREATE USER ON
*.*
TO ‘project’ @ ‘localhost’, ОПРЕДЕЛЯЕМЫЙ ПАРОЛЕМ * * [secret] ‘С ГРАНТ-ВАРИАНТОМПРЕДОСТАВЛЯТЬ ВСЕ ПРИВИЛЕГИИ НА
project
. * TO ‘project’ @ ‘localhost’ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА
project\_%
. * TO ‘project’ @ ‘localhost’ С ГРАНТОВЫМ ВАРИАНТОМ
Чтобы предоставить привилегии, у вас должна быть привилегия GRANT_OPTION, а также у вас должна быть привилегия, которую вы хотите предоставить. Из вашего поста у вас есть следующие привилегии: INSERT, CREATE, DROP, RELOAD, INDEX, ALTER, SUPER, CREATE USER
,
Попробуйте предоставить только те привилегии, которые у вас есть. Я ожидаю, что это будет работать.
Других решений пока нет …