有没有办法创建一个新的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'"
答案 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 here,GRANT
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禁用了数据库的创建。