尝试授予权限时检查数据库是否存在

时间:2013-04-16 13:48:12

标签: mysql perl

我正在尝试在perl脚本中构建一些函数来创建,删除和授予mysql数据库的权限。

目前,我尝试将用户的权限授予指定的数据库,如下所示:

use DBI;
my $dbname=$_[1];
my $dbh = DBI->connect("dbi:mysql:", $sqluser,$sqlpass) or die "Unable to connect: $DBI::errstr\n";
.....
my $username=@unp[0];
my $dbname=@unp[1];         
my $db_com="GRANT ALL ON ".$dbname.".* TO '".$username."'\@'localhost'";
my $sth = $dbh->prepare($db_com);
$sth->execute 
or die "SQL Error: $DBI::errstr\n";
print "Permissions granted\n";  

如果用户存在,则此方法有效。

在为CREATE USER和DROP USER尝试类似的代码时,它可以有效地工作,根据请求创建或删除它们,或者如果用户不存在则抛出mysql语法错误。但是在授予权限时,即使数据库不存在,我也会因为命令执行而退缩。

实际上在mysql提示符下,如果执行sql查询,则返回:

Query OK, 0 rows affected (0.00 sec)

我需要一种方法来发现数据库是否不存在,并提示用户提供正确的数据库名称。

1 个答案:

答案 0 :(得分:1)

首先作为查询执行show databases并在执行GRANT之前查找其中的名称

在不存在的数据库上授予权限是完全可以接受的,所有发生的事情都是mysql数据库中的表被写入