Существует ли способ создать новую базу данных MySQL, нового пользователя MySQL и дать новые полномочия пользователя на новой базе данных все использование PHP?
На РЕДАКТИРОВАНИЕ - нужно указать, это выполняется от 1 сервера до другого, таким образом, Сервер попытка установить DB/пользователя на Сервере B
у меня есть это:
$con = mysql_connect("REMOTE.IP.ADDRESS","root","pass");
mysql_query("CREATE DATABASE ".$db."",$con)or die(mysql_error());
mysql_query("GRANT ALL ON ".$db.".* to ".$user." identified by '".$dbpass."'",$con) or die(mysql_error());
но я получаю ошибку на запросе предоставления:
"Access denied for user 'root'@'MY.REMOTE.SERVER.HOST.NAME' to database 'dbname'"
Этот ответ редактировался несколько раз на основе новой информации, предоставленной OP
Действительно ли root разрешено подключаться к серверу с хоста, с которого вы подключаетесь? Если строка ошибки возвращает каноническое имя сервера, очень высока вероятность, что 'localhost' не указывает на 127.0.0.1:
«Доступ запрещен для пользователя (скрыт) к {{1 }} database 'dbname' "
Это должно отражать что-то вроде« Доступ запрещен для пользователя 'root' @ localhost '», а не имя сервера.
Попробуйте:
$con = mysql_connect("127.0.0.1","root","pass");
Изменить (после дополнительной информации в комментариях)
Если вы подключаетесь с совершенно другого хоста, вы должны сообщить MySQL пользователю @ remote_hostname_or_ip
разрешено connect и имеет соответствующие привилегии для создания базы данных и пользователей.
Вы можете сделать это довольно легко, используя phpmyadmin (на сервере MySQL) или запрос вроде:
CREATE USER 'root'@'192.168.1.1' IDENTIFIED BY PASSWORD 'secret';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'192.168.1.1' IDENTIFIED BY PASSWORD 'secret' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
Я бы посоветовал не называть этого пользователя «root», просто создайте пользователя со всеми необходимыми глобальными привилегиями. В этом примере я использовал 192.168.1.1, которое легко могло быть именем хоста, просто убедитесь, что DNS настроен правильно. Укажите хост, который соответствует в точности , как он отображается в журналах при подключении к удаленному серверу.
Вы также можете настроить пределы по своему вкусу. Дополнительную информацию о синтаксисе CREATE USER
можно найти здесь , GRANT
здесь .
Редактировать
При использовании MySQL 4 - CREATE не вариант. Вы должны просто использовать GRANT ( 4.1 Документы по управлению пользователями )
Редактировать
Если вы используете C-Panel, просто используйте API .Хотя да, у него есть свои причуды, его легче поддерживать, чем использовать специальные методы. Многие успешные приложения используют его без проблем. Как и любой другой API, вы должны быть в курсе изменений при его использовании.
Я считаю, что вам нужно будет создать соединение (с пользователем root
) с существующей базой данных (например, mysql
), а затем выполнить запрос на создание.
В этом примере вы не видите подключения к базе данных по очевидной причине: предполагается, что вы уже узнали, что любая база данных действие требует сначала подключения.
Так пишутся книги: вещи из предыдущих уроков опускаются в следующих. Или каждая глава будет в 2 раза больше, и вы никогда не дочитаете книгу.
так что да, вам нужно сначала подключиться к базе данных, используя mysql_connect ().
для создания пользователя вы можете использовать mysql GRANT query
, хотя я никогда не делал этого из сценария, а только из оболочки
Сначала вам нужно подключиться к серверу sql:
$conn=@mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)
or die("Err:Conn");
Затем запрос будет выполнен. Однако многие серверы виртуального хостинга отключают создание баз данных через PHP.