1

私は、いくつかの関数を 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)

データベースが存在しないかどうかを検出し、ユーザーに正しいデータベース名を入力するよう求める方法が必要です。

4

1 に答える 1

1

最初にクエリとして実行しshow databases、GRANT を実行する前に名前を探します

存在しないデータベースに権限を付与することはまったく問題ありません。データベース内のテーブルmysqlが書き込まれているだけです。

于 2013-04-16T14:25:00.590 に答える