Avatar billede kkrasmussen Nybegynder
03. november 2008 - 11:09

Administration af Database server med PERL

Hej eksperter.
Jeg har nogle PERL scripts som i forskellige henseender vil blive eksekveret og de skal gøre følgende:

Det første script er et script til oprettelse af en ny database med en tilhørende ny database administrator(kun til den ene database).

Det næste script er et script som eksekveres hvis der foretages en ændring i min applikation. Uanset hvad som er ændret skal der ske følgende: Den "Gamle" administrator REVOKES og PRIVILEGES flushes, og derefter bliver denne bruger DROPped. Dernæst skal der oprettes en ny bruger med admin rettigheder til den berørte database.

Det næste script er når det kun er et password der ændres.

Det sidste er til at slette en database og dermed også den specifikke bruger der har admin rettigehder til netop denne database.

Hvad jeg allerede HAR:

Mit add script(det første):

my $db = Mysql->connect($host, "mysql", $admin, $adminpass);
$db->query("CREATE DATABASE ".$dbname." DEFAULT CHARACTER SET latin1 COLLATE latin1_danish_ci;");
$db->query("CREATE USER '".$username."'\@'".$server."' IDENTIFIED BY '".$PASS."';");
$db->query("GRANT SELECT,INSERT,UPDATE,DELETE ON ".$dbname.".* TO '".$username."'\@'".$server."';");
$db->query("GRANT SELECT,INSERT,UPDATE,DELETE ON ".$dbname.".* TO '".$username."'\@'%';");

Jeg har med vilje ikke lagt definitionen af variablerne med, men de er korrekte.
jeg er rimelig overbevist om at dette script virker, da det er testet.

Mit modify script(det andet):

my $con = Mysql->connect($host, "mysql", $admin, $adminpass);

if($DISABLED eq "true")
{
    my $query = $con->query("SELECT User FROM db WHERE Db = '".$dbname."';");
    while(my %hash = $query->fetchhash)
    {
        my $user = $hash{0};
        $con->query("REVOKE ALL PRIVILEGES ON ".$dbname.".* FROM '".$OLDADMIN."'\@'%';'");
        $con->query("REVOKE ALL PRIVILEGES ON ".$dbname.".* FROM '".$OLDADMIN."'\@'".$server."';'");
        $con->query("FLUSH PRIVILEGES;");
    }
}
else
{
    my $query2 = $con->query("SELECT User FROM db WHERE Db = '".$dbname."'");
    while(my %hash = $query2->fetchhash)
    {
        my $user = $hash{0};
        $con->query("DROP USER ".$user.";");   
        $con->query("FLUSH PRIVILEGES;");
    }
    $con->query("CREATE USER '".$NEWADMIN."'\@'".$server."' IDENTIFIED BY '".$DBADMINPASS."';");
    $con->query("GRANT SELECT,INSERT,UPDATE,DELETE ON ".$dbname.".* TO '".$NEWADMIN."'\@'".$server."';");
    $con->query("GRANT SELECT,INSERT,UPDATE,DELETE ON ".$dbname.".* TO '".$NEWADMIN."'\@'%';");
}

Dette er jeg til gengæld IKKE sikker på virker. For der sker intet(hvilket betyder det nok ikke virker).

Mit Modify-password script(det tredje):

my $con =  Mysql->connect($host, $dbname, $admin, $adminpass);
$con->query("UPDATE user SET Password = '$password' WHERE User = '".$association."';");

Dette script VED jeg ikke er rigtigt, da det nok er en IDENDIFIED BY kommando der skal bruges i stedet, men jeg aner ikke hvordan jeg skal sætte den sammen.

Det sidste script(delete):

my $con = Mysql->connect($host, "mysql", $admin, $adminpass);
$con->selectdb("mysql");
my $query = $con->query("SELECT User FROM Db WHERE Db = '".$dbname."';");
while(my %hash = $query->fetchhash)
{
    my $user = $hash{0};
    $con->query("REVOKE ALL PRIVILEGES ON ".$dbname.".* FROM '".$user."'\@'%';'");
    $con->query("REVOKE ALL PRIVILEGES ON ".$dbname.".* FROM '".$user."'\@'".$server."';'");
    $con->query("FLUSH PRIVILEGES;");
    $con->query("DROP USER ".$user.";");
}

Dette aner jeg heller ikke om vil virke. Men jeg er stærkt i tvivl!

Hvis nogen af jer havde den fornødne lyst til at hjælpe mig, ville jeg gerne have svar på om disse scripts vil virke efter hensigten som beskrevet i starten af indlægget.
På forhånd tak!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester