Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在plesk中,我如何授予用户使用php创建数据库的权限,但只能在其域中创建数据库_Mysql_Database_Permissions_Plesk - Fatal编程技术网

Mysql 在plesk中,我如何授予用户使用php创建数据库的权限,但只能在其域中创建数据库

Mysql 在plesk中,我如何授予用户使用php创建数据库的权限,但只能在其域中创建数据库,mysql,database,permissions,plesk,Mysql,Database,Permissions,Plesk,在我们的服务器上,我们有许多域,我们使用plesk 12.5.30。在一个域上,我想让用户只使用php在该域中创建自己的数据库。这不是问题所在,但我为用户创建了第一个数据库,并为该数据库设置了用户名和密码。因此,用户可以登录到该数据库,但他没有在php中创建新数据库的权限,所以这就是我所做的 在plesk中,我访问了全局phpmyadmin(因为该域的本地phpmyadmin没有特权选项),而不是该域的本地phpmyadmin,我给了用户创建数据库的特权,但存在一个问题。当他创建一个数据库时,它

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

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


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

在plesk中,客户的用户可以访问API-RPC,并且可以通过php代码的API-RPC调用创建DB:

您只需要告诉客户他的Web空间(订阅)id(如果需要DB服务器id):


这对我来说都是新鲜事。我只是想澄清一下,你的意思是不是说我不用createdatabase创建数据库,然后用createtable添加表,而是用php远程控制plesk,让plesk来做这项工作。你是这么说的吗?我必须承认我在理解这个rpc代码时遇到了困难。是的,你是对的。这是一种最简单、安全和惯用的方法。我添加了PHP中的示例。您建议的方法有问题,因为Plesk将看不到此类新数据库,并且无法备份或管理它们。稍后将尝试此方法,并告知您是否有效。我唯一不确定的是$webspaceid。不过我知道url、密码和登录名。ps已经下载了api,但无法使其工作。我希望你的新代码能起作用。谢谢。我知道我不应该感谢你,但我得到了你的帮助。基本上,一旦我创建了一个客户并订阅了它,它就工作了。我只是试着只用一个web主机来做这件事。我最终创建了数据库,并使用preg_replace从响应中获得了id。然后我用这个id创建另一个数据包来创建用户名。然后我意识到我不需要这样做。如果在plesk中我将用户设置为ANY,那么任何新数据库都将使用该用户。
<?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