Intereting Posts
Обрезаемая фатальная ошибка: объект класса __PHP_Incomplete_Class Создание ZIP-файлов с PHP + Apache на лету на высокой скорости? Отображение всех ошибок и предупреждений Можно ли использовать функции store_result () и bind_result () с PHP PDO? Laravel 5 – Получение параметров URL в промежуточном продукте по ресурсам Как найти список всех зарегистрированных пользователей в CakePHP 2.x? PHP Symfony3 – HWIOAuthBundle: проблемы с перенаправлением в Facebook Doctrine 2.0 выбрать проблему запроса? Несколько файлов cookie с одинаковым именем Как преобразовать приложение php & jqueryMobile в файл apk MSSQL Запуск хранимой процедуры несколько раз одновременно Какие другие языки позволяют программистам использовать интерфейсы в качестве функциональных параметров? Как разрешить Symfony 2 использовать схему протокола (http vs https) Сравнение строки UTF-8 Как перенаправить старые «уродливые» URL-адреса на seo-friendly?

Создать пользователя и базу данных MySQL из PHP

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

EDIT – следует указать, что это выполняется от 1 сервера к другому, поэтому сервер A пытается установить DB / user на сервере 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:

«Доступ запрещен для пользователя« 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 Docs On User Management )

редактировать

Если вы используете C-Panel, просто используйте API . Хотя да, у него есть свои причуды, его легче поддерживать материал, который использует его, а не специальные рабочие места. Многие успешные приложения используют его без проблем. Как и любой другой API, вам нужно оставаться на вершине изменений при его использовании.

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

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

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

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

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

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

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

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