setp db company

This commit is contained in:
2017-09-17 19:43:37 +02:00
parent ec31e8f567
commit a86359d4b2

View File

@@ -1,28 +1,202 @@
#!/usr/bin/perl #!/usr/bin/perl
use warnings; use warnings;
use strict; use strict;
#use DBI; use DBI;
#use Passwd::Linux qw(modpwinfo setpwinfo rmpwnam mgetpwnam); use Getopt::Long;
use Passwd::Unix;
use Data::Dumper qw(Dumper); use Data::Dumper qw(Dumper);
sub getTimeStamp { # parm [ts] => timestamp for filename; log => timestamp for log my $db_adm = 'ase_lar';
my $format = "%04d%02d%02d%02d%02d%02d"; my $db_adm_usr = 'ase_lar';
my ($p1) = @_; my $db_root_pwd = 'Ase@22500';
if (defined $p1 and $p1 eq "log") { my $db_adm_pwd = 'laravel';
$format = "%04d%02d%02d %02d:%02d:%02d"; my $db_adm_srv = 'www.aseltd.eu';
}
if (defined $p1 and $p1 eq "db_ts") { my ( $company, $company_id, $company_name );
$format = "%04d-%02d-%02d %02d:%02d:%02d"; my ( $company_db_name, $company_db_user, $company_db_pwd );
}
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); sub getTimeStamp
my $timestamp = sprintf ( $format, $year+1900,$mon+1,$mday,$hour,$min,$sec); { # parm [ts] => timestamp for filename; [log] => timestamp for log; [db_ts] => timestamp for db;
return $timestamp; 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"; 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'); my @info = getpwnam('alex');
print Dumper \@info; print Dumper \@info;
print getTimeStamp("log") . " - pid $$ >> Execution ended.\n"; print getTimeStamp("log") . " - pid $$ >> Execution ended.\n";
exit; exit;