print " 7. Create/append full privileges for an existing database\n";
print " and host combination (user has FULL privilege)\n";
print " 8. Remove all privileges for for an existing database and\n";
print " host combination.\n";
print " (user will have all permission fields set to N)\n";
print " 0. exit this program\n";
print "\nMake your choice [1,2,3,4,5,0]: ";
print "\nMake your choice [1,2,3,4,5,6,7,0]: ";
while(<STDIN>){
$answer=$_;
chomp($answer);
if($answer=~ /1|2|3|4|5|0/){
&setpwd if($answer== 1);
&addall($answer)if($answer=~ /^[2345]$/);
if($answer== 0){
print "Sorry, hope we can help you next time \n\n";
if($answer=~ /^[12345678]$/){
if($answer== 1){
setpwd();
} elsif ($answer=~ /^[2345678]$/){
addall($answer);
}else{
print "Sorry, something went wrong. With such option number you should not get here.\n\n";
$end= 1;
}
} elsif ($answer== 0){
print "We hope we can help you next time \n\n";
$end= 1;
}else{
print "Your answer was $answer\n";
print "and that's wrong .... Try again\n";
...
...
@@ -121,7 +143,7 @@ sub q1 { # first question ...
###
sub setpwd
{
my ($user,$pass,$host);
my ($user,$pass,$host)="";
print "\n\nSetting a (new) password for a user.\n";
$user= user();
...
...
@@ -168,22 +190,18 @@ sub setpwd
###
# all things which will be added are done here
###
sub addall
{
sub addall {
my ($todo)= @_;
my ($answer,$good,$db,$user,$pass,$host,$priv);
if($todo== 2)
{
if($todo== 2){
$db= newdatabase();
}
else
{
}else{
$db= database();
}
$user= newuser();
$pass= newpass();
$pass= newpass("$user");
$host= newhosts();
print "#"x70;
...
...
@@ -198,104 +216,80 @@ sub addall
print "Are you pretty sure you would like to implement this [yes/no]: ";
my $no= <STDIN>;
chomp($no);
if($no=~ /n/i)
{
if($no=~ /n/i){
print "Okay .. that was it then ... See ya\n\n";
return(0);
}
else
{
}else{
print "Okay ... let's go then ...\n\n";
}
if($todo== 2)
{
if($todo== 2){
# create the database
my $sth=$dbh->do("create database $db")||$dbh->errstr;
}
# select the privilege ....
if(($todo== 2)||($todo== 3))
{
$priv="'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'";
if($db){
my $sth=$dbh->do("CREATE DATABASE $db")||$dbh->errstr;
}else{
print STDERR "What do you want? You wanted to create new database and add new user, right?\n";
die "But then specify databasename, please\n";
}
elsif ($todo== 4)
{
$priv="'Y','Y','Y','Y','N','N','N','Y','Y','Y'";
}
elsif ($todo== 5)
{
$priv="'Y','N','N','N','N','N','N','N','N','N'";
}
else
{
print "Sorry, choice number $todo isn't known inside the program .. See ya\n";
if((!$todo) or not ($todo=~ m/^[2-8]$/)){
print STDERR "Sorry, select option $todo isn't known inside the program .. See ya\n";
quit();
}
my @hosts =split(/,/,$host);
$user=$dbh->quote($user);
$db=$dbh->quote($db);
if($pass eq '')
{
$pass="''";
if(!$user){
die "username not specified: $user\n";
}
else
{
$pass="PASSWORD(".$dbh->quote($pass).")";
if(!$db){
die "databasename is not specified nor *\n";
}
foreach my $key(@hosts)
{
my $key1=$dbh->quote($key);
my $sth=$dbh->prepare("select Host,User from user where Host = $key1 and User = $user")|| die $dbh->errstr;
$sth->execute || die $dbh->errstr;
my @r =$sth->fetchrow_array;
if($r[0])
{
print "WARNING WARNING SKIPPING CREATE FOR USER $user AND HOST $key\n";
print "Reason: entry already exists in the user table.\n";
foreach $host(@hosts){
# user privileges: SELECT
if(($todo== 2)||($todo== 3)){
$sth=$dbh->do("GRANT SELECT ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'")|| die $dbh->errstr;
} elsif ($todo== 4){
# user privileges: SELECT,INSERT,UPDATE,DELETE
$sth=$dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'")|| die $dbh->errstr;
} elsif ($todo== 5){
# user privileges: SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES
$sth=$dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'")|| die $dbh->errstr;
} elsif ($todo== 6){
# admin privileges: GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES,SHOW DATABASES,PROCESS
$sth=$dbh->do("GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,CREATE TEMPORARY TABLES,SHOW DATABASES,PROCESS ON $db.* TO $user@\"$host\" IDENTIFIED BY \'$pass\'")|| die $dbh->errstr;
} elsif ($todo== 7){
# all privileges
$sth=$dbh->do("GRANT ALL ON $db.* TO \'$user\'\@\'$host\' IDENTIFIED BY \'$pass\'")|| die $dbh->errstr;
} elsif ($todo== 8){
# all privileges set to N
$sth=$dbh->do("REVOKE ALL ON *.* FROM \'$user\'\@\'$host\'")|| die $dbh->errstr;
}
else
{
$sth=$dbh->prepare("insert into user (Host,User,Password) values($key1,$user,$pass)")|| die $dbh->errstr;
$sth->execute || die $dbh->errstr;
$sth->finish;
}
$sth=$dbh->prepare("INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Grant_priv,References_priv,Index_priv,Alter_priv) VALUES ($key1,$db,$user,$priv)")|| die $dbh->errstr;