Создать пользователя MySQL и базу данных из PHP - PullRequest
5 голосов
/ 30 апреля 2010

Есть ли способ создать новую базу данных MySQL, нового пользователя MySQL и дать привилегии нового пользователя для новой базы данных, используя PHP?

РЕДАКТИРОВАТЬ - следует указать, что он запускается с 1 сервера на другой, поэтому сервер А пытается установить БД / пользователя на сервер 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'"

Ответы [ 4 ]

4 голосов
/ 02 мая 2010

Этот ответ несколько раз редактировался на основе новой информации, предоставленной ОП

Разрешено ли root подключаться к серверу с хоста, с которого вы подключаетесь? Если строка ошибки возвращает каноническое имя сервера, очень вероятно, что localhost не указывает на 127.0.0.1:

"Доступ запрещен для пользователя root'@'MY.SERVER.HOST.NAME 'для база данных 'dbname' "

Это должно отражать что-то вроде «Доступ запрещен для пользователя 'root' @ localhost '", а не имя сервера.

Попробуйте:

$con = mysql_connect("127.0.0.1","root","pass");

Редактировать (После получения дополнительной информации в комментариях)

Если вы подключаетесь с совершенно другого хоста, вы должны сказать, что MySQL user@remote_hostname_or_ip разрешено подключаться и имеет соответствующие права для создания базы данных и пользователей.

Вы можете сделать это довольно легко, используя 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, вам нужно быть в курсе изменений при его использовании.

0 голосов
/ 30 апреля 2010

Вы не видите соединения с базой данных в этом примере по очевидной причине: предполагается, что вы уже узнали, что любое действие базы данных требует соединения в первую очередь. Это способ написания книг: вещи из предыдущих уроков опущены в следующих. Или каждая глава будет в 2 раза больше, и вы никогда не закончите книгу.

так что да, вам нужно сначала подключиться к базе данных, используя mysql_connect ().

для создания пользователя вы можете использовать mysql запрос GRANT

хотя я никогда не делал это из скрипта, а только из оболочки

0 голосов
/ 30 апреля 2010

Сначала необходимо подключиться к серверу sql:

$conn=@mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)
    or die("Err:Conn");

Тогда запрос будет выполнен. Многие серверы общего хостинга отключают создание баз данных через PHP.

0 голосов
/ 30 апреля 2010

Полагаю, вам нужно создать соединение (с пользователем root) к существующей базе данных (например, mysql), а затем выполнить запрос на создание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...