В plesk, как предоставить пользователю права на создание баз данных с использованием php, но только в его домене

На нашем сервере много доменов, и мы используем plesk 12.5.30. В одном домене я хочу дать пользователю возможность создавать свои собственные базы данных в этом домене только на php. Это не вопрос, но я создал первую базу данных для пользователя и установил имя пользователя и пароль для этой базы данных. Таким образом, пользователь мог войти в эту базу данных, но у него не было разрешения на создание новых баз данных на php, поэтому я так и сделал.

В plesk я перешел к глобальному phpmyadmin (поскольку локальный для этого домена не имеет опции привилегий), а не к локальному для этого домена, и я дал пользователю привилегию создавать базы данных, но есть проблема. Когда он создает базу данных, она не отображается в его домене, но отображается в корне. Вы можете видеть базу данных в глобальном phpmyadmin, но не в локальной, а также plesk не может ее видеть. Хуже того, теперь у пользователя есть доступ ко всем базам данных на сервере.

У меня такой вопрос. В plesk, как предоставить пользователю права на создание баз данных с использованием php, но только в его домене.


person Thomas Williams    schedule 19.08.2016    source источник


Ответы (1)


В Plesk пользователь клиента имеет доступ к API-RPC, и есть возможность создавать БД через вызов API-RPC из кода PHP:

https://docs.plesk.com/en-US/12.5/api-rpc/reference/managing-databases/creating-databases.34407/#o34418.

Вам просто нужно сообщить клиенту его идентификатор веб-пространства (подписки) (и, если требуется, идентификатор сервера БД):

<?php

require_once('PleskApiClient.php'); // You can download it by link below

$host = '127.0.0.1'; // It's your Plesk server IP
$login = 'client_login'; // it's your client login name
$password = 's$cr3t'; // Client's password
$client = new PleskApiClient($host); // Init Plesk client
$client->setCredentials($login, $password); 

$webspaceId = 7; // webspace/subscription Id where customer wants to create database
$dbName = 'MyNewDataBase'; // name of new database

$request = <<<EOF
<packet>
<database>

<add-db>
   <webspace-id>$webspaceId</webspace-id>
   <name>$dbName</name>
   <type>mysql</type>
</add-db>

</database>
</packet>
EOF;

$response = $client->request($request); // Send query to Plesk host
echo $response; // show response

// parse new database id from $response to variable $dbId

// assign existed DB user to new database
$requestToAssignDefaultUser = <<<EOF
<packet>
<database>
   <set-default-user>
      <db-id>$dbId</db-id>
      <default-user-id>35</default-user-id>
   </set-default-user>
</database>
</packet>
EOF;

$response = $client->request($requestToAssignDefaultUser); // Send query to Plesk host
echo $response; // show response

Вы можете получить идентификатор подписки / веб-пространства с помощью другого запроса API или из пользовательского интерфейса:

База данных Plesk создать из API

Вы можете найти клиент Plesk API PHP и пример использования здесь: https://github.com/plesk/api-examples/tree/master/php.

person Oleg Neumyvakin    schedule 20.08.2016
comment
Для меня это все в новинку. Просто для пояснения, вы имеете в виду вместо создания базы данных с помощью CREATE DATABASE, а затем добавления таблиц с помощью CREATE TABLE, вместо этого я использую php для удаленного управления plesk и заставляю plesk выполнять работу. Вы это говорите? Должен признать, у меня проблемы с пониманием этого кода rpc. - person Thomas Williams; 20.08.2016
comment
Да ты прав. И это самый простой, безопасный и идиоматичный способ. Я добавил пример на PHP. Предлагаемый вами подход имеет проблему, потому что Plesk не увидит такие новые базы данных и не сможет создавать резервные копии или управлять ими. - person Oleg Neumyvakin; 20.08.2016
comment
Попробую позже и сообщу, сработало ли это. Единственное, в чем я не уверен, - это $ webspaceid. Однако я знаю URL-адрес, пароль и логин. ps уже загрузил api, но не смог заставить его работать. Надеюсь, ваш новый код работает. - person Thomas Williams; 20.08.2016
comment
Спасибо за помощь, но у меня проблема. Теперь я нашел свой идентификатор веб-пространства, но когда я запускаю скрипт, он продолжает говорить об ошибке 1001. Вы ввели неправильное имя пользователя или пароль. Я знаю, что мое имя пользователя и пароль верны, потому что они такие же, как и ftp. Я даже попробовал ввести имя пользователя и пароль базы данных. Вот почему я долго занимаюсь этим. Я проверил и перепроверил. - person Thomas Williams; 21.08.2016
comment
Подумал, что я должен сказать, что использую имя пользователя и пароль веб-хоста. Это правильный вариант? - person Thomas Williams; 21.08.2016
comment
Вы должны использовать логин и пароль клиента Plesk. - person Oleg Neumyvakin; 21.08.2016
comment
Кстати, вы можете установить расширение XML-RPC API Explorer из пользовательского интерфейса, чтобы играть с Plesk API. - person Oleg Neumyvakin; 21.08.2016
comment
Спасибо, я знаю, что не должен благодарить, но с твоей помощью все заработало. В основном, как только я создал клиента и подписку, это сработало. Я просто пытался сделать это только с веб-хостингом. - person Thomas Williams; 21.08.2016
comment
Давайте продолжим это обсуждение в чате. - person Thomas Williams; 21.08.2016
comment
С добавленной базой данных есть две небольшие проблемы. Прежде всего, даже если он правильно отображается в моем домене, база данных не назначена сайту. Также он не назначается пользователю или пользователю по умолчанию. Я читал руководство по plesk api, но еще не нашел ответа, так как он не очень хорошо изложен. - person Thomas Williams; 22.08.2016
comment
Вы можете назначить пользователя БД новой базе данных другим запросом docs.plesk.com/en-US/12.5/api-rpc/reference/managing-databases/ - person Oleg Neumyvakin; 22.08.2016
comment
Наконец, я создал базу данных и получил идентификатор из ответа с помощью preg_replace. Затем я использовал этот идентификатор для создания другого пакета для создания имени пользователя. Потом я понял, что мне этого делать не нужно. Если в plesk я установил пользователя как ЛЮБОЙ, то любая новая база данных будет использовать этого пользователя. - person Thomas Williams; 22.08.2016