在 plesk 中,我如何授予用户使用 php 创建数据库的权限,但仅限于他的域

In plesk how do I give the user the privileges to create databases using php, but in his domain only

在我们的服务器上,我们有很多域,我们使用 plesk 12.5.30。在一个域上,我想为用户提供仅在 php 中在该域中创建自己的数据库的方法。这不是问题,但我为用户创建了第一个数据库并为该数据库设置了用户名和密码。因此用户可以登录到该数据库,但他没有在 php 中创建新数据库的权限,所以这就是我所做的。

在 plesk 中,我进入了全局 phpmyadmin(因为该域的本地管理没有权限选项),而不是该域的本地管理,我授予用户权限创建数据库,但是有一个问题。当他创建数据库时,它不会出现在他的域中,但会出现在根目录中。在全局phpmyadmin可以看到数据库,本地看不到,plesk也看不到。更糟糕的是,现在用户可以访问服务器上的每个数据库。

我的问题是这样的。在 plesk 中,我如何授予用户使用 php 创建数据库的权限,但仅限于他的域。

在 Plesk 中,客户的用户可以访问 API-RPC,并且可以通过来自 PHP 代码的 API-RPC 调用创建数据库:

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

您只需告诉客户他的网站空间(订阅)id(如果需要数据库服务器 id):

<?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 请求或从 UI:

获取 subscription/webspace id

您可以在此处找到 Plesk API PHP 客户端和用法示例:https://github.com/plesk/api-examples/tree/master/php