MySQLでユーザーとDBを自動生成

何せユーザーの登録、DBの作成、そしてDBの権限とそのユーザーとの関連という複雑な作業が山ほどある場合は非常に大変な作業になります。Linuxなんかですとnewusersなどという大量ユーザーを一気に登録するコマンドがあったりしますが、MySQLには残念ながらありません。
というわけで、仕方がないので自分で作りました。あれこれ考えていろいろ試した結果、以下のような形が一番いいみたいです。(もっといい方法があったらおしえてください。)

 Perlで書いています。しかし原理的には同じなのでphpでも簡単にできます。まずもってコツはroot権限でアクセスできる(逆に他のユーザーからはアクセスできない)DBをダミーで一つ作成しておきます。そのデータベースはテーブルも空で情報も空で構いません。MySQLにアクセスする際に利用するだけです。
 勿論CGIから起動させることもできますが、セキュリティー上あまり好ましくないというのがありますので、端末で実行する方をお勧めします。端末で実行するだけでもかなりの手間が省けます。パスワードがないとDBをどうこうすることができないわけですが、Web上からDBの操作を自由にできすぎるというのもなかなか危ないので。

#!usr/bin/perl

#------------------------------------------
#自動的に新規ユーザーとDBを作成するスクリプト
#------------------------------------------

#rootでログインするにはデータベースに接続するしかないみたいなので、
#ダミーでdummyというデータベースをroot権限で作成しておく。

#------
# 設定
#------
#新規で作成するユーザーの情報設定

$add_username = 'sample_user';    #ユーザー名を設定
$add_userpassword = '123456';    #パスワードを設定
$add_dbname ='sample_db';   #データベース名

#---------------
# root権限で接続
#---------------
use DBI;
$driver = "mysql";
$database="dummy";
$hostname="localhost";
$user='root';
$password='*****';#mysqlのrootのパスワード

$dsn = "DBI:$driver:$database:$hostname";#DBIモジュールの起動
$dbh = DBI->connect($dsn,$user,$password);#データベースに接続

#DB接続時のエラーメッセージ
if(!$dbh) {
    print "Error can not connect database. $DBI::error string\n";
} else {
    print "Connect!\n";
}


#-------------------
#新規でDBを作成
#-------------------
$add_user_db = $add_dbname;
$create_db = $dbh->do(<<"_SQL_");#SQL文を発行
  create database $add_user_db
_SQL_
#データベース作成時のエラーメッセージ
if (!$create_db) {
    print "Error::$add_user_db not create\n";
} else {
    print "$add_user_db is created!\n";
}

#------------------------------------
#データベースと関連付けたユーザーを作成
#------------------------------------
$create_user = $dbh->do(<<"_SQL_");#SQL文を発行
  grant all on $add_user_db.* to $add_username\@localhost identified by '$add_userpassword'
_SQL_
#ユーザー作成時のエラーメッセージ
if (!$create_user) {
    print "Error::$add_username not create\n";
} else {
    print "$add_username is created!\n";
}

#---------
# DBと切断
#---------
$dbh->disconnect;


exit;






プロフィール



  • Name :: 山上オサム ♂(37)
  • Hobby :: 武術
  • Work :: Web Designer