#!/usr/bin/perl -w use strict; use DBI; use Data::Dumper; $Data::Dumper::Indent = 1; $Data::Dumper::Sortkeys = 1; $Data::Dumper::Useqq = 1; #USAGE BLOCK: # (1) quit unless we have the correct number of command-line args #my $num_args = $#ARGV + 1; #if ($num_args != 1) { # print "\nUsage: jmagetUsers mysql_server\n"; # exit; #} #CHANGES BLOCK: #20140520 jma Created DBDsample script #DECLARATIONS my $SERVER = "localhost"; #my $BASEDIR = "/data/timeinc/servers/mysql"; #my $COMMONDIR = "$BASEDIR/common"; #my $SERVERDIR = "$BASEDIR/$SERVER"; #my $CONTROLDIR = "$COMMONDIR/control"; #my $PWF = "$CONTROLDIR/\.passwdfile"; #my $IFF = "$COMMONDIR/mysql_interfaces"; my $user = "user"; my $database = "mysql"; my %login; my $lc = 0; my @logins = (); my $pw = "pw"; my $host = "localhost"; my $port = 3301; #Uncomment to validate sub are working correctly #print "PW is $pw, Host is $host, Port is $port, Server is $SERVER\n"; #Open connection to server my $dsn = "DBI:mysql:database=$database:host=$host:port=$port"; my $dbh = DBI->connect($dsn, $user, $pw); my $server = "localhost"; #Prepare query # Get applicable databases that contain the cache_form table my $sth = $dbh->prepare(qq(select distinct user,host from mysql.user where user like "jma%";)); $sth->execute(); ## Retrieve the results of a row of data and print #print "\tQuery results:\n================================================\n"; while (my @rows = $sth->fetchrow_array()) { # print "@rows\n"; $login{$lc}{user} = $rows[0]; $login{$lc}{scope} = $rows[1]; $lc = $lc + 1; } warn "Problem in retrieving results", $sth->errstr( ), "\n" if $sth->err( ); $sth->finish(); #print Dumper \%login; #print "DUMPER ENDS\n"; foreach my $line (keys %login) { # print qq('$login{$line}->{user}'\@'$login{$line}->{scope}'\n); my $sql = qq( SHOW GRANTS for '$login{$line}->{user}';); my $sth = $dbh->prepare($sql); $sth->execute(); while (my @results = $sth->fetchrow_array()) { # print "$SERVER: @results\n"; # print "$results[0]\n"; my($grant,$db,$schema,$user,$scope) = $results[0] =~ m/.*GRANT\s(.+)\sON\s(.+)\.(.+)\sTO\s(\S+)\@(\S+)/ix; if (defined $user && length $user > 0) { if (defined $db && length $db > 0) { $db =~ tr/'`//d; } if (defined $schema && length $schema > 0) { $schema =~ tr/'`//d; } if (defined $user && length $user > 0) { $user =~ tr/'`//d; } if (defined $scope && length $scope > 0) { $scope =~ tr/'`//d; } push @logins, [$server, $user, $db, $grant]; #print "SERVER = $server: GRANT = $grant: DB = $db: SCHEMA = $schema: USER = $user: SCOPE: $scope\n"; #if ($grant =~ m/SELECT/i) { # push @logins, [$server, $user, $db, $grant]; #} #if ($grant =~ m/USAGE/i) { # push @logins, [$server, $user, $db, $grant]; #} #if ($grant =~ m/ALL/i) { # push @logins, [$server, $user, $db, $grant]; #} } } print Dumper @logins; } exit; #### $VAR1 = [ "localhost", "jma_rw", "*", "USAGE" ]; $VAR2 = [ "localhost", "jma_rw", "jma", "SELECT, INSERT, UPDATE, DELETE, SHOW VIEW" ]; $VAR3 = [ "localhost", "jma_ro", "*", "USAGE" ]; $VAR4 = [ "localhost", "jma_ro", "jma", "SELECT, SHOW VIEW" ]; $VAR1 = [ "localhost", "jma_rw", "*", "USAGE" ]; $VAR2 = [ "localhost", "jma_rw", "jma", "SELECT, INSERT, UPDATE, DELETE, SHOW VIEW" ]; $VAR3 = [ "localhost", "jma_ro", "*", "USAGE" ]; $VAR4 = [ "localhost", "jma_ro", "jma", "SELECT, SHOW VIEW" ]; $VAR5 = [ "localhost", "jma_dbo", "*", "USAGE" ]; $VAR6 = [ "localhost", "jma_dbo", "jma", "SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER" ]; #### CREATE DATABASE "drupal" DEFAULT CHARACTER SET latin1 DEFAULT COLLATE latin1_swedish_ci; CREATE DATABASE "jma" DEFAULT CHARACTER SET latin1 DEFAULT COLLATE latin1_swedish_ci; GRANT USAGE ON *.* TO "drupal_dbo"@'%' IDENTIFIED BY '' ; GRANT SELECT ON *.* TO "drupal_dbo"@'%' ; GRANT INSERT ON *.* TO "drupal_dbo"@'%' ; GRANT UPDATE ON *.* TO "drupal_dbo"@'%' ; GRANT DELETE ON *.* TO "drupal_dbo"@'%' ; GRANT ALTER ON *.* TO "drupal_dbo"@'%' ; GRANT USAGE ON *.* TO "drupal_ro"@'%' IDENTIFIED BY '' ; GRANT SELECT ON *.* TO "drupal_ro"@'%' ; GRANT USAGE ON *.* TO "drupal_rw"@'%' IDENTIFIED BY '' ; GRANT SELECT ON *.* TO "drupal_rw"@'%' ; GRANT INSERT ON *.* TO "drupal_rw"@'%' ; GRANT UPDATE ON *.* TO "drupal_rw"@'%' ; GRANT DELETE ON *.* TO "drupal_rw"@'%' ; GRANT USAGE ON *.* TO "jma_dbo"@'%' IDENTIFIED BY '' ; GRANT USAGE ON *.* TO "jma_ro"@'%' IDENTIFIED BY '' ; GRANT USAGE ON *.* TO "jma_rw"@'%' IDENTIFIED BY '' ; GRANT USAGE ON *.* TO "monitor"@'localhost' IDENTIFIED BY '' ; GRANT USAGE ON *.* TO "monitor"@'%' IDENTIFIED BY '' ; GRANT USAGE ON *.* TO "root"@'localhost' IDENTIFIED BY '' WITH GRANT OPTION; GRANT SELECT ON *.* TO "root"@'localhost' ; GRANT INSERT ON *.* TO "root"@'localhost' ; GRANT UPDATE ON *.* TO "root"@'localhost' ; GRANT DELETE ON *.* TO "root"@'localhost' ; GRANT CREATE ON *.* TO "root"@'localhost' ; GRANT DROP ON *.* TO "root"@'localhost' ; GRANT GRANT ON *.* TO "root"@'localhost' ; GRANT REFERENCES ON *.* TO "root"@'localhost' ; GRANT INDEX ON *.* TO "root"@'localhost' ; GRANT ALTER ON *.* TO "root"@'localhost' ; GRANT RELOAD ON *.* TO "root"@'localhost' ; GRANT SHUTDOWN ON *.* TO "root"@'localhost' ; GRANT PROCESS ON *.* TO "root"@'localhost' ; GRANT FILE ON *.* TO "root"@'localhost' ; GRANT SHOW DATABASES ON *.* TO "root"@'localhost' ; GRANT SUPER ON *.* TO "root"@'localhost' ; GRANT CREATE TEMPORARY TABLES ON *.* TO "root"@'localhost' ; GRANT LOCK TABLES ON *.* TO "root"@'localhost' ; GRANT EXECUTE ON *.* TO "root"@'localhost' ; GRANT REPLICATION SLAVE ON *.* TO "root"@'localhost' ; GRANT REPLICATION CLIENT ON *.* TO "root"@'localhost' ; GRANT CREATE VIEW ON *.* TO "root"@'localhost' ; GRANT SHOW VIEW ON *.* TO "root"@'localhost' ; GRANT CREATE ROUTINE ON *.* TO "root"@'localhost' ; GRANT ALTER ROUTINE ON *.* TO "root"@'localhost' ; GRANT CREATE USER ON *.* TO "root"@'localhost' ; GRANT TRIGGER ON *.* TO "root"@'localhost' ; GRANT EVENT ON *.* TO "root"@'localhost' ; GRANT CREATE TABLESPACE ON *.* TO "root"@'localhost' ;