Perlから自動的にmysqlデータベースを作成する

MySQLにおいてスクリプトを使って自動的にデータベースやユーザーを作成するというサンプルが以外にないので作っておきました。が、セキュリティー上CGIとしてWebサーバーにあげるのはお勧めしません。ローカルの端末からスクリプトを実行させるようにしてください。それだけでも結構楽に作成できますよ。

このスクリプトでできることは、
  • 新規でデータベースを作成(データベース名を指定)
  • 新規でユーザーを作成(ユーザー名を指定)
  • 作成したユーザーをデータベースに関連づける。この際、そのユーザーはそのデータベースの操作に全権限を与えられています。その他のデータベースに接続することはできません。
という一連の設定を自動的に一回で行います。

解説

 mysqlに接続する時、端末などからはログインという形式で接続しその後に各種のコマンドを発行しますが、スクリプトから接続する際にはデータベースに接続することが基本になっていてログインという概念がないみたいです。(あるかもしれません!)なので、root権限でいくつかの操作を自動的に行う場合は、dummyのデータベースを作っておきrootでもってそのデータベースにアクセスします。アクセスに成功したらrootが行える作業はすべてスクリプトでも可能なようです。(全部試していませんが...。)ですから、dummyというデータベースをroot権限で一つだけ作成しておきます。そしてdummyデータベースとrootユーザーを関連付けておきます。(権限はすべて与えておきます。ってrootと関連付けるとすべての権限が与えられますが...。。)

#!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