从PHP创建MySQL用户和数据库

时间:2010-04-30 15:30:30

标签: php database mysql

有没有办法创建一个新的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());

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

"Access denied for user 'root'@'MY.REMOTE.SERVER.HOST.NAME' to database 'dbname'"

4 个答案:

答案 0 :(得分: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");

修改(在评论中提供更多信息后)

如果要从完全不同的主机连接,则必须告诉MySQL user@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 ;

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

您可能还想调整品味限制。有关CREATE USER语法的更多信息可以是found hereGRANT here

修改

如果使用MySQL 4 - CREATE不是一个选项。您只需使用GRANT(4.1 Docs On User Management

修改

如果使用C-Panel,只需use the API。虽然是的,它确实有它的怪癖,它更容易维护使用它的东西而不是临时工作。许多成功的应用程序使用它没有问题。与任何其他API一样,您需要在使用它时始终处于最佳状态。

答案 1 :(得分:0)

我相信你必须创建一个连接(使用root用户)到现有数据库(如mysql),然后运行创建查询。

答案 2 :(得分:0)

在这个例子中你没有看到数据库连接,原因很明显:假设你已经知道任何数据库操作都需要先连接。
这就是书籍的编写方式:以前课程中的内容在下一课中被省略。或者每章都要大2倍,你永远不会完成这本书。

所以是的,您需要首先使用mysql_connect()连接到数据库。

创建用户可以使用mysql GRANT query

虽然我从来没有从脚本中完成它,但仅从shell中完成

答案 3 :(得分:-1)

您需要先连接到sql server:

$conn=@mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)
    or die("Err:Conn");

然后查询将执行。许多共享托管服务器通过PHP禁用了数据库的创建。