2012-03-15 135 views

回答

8

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

但是,我不会从root用户运行带有数据库连接的PHP脚本。

+4

+1使用专用帐户只能够创建数据库和用户,因为它可以防止意外,如果账户被攻破提供损坏限制。它不能丢弃任何东西,并且无法访问数据。 – 2012-03-16 11:54:58

+0

plus1非常好的点.. – 2017-07-10 03:31:36

6

你可以做这样的事情:

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

5

如果你正在主持上的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从here,或者干脆在谷歌搜索它。

这是完美的工作。

+0

数据库创建成功,用户也成功创建,但新创建的用户不分配给数据库。 – 2015-04-11 06:39:38

+0

你可以从这里下载xmlapi.php:https://github.com/CpanelInc/xmlapi-php/blob/master/xmlapi.php(回答中的下载链接被移动) – sudip 2017-08-02 20:12:47

-1
<!-- 

Go to setup on line 48 
Created by [email protected] 

--> 

<!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 [email protected] 
// 
// 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 [email protected]"; 
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>"; 
?> 
+0

这不会试图回答题。 – 2013-08-18 15:42:10

0

我会建议你使用phpmyadmin。

你需要做的步骤:

  1. 开放的phpmyadmin
  2. 去管理部分
  3. 上添加用户帐户命中
  4. 看跌的用户名和密码,
  5. 组权限
  6. 命中[go]按钮

这一切 在行动中看到YouTube上的[click here]

的情况下,如果你想知道更多关于phpMyAdmin的go with official

但如果有什么特别的理由用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