setp db company
This commit is contained in:
204
SetupNewComp.pl
204
SetupNewComp.pl
@@ -1,28 +1,202 @@
|
||||
#!/usr/bin/perl
|
||||
use warnings;
|
||||
use strict;
|
||||
#use DBI;
|
||||
#use Passwd::Linux qw(modpwinfo setpwinfo rmpwnam mgetpwnam);
|
||||
use DBI;
|
||||
use Getopt::Long;
|
||||
use Passwd::Unix;
|
||||
use Data::Dumper qw(Dumper);
|
||||
|
||||
sub getTimeStamp { # parm [ts] => timestamp for filename; log => timestamp for log
|
||||
my $format = "%04d%02d%02d%02d%02d%02d";
|
||||
my ($p1) = @_;
|
||||
if (defined $p1 and $p1 eq "log") {
|
||||
$format = "%04d%02d%02d %02d:%02d:%02d";
|
||||
}
|
||||
if (defined $p1 and $p1 eq "db_ts") {
|
||||
$format = "%04d-%02d-%02d %02d:%02d:%02d";
|
||||
}
|
||||
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
|
||||
my $timestamp = sprintf ( $format, $year+1900,$mon+1,$mday,$hour,$min,$sec);
|
||||
return $timestamp;
|
||||
my $db_adm = 'ase_lar';
|
||||
my $db_adm_usr = 'ase_lar';
|
||||
my $db_root_pwd = 'Ase@22500';
|
||||
my $db_adm_pwd = 'laravel';
|
||||
my $db_adm_srv = 'www.aseltd.eu';
|
||||
|
||||
my ( $company, $company_id, $company_name );
|
||||
my ( $company_db_name, $company_db_user, $company_db_pwd );
|
||||
|
||||
sub getTimeStamp
|
||||
{ # parm [ts] => timestamp for filename; [log] => timestamp for log; [db_ts] => timestamp for db;
|
||||
my $format = "%04d%02d%02d%02d%02d%02d";
|
||||
my ($p1) = @_;
|
||||
if ( defined $p1 and $p1 eq "log" ) {
|
||||
$format = "%04d%02d%02d %02d:%02d:%02d";
|
||||
}
|
||||
if ( defined $p1 and $p1 eq "db_ts" ) {
|
||||
$format = "%04d-%02d-%02d %02d:%02d:%02d";
|
||||
}
|
||||
my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
|
||||
localtime(time);
|
||||
my $timestamp =
|
||||
sprintf( $format, $year + 1900, $mon + 1, $mday, $hour, $min, $sec );
|
||||
return $timestamp;
|
||||
}
|
||||
|
||||
sub generateRandomPassword {
|
||||
my $passwordsize = shift;
|
||||
my @alphanumeric = ( 'a' .. 'z', 'A' .. 'Z', 0 .. 9 );
|
||||
my $randpassword = join '',
|
||||
map $alphanumeric[ rand @alphanumeric ], 0 .. ( $passwordsize - 1 );
|
||||
|
||||
return $randpassword;
|
||||
}
|
||||
|
||||
sub checkCompanyDBSet {
|
||||
my $dbh = DBI->connect( "DBI:mysql:$db_adm;host=$db_adm_srv",
|
||||
$db_adm_usr, $db_adm_pwd )
|
||||
or die getTimeStamp("log")
|
||||
. " - pid $$ >> Could not connect to admin database: $DBI::errstr";
|
||||
|
||||
my $sth =
|
||||
$dbh->prepare( "select id, name, db_user, db_pwd, db_name from "
|
||||
. "ase_lar.companies where name_short like '"
|
||||
. $company
|
||||
. "%';" )
|
||||
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
|
||||
$sth->execute();
|
||||
if ( $sth->rows < 0 ) {
|
||||
die getTimeStamp("log") . " - pid $$ >> No company selected.\n";
|
||||
}
|
||||
elsif ( $sth->rows > 1 ) {
|
||||
die getTimeStamp("log") . " - pid $$ >> Too many company selected.\n";
|
||||
}
|
||||
else {
|
||||
my $results = $sth->fetchrow_hashref;
|
||||
$company_name = $results->{'name'};
|
||||
$company_id = $results->{'id'};
|
||||
$company_db_name = $results->{'db_name'};
|
||||
$company_db_user = $results->{'db_user'};
|
||||
$company_db_pwd = $results->{'db_pwd'};
|
||||
print getTimeStamp("log")
|
||||
. " - pid $$ >> Selected company: "
|
||||
. $company_name . ".\n";
|
||||
}
|
||||
$sth->finish;
|
||||
|
||||
if ( $company_db_name and $company_db_user and $company_db_pwd ) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
sub setCompanyDBSet {
|
||||
my $dbh = DBI->connect( "DBI:mysql:$db_adm;host=$db_adm_srv",
|
||||
$db_adm_usr, $db_adm_pwd )
|
||||
or die getTimeStamp("log")
|
||||
. " - pid $$ >> Could not connect to admin database: $DBI::errstr";
|
||||
|
||||
$company_db_user = sprintf "dbu%013s", $company_id;
|
||||
$company_db_name = sprintf "dbn%013s", $company_id;
|
||||
$company_db_pwd = generateRandomPassword(16);
|
||||
my $sth =
|
||||
$dbh->prepare( "update ase_lar.companies set db_user = '"
|
||||
. $company_db_user
|
||||
. "', db_pwd = '"
|
||||
. $company_db_pwd
|
||||
. "', db_name = '"
|
||||
. $company_db_name
|
||||
. "' where id = "
|
||||
. $company_id
|
||||
. ";" )
|
||||
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
|
||||
$sth->execute() or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
$sth->finish;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub checkCompanyDBGrant() {
|
||||
|
||||
my $exit_rc = 1;
|
||||
|
||||
my $dbh =
|
||||
DBI->connect( "DBI:mysql:$db_adm;host=$db_adm_srv", 'root', $db_root_pwd )
|
||||
or die getTimeStamp("log")
|
||||
. " - pid $$ >> Could not connect to db server: $DBI::errstr";
|
||||
|
||||
my $sth = $dbh->prepare(
|
||||
"show grants for '" . $company_db_user . "'\@'localhost';" )
|
||||
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
|
||||
if ( !$sth->execute() ) {
|
||||
print getTimeStamp("log") . " - pid $$ >> $DBI::errstr\n";
|
||||
$exit_rc = 0;
|
||||
}
|
||||
else {
|
||||
my @results = $sth->fetchrow_array;
|
||||
print getTimeStamp("log")
|
||||
. " - pid $$ >> query result: "
|
||||
. $results[0] . ".\n";
|
||||
|
||||
if ( ( scalar @results ) == 1 ) { $exit_rc = 0 }
|
||||
}
|
||||
$sth->finish;
|
||||
|
||||
return $exit_rc;
|
||||
}
|
||||
|
||||
sub setCompanyDBGrant() {
|
||||
|
||||
my $dbh =
|
||||
DBI->connect( "DBI:mysql:$db_adm;host=$db_adm_srv", 'root', $db_root_pwd )
|
||||
or die getTimeStamp("log")
|
||||
. " - pid $$ >> Could not connect to db server: $DBI::errstr";
|
||||
|
||||
my $sth_db =
|
||||
$dbh->prepare( "CREATE DATABASE IF NOT EXISTS "
|
||||
. $company_db_name
|
||||
. " CHARACTER SET utf8 COLLATE utf8_general_ci;" )
|
||||
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
$sth_db->execute()
|
||||
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
$sth_db->finish;
|
||||
|
||||
my $sth_user =
|
||||
$dbh->prepare( "CREATE USER IF NOT EXISTS '"
|
||||
. $company_db_user
|
||||
. "'\@'localhost' IDENTIFIED BY '"
|
||||
. $company_db_pwd
|
||||
. "';" )
|
||||
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
$sth_user->execute()
|
||||
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
$sth_user->finish;
|
||||
|
||||
my $sth_grant =
|
||||
$dbh->prepare( "GRANT ALL PRIVILEGES ON "
|
||||
. $company_db_name
|
||||
. ".* TO '"
|
||||
. $company_db_user
|
||||
. "'\@'localhost' WITH GRANT OPTION;" )
|
||||
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
$sth_grant->execute()
|
||||
or die getTimeStamp("log") . " - pid $$ >> $DBI::errstr";
|
||||
$sth_grant->finish;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
print getTimeStamp("log") . " - pid $$ >> Execution started.\n";
|
||||
|
||||
GetOptions( "company=s" => \$company )
|
||||
or die("Error in command line arguments\n");
|
||||
|
||||
if ( !checkCompanyDBSet() ) {
|
||||
print getTimeStamp("log") . " - pid $$ >> Set Company DB set.\n";
|
||||
setCompanyDBSet();
|
||||
}
|
||||
|
||||
if ( !checkCompanyDBGrant() ) {
|
||||
print getTimeStamp("log") . " - pid $$ >> Set Company user DB grant.\n";
|
||||
setCompanyDBGrant();
|
||||
}
|
||||
|
||||
print $company_db_user . "\n";
|
||||
print $company_db_pwd . "\n";
|
||||
|
||||
my @info = getpwnam('alex');
|
||||
print Dumper \@info;
|
||||
|
||||
|
||||
print getTimeStamp("log") . " - pid $$ >> Execution ended.\n";
|
||||
exit;
|
||||
|
||||
Reference in New Issue
Block a user