创建MySQL数据库和用户并设置权限,使用PHP实现。

12

有没有一种方法可以使用PHP创建一个新的MySQL数据库,一个新的MySQL用户,并将新用户赋予对新数据库的权限?

6个回答

12

你可以像这样做:

mysql_connect('localhost','user',password);
mysql_query("CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';");
mysql_query("GRANT ALL ON db1.* TO 'username'@'localhost'");
mysql_query("CREATE DATABASE newdatabase");
mysql_close();

您可以查看MySQL文档关于GRANTCREATE USER的内容。


使用PHP 7中的mysqli <?php $conn = mysqli_connect('localhost','root','','test'); mysqli_query($conn, "CREATE DATABASE newdatabase"); mysqli_query($conn, "CREATE USER 'dynauser'@'localhost' IDENTIFIED BY 'dynapassword';"); mysqli_query($conn, "GRANT SELECT, INSERT, UPDATE, DELETE ON newdatabase3.* TO 'dynauser'@'localhost'"); mysqli_close($conn); - Kamlesh

8

是的,所有这些操作都可以通过常规的SQL查询来执行。

然而,我会避免使用root用户运行带有数据库连接的PHP脚本。


7
使用一个专门的账户来创建数据库和用户,这个账户只有这个权限可以防止意外情况的发生,同时如果这个账户被攻击也可以限制损失。这个账户无法删除任何内容,也无法访问数据。 - Dan Blows

6
如果您将项目托管在CPanel上,则mysql_query方法无法用于创建数据库、用户和授予权限。您必须使用CPanel的XML API。
<?php
include("xmlapi.php");

$db_host = 'yourdomain.com'; 
$cpaneluser = 'your cpanel username';
$cpanelpass = 'your cpanel password'; 

$databasename = 'testdb';
$databaseuser = 'test'; // Warning: in most of cases this can't be longer than 8 characters
$databasepass = 'dbpass'; // Warning: be sure the password is strong enough, else the CPanel will reject it

$xmlapi = new xmlapi($db_host);    
$xmlapi->password_auth("".$cpaneluser."","".$cpanelpass."");    
$xmlapi->set_port(2082);
$xmlapi->set_debug(1);//output actions in the error log 1 for true and 0 false  
$xmlapi->set_output('array');//set this for browser output  
//create database    
$createdb = $xmlapi->api1_query($cpaneluser, "Mysql", "adddb", array($databasename));   
//create user 
$usr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduser", array($databaseuser, $databasepass));   
 //add user 
$addusr = $xmlapi->api1_query($cpaneluser, "Mysql", "adduserdb", array("".$cpaneluser."_".$databasename."", "".$cpaneluser."_".$databaseuser."", 'all'));
?>

这里下载xmlapi.php,或者在谷歌上搜索它。
这对我完美地起作用了。

数据库已成功创建,用户也已成功创建,但新创建的用户尚未分配到数据库中。 - user2092434
你可以从这里下载xmlapi.php:https://github.com/CpanelInc/xmlapi-php/blob/master/xmlapi.php(答案中的下载链接已移动) - sudip

1
我建议您使用phpMyAdmin。
您需要执行以下步骤:
  1. 打开phpMyAdmin
  2. 进入管理部分
  3. 点击添加用户账户
  4. 输入用户名和密码
  5. 设置权限
  6. 点击 [ Go ] 按钮
就这些了。 在YouTube上查看演示[ 点击此处 ]。
如果您想了解更多关于phpMyAdmin的信息,请前往官方网站
但如果有任何特殊原因需要使用PHP,则可以使用以下SQL命令。
CREATE USER 'tesrytss'@'%'//user name
IDENTIFIED VIA mysql_native_password USING '***';.//set pass
GRANT SELECT, INSERT, UPDATE, DELETE, FILE ON *.* TO 'tesrytss'@'%' // previlages and username and location
REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; //other requerment

-1

打开PHP MyAdmin或MySql Workbench,进入查询窗口,然后运行以下查询

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON db1.* TO 'username'@'localhost'"

-3
<!--

Go to setup on line 48
Created by kierzo@kierzo.com

-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="en-gb" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Create Database</title>
</head>

<body>




<!-- Title -->
<p><h1>Create Database</h1></p>
<p></p>
<p>


<!-- The form -->
<form action="<?php $currentFile = $_SERVER["PHP_SELF"];$parts = Explode('/', $currentFile);echo $parts[count($parts) - 1];?>" method="post">

Database Name: <input name="databasename" type="text" />
<br>
DB Pass: <input name="dbpass" type="text" />
<br>
Admin Pass: <input name="passbox" type="password" />

<p><input name="Submit1" type="submit" value="submit" /></p>

</form>

<!-- end form -->

</p>

</body>

</html>



<?php

//*********************** CONFIG SETUP ************************************//
// Created by kierzo@kierzo.com
//
// set the admin pass for the page
$adminpass = "*******";   // change ******* with your page pass
//
// set mysql root pass
$mysqlRootPass = "*******";  // change ******* with your mysql root pass
//
//
//*********************** CONFIG SETUP ************************************//


// if isset set the varibables

if(isset($_POST["passbox"]) && ($_POST["databasename"])){


$databasename = $_POST["databasename"];
$password = $_POST["passbox"];
$dbpass = $_POST["dbpass"];

}
else { exit;}

if(($password) == ($adminpass)) {


}
else {

echo "Incorrect Password!";

exit;}

// store connection info...

$connection=mysqli_connect("localhost","root","$mysqlRootPass");


// check connection...

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }


  // Create database
  echo "<br><br>";
#echo "$sql";
$sql="CREATE DATABASE $databasename";

if (mysqli_query($connection,$sql))
  {
  echo "<h2>Database <b>$databasename</b> created successfully!</h2>";
  }
else
  {
  echo "Error creating database: " . mysqli_error($con);
  }


    // Create user

$sql='grant usage on *.* to ' . $databasename . '@localhost identified by ' . "'" . "$dbpass" . "'";
echo "<br><br>";
#echo "$sql";
if (mysqli_query($connection,$sql))
  {
  echo "<h2>User Created... <b>$databasename</b> created successfully!</h2>";
  }
else
  {
  echo "Error creating database user: " . mysqli_error($con);
  }


      // Create user permissions

$sql="grant all privileges on $databasename.* to $databasename@localhost";
echo "<br><br>";
#echo "$sql";
if (mysqli_query($connection,$sql))
  {
  echo "<h2>User permissions Created... <b>$databasename</b> created successfully!</h2>";
  }
else
  {
  echo "Error creating database user: " . mysqli_error($con);
  }

  echo "<p>Database Name: $databasename</p>";
  echo "<p>Database Username: $databasename</p>";
  echo "<p>Database Password: $dbpass</p>";
  echo "<p>Database Host: localhost</p>";
?>

这并不试图回答问题。 - Matt Bryant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接