【问题标题】:Create MySQL user and database from PHP从 PHP 创建 MySQL 用户和数据库
【发布时间】:2010-04-30 15:30:30
【问题描述】:

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

编辑 - 应该指出这是从一台服务器运行到另一台服务器,因此服务器 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'"

【问题讨论】:

    标签: php database mysql


    【解决方案1】:

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

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

    "用户拒绝访问 'root'@'MY.SERVER.HOST.NAME' 到 数据库'dbname'"

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

    试试:

    $con = mysql_connect("127.0.0.1","root","pass");
    

    编辑(在 cmets 提供更多信息后)

    如果你从一个完全不同的主机连接,你必须告诉 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 一样,您需要在使用它时随时掌握变化。

    【讨论】:

    • 刚刚注意到,我在上面复制了错误的代码。该脚本实际上是在一台服务器上运行并尝试在另一台服务器上安装数据库,因此它实际上并没有连接到本地主机
    • 如果用户出现问题,我删除了用户并尝试使用您的代码重新创建它们,但出现语法错误?
    • 刚刚注意到该服务器正在运行 MySQL 4,并且似乎直到 MySQL 5 才添加创建用户命令 - 也许 GRANT 命令也是如此?
    • @snaken - GRANT 存在于 MySQL 4 中,使用该语法的链接更新我的问题。
    • 创建用户显然是 MySQL5 dev.mysql.com/doc/refman/5.0/en/create-user.html - 无论如何,现在正在创建数据库和用户,但由于某种原因,cPanel 没有检测到用户对数据库有权限
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您在此示例中没有看到数据库连接,原因很明显:假设您已经了解到任何数据库操作都需要先连接。
      这就是书的写作方式:上一课中的内容在下一课中被省略了。否则每一章都会大 2 倍,而你永远也读不完这本书。

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

      创建用户可以使用mysql GRANT query

      虽然我从来没有从脚本中完成,但只是从 shell 中完成

      【讨论】:

        【解决方案4】:

        您需要先连接到 sql server:

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

        然后查询将执行。但是,许多共享托管服务器禁止通过 PHP 创建数据库。

        【讨论】:

        • 最好删除@。并用更可靠的东西替换 die()
        猜你喜欢
        • 2016-11-21
        • 2013-08-30
        • 2013-01-18
        • 1970-01-01
        • 2010-12-12
        • 2017-05-21
        • 1970-01-01
        • 2016-11-04
        • 2012-11-19
        相关资源
        最近更新 更多