【问题标题】:GRANT statement syntax problems and php, assign privilegesGRANT语句语法问题和php,分配权限
【发布时间】:2015-09-20 22:53:03
【问题描述】:

大家好,我正在尝试制作一个小程序来创建用户并在 php 中为数据库管理器分配权限

这是代码:

 <?php 
$host1='localhost'; 
$user1='root'; 
$pass1=''; 
$conexion=mysql_connect($host1,$user1,$pass1); 
if(!$_POST) 
{ 
?> 
<form id="form1" method="post" action="base.php" enctype="multipart/form-data"> 
<input type="text" name="usuario" > Nombre usuario <br> 
<br><b>Datos:</b><br> 
<input type="checkbox" name="insert" value="insert"> Insert <br> 
<input type="checkbox" name="delete" value="DELETE"> Delete<br> 
<input type="checkbox" name="file" value="FILE"> File<br> 
<input type="checkbox" name="SELECT" value="SELECT"> SELECT<br> 
<input type="checkbox" name="UPDATE" value="UPDATE">UPDATE<br> 
<INPUT name="Registrar" type=submit value="Registrar"> 
<?php 
} 

else 
{ 

$host = 'localhost'; 
$pass = '12345'; 
$user =$_POST["usuario"];
$delete =$_POST["delete"]; 
$file =$_POST["file"]; 
$insert =$_POST["insert"]; 
$select =$_POST["SELECT"]; 
$update =$_POST["UPDATE"]; 

$createQ = "CREATE USER '{$user}'@'{$host}' IDENTIFIED BY '{$pass}'"; 
$grantQ = "GRANT  {$file},{$insert},{$delete},{$selec},{$update}  ON  *.* TO '{$user}'@'{$host}' WITH GRANT OPTION"; 
if(mysql_query($createQ)){ 
    echo 'Usuario creado <br/>'; 
    if(mysql_query($grantQ)){ 
        echo 'Permisos concedidos<br/>'; 
    }else{ 
        echo 'permissions query failed:'.mysql_error().'<br/>'; 
    } 

}else{ 
    echo '<b>El usuario posiblemente ya existe </b>:'.mysql_error().'<br/>'; 
} 
} 
?>

逗号(,)的问题,如果没有在句子中选择一个复选框逗号(两个逗号一起使用),我会收到语法错误

那我该怎么办?

感谢您的及时帮助

干杯

【问题讨论】:

  • 希望只有管理员可以访问这个!
  • 利用if 声明的力量
  • 对不起,我听不懂
  • 假设您没有逗号问题。网络上的任何人都可以访问该 php。他们可以(尤其是使用机器人工具)阻塞这么多用户*^^,你宁愿重新安装

标签: php mysql forms post checkbox


【解决方案1】:

这确实是非常不安全的代码,我同意这一点。但实际的问题是如何解决'逗号问题',我将在下面回答。使用数组来存储您的特权关键字,并使用 join() 函数将它们用逗号粘合在一起:

$insert = $_POST["insert"]; 
$delete = $_POST["delete"]; 
$file = $_POST["file"]; 
$select = $_POST["SELECT"]; 
$update = $_POST["UPDATE"]; 

$privs = array();
if ($insert != "") $privs[] = $insert;
if ($delete != "") $privs[] = $delete;
if ($file != "") $privs[] = $file;
if ($select != "") $privs[] = $select;
if ($update != "") $privs[] = $update;

if (count($privs) > 0) {        
    $privclause = join(", ", $privs);
    $grantQ = "GRANT $privclause ON *.* TO '{$user}'@'{$host}' WITH GRANT OPTION";
    }

还请注意,如果未选中任何选项,则不必执行 GRANT 语句。

现在,假设只检查了 INSERT 和 SELECT 选项。 SQL 语句将变为:

GRANT INSERT, SELECT ON *.* TO ''@'' WITH GRANT OPTION

如果只勾选了 SELECT 选项,语句变为:

GRANT SELECT ON *.* TO ''@'' WITH GRANT OPTION

join() 函数只会粘贴给定字符串 between 部分,不会自动粘贴 beforeafter 部分。

【讨论】:

  • 谢谢你给了我一个大线索
猜你喜欢
  • 2015-11-22
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多