![不要列出不属于用户的数据库](https://linux22.com/image/560827/%E4%B8%8D%E8%A6%81%E5%88%97%E5%87%BA%E4%B8%8D%E5%B1%9E%E4%BA%8E%E7%94%A8%E6%88%B7%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93.png)
使用 MySQL 和 PHPMyAdmin,我想授予某些用户创建数据库和删除自己的数据库的所有权限。基本上,用户只能看到自己创建的数据库,并且可以对它们执行任何操作,但不能与其他用户的数据库交互,也不能查看其他用户的数据库。
我见过一个带有 GRANT ALL ON 前缀的解决方案。但这意味着用户知道前缀并使用它来创建所有数据库。
有没有限制较少的替代方案?
答案1
我使用这个 PHP 脚本来添加具有您指定的权限的用户。此脚本还会随机化密码并将其转储到用户主目录中的文件中。您需要稍微修复它,因为它依赖于其他一些文件,但只需获取 Sql 语句并使用它们就足够简单了。
#! /usr/bin/php
<?php
error_reporting(E_ALL);
define('ADMIN','true');
require_once 'utils/utils.php';
if (count($argv) < 2)
{
echo "usage : php -f ". $argv[0] . " user\n";
return;
}
$user = $argv[1];
$pass = createRandomPassword(10);
global $conn;
if(false === $conn->query("CREATE USER '$user'@'localhost' IDENTIFIED BY '$pass'")) die("mysql error\n");
if(false === $conn->query("GRANT USAGE ON * . * TO '$user'@'localhost' IDENTIFIED BY '$pass'")) die("mysql error\n");
if(false === $conn->query("GRANT ALL PRIVILEGES ON `$user\_%` . * TO '$user'@'localhost'")) die("mysql error\n");
echo "Created mysql user $user/$pass\n";
savePasswordFile($user,$pass);
function savePasswordFile($user,$pass)
{
$passfile = "/home/$user/passwords.txt";
$f = fopen($passfile,"a");
if (!$f) die("Error opening passwords file");
fputs($f, "Mysql login:\nuser : $user\npass : $pass\n\nYou may create databases named ".$user."_*, for example ".$user."_blog\n");
chown($passfile,"$user");
chgrp($passfile,"$user");
chmod($passfile,0700);
fclose($f);
}
function createRandomPassword($length)
{
$chars = "abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ023456789-!@#$%^&*";
srand((double)microtime()*1000000);
$i = 0;
$pass = '' ;
while ($i <= $length) {
$num = rand() % strlen($chars);
$tmp = substr($chars, $num, 1);
$pass = $pass . $tmp;
$i++;
}
return $pass;
}
?>
答案2
您可以使用 webmin 并创建个人用户,然后他们可以创建数据库。 http://www.webmin.com/