在plesk中,如何为用户提供使用php创建数据库的权限,但仅限于他的域

时间:2016-08-19 21:56:03

标签: mysql database permissions plesk

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

在plesk中我去了全局phpmyadmin(因为该域的本地域没有特权选项),而不是该域的本地域,我给了用户创建数据库的权限,但是有一个问题。当他创建数据库时,它不会显示在他的域中,但它会显示在根目录中。您可以在全局phpmyadmin中查看数据库,但不能查看本地数据库,并且plesk也看不到它。最糟糕的是,现在用户可以访问服务器上的每个数据库。

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

1 个答案:

答案 0 :(得分:2)

在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获取订阅/网站空间ID:

Plesk database create from API

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