从PHP创建MySQL用户和数据库
有没有一种方法可以创建一个新的MySQL数据库,一个新的MySQL用户,并使用PHP为新用户授予新数据库的权限 编辑-应该指出,这是从一台服务器运行到另一台服务器,因此服务器A试图在服务器B上安装DB/用户 我有这个:从PHP创建MySQL用户和数据库,php,database,mysql,Php,Database,Mysql,有没有一种方法可以创建一个新的MySQL数据库,一个新的MySQL用户,并使用PHP为新用户授予新数据库的权限 编辑-应该指出,这是从一台服务器运行到另一台服务器,因此服务器A试图在服务器B上安装DB/用户 我有这个: $con = mysql_connect("REMOTE.IP.ADDRESS","root","pass"); mysql_query("CREATE DATABASE ".$db."",$con)or die(mysql_error()); mysql_query("GRAN
$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());
但我在grant查询中遇到一个错误:
"Access denied for user 'root'@'MY.REMOTE.SERVER.HOST.NAME' to database 'dbname'"
我相信您必须(使用
root
用户)创建到现有数据库(如mysql
)的连接,然后运行创建查询。在本例中,您没有看到数据库连接,原因很明显:假设您已经了解到任何数据库操作都需要先连接。这就是书的写作方式:上一课的内容在下一课中被省略。否则每一章都会大两倍,你永远也读不完这本书 因此,是的,您需要首先使用mysql\u connect()连接到数据库 要创建用户,可以使用mysql
虽然我从未从脚本中完成过,但仅从shell中完成您需要先连接到sql server:
$conn=@mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)
or die("Err:Conn");
然后执行查询。许多共享托管服务器都禁止通过PHP创建数据库。这个答案已经根据OP提供的新信息编辑了好几次。 是否允许root用户从您连接的主机连接到服务器?如果错误字符串返回服务器的规范名称,“localhost”很可能没有指向127.0.0.1: “用户的访问被拒绝 “root”@“MY.SERVER.HOST.NAME”到 数据库“dbname” 这应该响应类似“拒绝用户'root'@localhost'的访问”,而不是服务器的名称 尝试: 编辑(在评论中提供更多信息后) 如果你是从一个完全不同的主机连接,你必须告诉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设置正确即可。指定与连接到远程服务器时在日志中显示的主机完全匹配的主机
您可能还想根据口味调整限制。有关创建用户
语法的更多信息,请参见,GRANT
编辑
如果使用MySQL 4,那么创建不是一个选项。您只需要使用GRANT()
编辑
如果使用C面板,只需。是的,它确实有它的怪癖,它更容易维护使用它的东西,而不是临时工作。许多成功的应用程序都使用它而没有问题。与任何其他API一样,在使用它时,您需要随时了解更改。最好删除@。用更可靠的东西替换die(),我刚才注意到,我把上面的代码复制错了。这个脚本实际上运行在一台服务器上,并试图在另一台服务器上安装数据库,因此它实际上并没有连接到本地主机。如果用户出现问题,我删除了该用户,并试图用您的代码重新创建该用户,但我得到了一个语法错误?刚才注意到该服务器运行的是MySQL 4,并且它似乎是创建的直到MySQL 5才添加user命令-GRANT命令可能也是如此?@snaken-GRANT存在于MySQL 4中,使用该语法的链接更新我的问题。创建用户显然只是MySQL5-无论如何,现在正在创建数据库和用户,但由于某些原因,cPanel未检测到用户对数据库具有权限
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 ;