从PHP创建MySQL用户和数据库

rob*_*lls 5 php mysql database

有没有办法创建一个新的MySQL数据库,一个新的MySQL用户,并使用PHP为新数据库赋予新的用户权限?

编辑 - 应该指出这是从1台服务器运行到另一台服务器,因此服务器A试图在服务器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());
Run Code Online (Sandbox Code Playgroud)

但我在授权查询中收到错误:

"Access denied for user 'root'@'MY.REMOTE.SERVER.HOST.NAME' to database 'dbname'"
Run Code Online (Sandbox Code Playgroud)

小智 4

该答案已根据OP提供的新信息进行了多次编辑

实际上是否允许root从您连接的主机连接到服务器?如果错误字符串返回服务器的规范名称,则“localhost”很可能没有指向 127.0.0.1 :

“用户‘root’@‘MY.SERVER.HOST.NAME’对数据库‘dbname’的访问被拒绝”

这应该回显类似“用户'root'@localhost'的访问被拒绝”之类的内容,而不是服务器的名称。

尝试:

$con = mysql_connect("127.0.0.1","root","pass");
Run Code Online (Sandbox Code Playgroud)

编辑(在评论中提供更多信息后)

如果您从完全不同的主机进行连接,则必须告诉 MySQLuser@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 ;
Run Code Online (Sandbox Code Playgroud)

我建议不要将此用户命名为“root”,只需创建一个具有所需的所有全局权限的用户。在示例中,我使用了 192.168.1.1,它很容易成为主机名,只需确保正确设置 DNS 即可。指定与连接到远程服务器时日志中显示的主机完全匹配的主机。

您可能还想根据口味调整限制。有关语法的更多信息CREATE USER可以此处找到GRANT

编辑

如果使用 MySQL 4 - CREATE 不是一个选项。您只需使用 GRANT (4.1 用户管理文档

编辑

如果使用 C-Panel,只需使用 API即可。虽然是的,它确实有其怪癖,维护使用它的东西比临时解决方法更容易。许多成功的应用程序都毫无问题地使用它。与任何其他 API 一样,您在使用它时需要随时了解变化。