⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mysqlaccess

📁 开启mysql的远程连接的方法 mysql-noinstall-5.1.6-alpha-win32.zip
💻
📖 第 1 页 / 共 5 页
字号:
#   MySQLaccess::Report::Print_Footer();#   MySQLaccess::DB::CloseConnection();#   exit 0;}#----------------------------------# show edit-taskbarif ( defined($Param{'edit'})) {   if ($MySQLaccess::CGI ) {   MySQLaccess::Report::Print_Edit();   $print_usage=0;   MySQLaccess::Report::Print_Footer();   MySQLaccess::DB::CloseConnection();   exit 0;   }   else {   MySQLaccess::Report::Print_Edit();   $print_usage=0;   MySQLaccess::Report::Print_Footer();   MySQLaccess::DB::CloseConnection();   exit 0;   }}# -----------------------------# Build list of users,dbs,hosts# to process...@all_dbs   = @{MySQLaccess::DB::Get_All_dbs($Param{'db'})};@all_users = @{MySQLaccess::DB::Get_All_users($Param{'user'})};@all_hosts = @{MySQLaccess::DB::Get_All_hosts($Param{'host'})};#if EDIT-mode#@all_dbs_tmp   = @{MySQLaccess::DB::Get_All_dbs($Param{'db'},'tmp')};#@all_users_tmp = @{MySQLaccess::DB::Get_All_users($Param{'user'},'tmp')};#@all_hosts_tmp = @{MySQLaccess::DB::Get_All_hosts($Param{'host'},'tmp')};# -----------------------------# Report access-rights for each# tuple (host,user,db)#$headers=0;my %Access = ();foreach $host (@all_hosts) {  foreach $user (@all_users) {    foreach $db (@all_dbs) {      MySQLaccess::Grant::Initialize();      %Access = MySQLaccess::Grant::Get_Access_Rights($host,$user,$db);	      MySQLaccess::Report::Print_Access_rights($host,$user,$db,\%Access);    }  }}# -----------------------------# End scriptMySQLaccess::Report::Print_Footer();MySQLaccess::DB::CloseConnection();exit 0;##############################################################  FUNCTIONS  ################sub GetMode {   my $cmd=0;   my $cgi=0;   if (defined($ENV{'HTTP_HOST'})) { $cmd=0; $cgi=1; }   else                            { $cmd=1; $cgi=0; }    return ($cmd,$cgi);}# ================================# sub PromptPass#  prompt tty for a password# ================================sub PromptPass {    my ($prompt) = @_;    my $password;    $ENV{PATH} = "/bin:/usr/bin";    $ENV{IFS} = " \t\n";    $ENV{SHELL} = "/bin/sh";    system "stty -echo";    print $prompt;    chomp($password = <STDIN>);    print "\n";    system "stty echo";    $password;}# =================================# sub CheckUnsafeFile#  tell if a config file containing a password is unsafe# =================================sub CheckUnsafeFile {    my ($fname) = @_;    my ($dev, $ino, $mode, $nlink,        $uid, $gid, $rdev, $size,        $atime, $mtime, $ctime, $blksize, $blocks) = stat($fname);    if ( $uid != $< ) {   # unsafe if owned by other than current user        return 1;    }    if ( $mode & 066 ) {  # unsafe if accessible by other        return 1;    }    $fname =~ s#/[^/]+$##;    if ( (length $fname) > 0 ) {        return CheckUnsafeDir($fname);    }    return 0;}# =================================# sub CheckUnsafeDir#  tell if a directory is unsafe# =================================sub CheckUnsafeDir {    my ($fname) = @_;    my ($dev, $ino, $mode, $nlink,        $uid, $gid, $rdev, $size,        $atime, $mtime, $ctime, $blksize, $blocks) = stat($fname);    # not owned by me or root    if ( ($uid != $<) && ($uid != 0) ) {        return 1;    }    if ( $mode & 022 ) {  # unsafe if writable by other        return 1  unless $mode & 01000;  # but sticky bit ok    }    $fname =~ s#/[^/]+$##;    if ( (length $fname) > 0 ) {        return CheckUnsafeDir($fname);    }    return 0;}# =================================# sub MergeConfigFile#  merge data from .cnf file# =================================sub MergeConfigFile {    my ($fname) = @_;    my ($group, $item, $value);    if ( open CNF, $fname ) {         while (<CNF>) {             s/^\s+//;             next if /^[#;]/;             if ( /\[\s*(\w+)\s*]/ ) {                 $group = $1;                 $group =~ tr/A-Z/a-z/;                 if ( !exists $MYSQL_CNF{$group} ) {                     undef $group;                 }             } elsif ( defined $group ) {                 ($item, $value) = /((?:\w|-)+)\s*=\s*(\S+)/;                 # don't unquote backslashes as we just write it back out                 if ( defined $item ) {                     if ( $item =~ /^password$/ ) {                         if ( CheckUnsafeFile($fname) ) {                             $unsafeConfig = $fname;                         }                     }                     if ( $group eq 'client' ) {                         $MYSQL_CNF{'mysql'}{$item} = $value;                         $MYSQL_CNF{'mysqldump'}{$item} = $value;                     } else {                         $MYSQL_CNF{$group}{$item} = $value;                     }                 }             }         }         close(CNF);    }}# =================================# sub MergeConfigFiles#  merge options from config files#  NOTE: really should do two separate merges for each#    client to exactly duplicate order of resulting argument lists# =================================sub MergeConfigFiles {    my ($name,$pass,$uid,$gid,$quota,$comment,$gcos,$dir,$shell) = getpwuid $<;    MergeConfigFile("/etc/my.cnf");    MergeConfigFile("$dir/.my.cnf");}# =================================# sub WriteTempConfigFile#  write # =================================sub WriteTempConfigFile {   sysopen CNFFILE, $MYSQL_CNF, O_RDWR|O_CREAT|O_EXCL, 0700      or die "sysopen $MYSQL_CNF: $!";      # groups may be in any order, generic groups such as [client] assumed   # here to be empty   foreach $group (keys %MYSQL_CNF) {      print CNFFILE "[$group]\n";      foreach $item (keys %{$MYSQL_CNF{$group}}) {         if ( defined $MYSQL_CNF{$group}{$item} ) {            print CNFFILE "$item=$MYSQL_CNF{$group}{$item}\n";         } else {            print CNFFILE "$item\n";         }      }      print CNFFILE "\n";   }   close(CNFFILE);}######################################################################package MySQLaccess::DB;###########BEGIN {    $DEBUG     = 2;    $DEBUG     = $MySQLaccess::DEBUG unless ($DEBUG);    # Error-messages from the MySQL client    %ACCESS_ERR= ('Access_denied'       => 'Access denied'                  ,'Dbaccess_denied'     => 'Access to database denied'                 ,'Unrecognized_option' => 'unrecognized option'                  ,'Unknown_table'       => "Can't find file:"                 ,'unknown_error'       => '^ERROR:'                 );}# #######################################  Connecting to the MYSQL DB# ======================================# sub OpenConnection#  Open an connection to the mysql-db#  questions to MYSQL_Q#  answers from MYSQL_A# ======================================sub OpenConnection {    my $pid;    MySQLaccess::Debug::Print(2,"OpenConnection:");    # check path to mysql-client executable    if (! -f $MySQLaccess::MYSQL) {       if ($MySQLaccess::CMD) { die "Could not find MySQL-client '$MySQLaccess::MYSQL'"; }       if ($MySQLaccess::CGI) {           print "<center>\n<font color=Red>\n";          print "ERROR: Could not find MySQL-client '$MySQLaccess::MYSQL'";          print "</center>\n</font>\n";          exit 0;       }    }    # path to mysql executable    my $connect = "$MySQLaccess::MYSQL --defaults-file=$MySQLaccess::MYSQL_CNF";    $connect .= " $MySQLaccess::MYSQL_OPT";    # superuser, spassword transmitted via defaults-file    if (defined($MySQLaccess::Param{'rhost'}))     { $connect .= " --host=$MySQLaccess::Param{'rhost'}"; }    # other options??    # grant-database    $connect .= " $MySQLaccess::ACCESS_DB";    # open connection (not using /bin/sh -c)    MySQLaccess::Debug::Print(2,"Connecting to: $connect");    $pid=IPC::Open3::open3(\*MYSQL_Q,\*MYSQL_A,"",split /\s+/,$connect);    MySQLaccess::Debug::Print(2,"PID of open pipe: $pid");        # check connection     print MYSQL_Q "select 'ok';\n";    $answer = <MYSQL_A>; #answer from mysql    MySQLaccess::Debug::Print(2,"Answer: $answer\n");    foreach $nerror (sort(keys(%ACCESS_ERR))) {      MySQLaccess::Debug::Print(3,"check answer for error $ACCESS_ERR{$nerror}");      if (grep(/$ACCESS_ERR{$nerror}/i,$answer)) {          MySQLaccess::Debug::Print(2,"Answer contain error [$nerror]");         return $nerror;       }    }if (0) {    # check server-version     print MYSQL_Q "select 'ok';\n";    $answer = <MYSQL_A>; #answer from mysql    MySQLaccess::Debug::Print(2,"Answer: $answer\n");    foreach $nerror (sort(keys(%ACCESS_ERR))) {      MySQLaccess::Debug::Print(3,"check answer for error $ACCESS_ERR{$nerror}");      if (grep(/$ACCESS_ERR{$nerror}/i,$answer)) {          MySQLaccess::Debug::Print(2,"Answer contain error [$nerror]");         return $nerror;       }    }}    my $skip=<MYSQL_A>;     return 0; }# ======================================# sub CloseConnection#  Close the connection to the mysql-db# ======================================sub CloseConnection {    close MYSQL_Q;    close MYSQL_A;}# ===========================================================# sub CreateTable($table)#  Create temporary/backup table# ===========================================================sub CreateTable {    my $pid;    my ($table,$force) = @_;    my %tables = ( $MySQLaccess::ACCESS_U_TMP => $MySQLaccess::ACCESS_U,                   $MySQLaccess::ACCESS_H_TMP => $MySQLaccess::ACCESS_H,                   $MySQLaccess::ACCESS_D_TMP => $MySQLaccess::ACCESS_D,                   $MySQLaccess::ACCESS_U_BCK => $MySQLaccess::ACCESS_U,                   $MySQLaccess::ACCESS_H_BCK => $MySQLaccess::ACCESS_H,                   $MySQLaccess::ACCESS_D_BCK => $MySQLaccess::ACCESS_D,                   $MySQLaccess::ACCESS_U => $MySQLaccess::ACCESS_U_BCK,                   $MySQLaccess::ACCESS_H => $MySQLaccess::ACCESS_H_BCK,                   $MySQLaccess::ACCESS_D => $MySQLaccess::ACCESS_D_BCK,                 );     my $tbl;    my $query="";    my $delim;    my $skip;    my $create;    my @known_tables=();#    print STDERR "CreateTable($table)\n";    MySQLaccess::Debug::Print(1,"CreateTable($table):");    ## error-handling    return 'Unknown_table' unless defined($tables{$table});    ## build list of known/existing tables;    ## if 'force' existing table is dropped first    if (defined($force) and $force) {       @known_tables = Show_Tables();       if (grep(/^$table$/,@known_tables)) {       $query = "DROP TABLE $table;";       }    }    ## path to mysqldump executable    my $connect = $MySQLaccess::MYSQLDUMP;    $connect .= " --defaults-file=$MySQLaccess::MYSQL_CNF --no-data";    # superuser, spassword transmitted via defaults-file    if (defined($MySQLaccess::Param{'rhost'}))     { $connect .= " --host=$MySQLaccess::Param{'rhost'}"; }    $connect .= " $MySQLaccess::ACCESS_DB";    $connect .= " $tables{$table}";    ## get creation-data for original table    $create = '';    my $mysqldump = $connect;    $mysqldump =~ s/ \$TABLE / $tbl /;    # open connection (not using /bin/sh -c)    MySQLaccess::Debug::Print(2,"Connecting to: $connect");    $pid=IPC::Open3::open3(\*DONTCARE,\*CREATE,"",split /\s+/,$mysqldump);    MySQLaccess::Debug::Print(2,"PID of open pipe: $pid");    #open(CREATE,"$mysqldump");    @create = <CREATE>;    $create = "@create";    foreach $nerror (sort(keys(%ACCESS_ERR))) {       MySQLaccess::Debug::Print(3,"check answer for error $ACCESS_ERR{$nerror}");       if (grep(/$ACCESS_ERR{$nerror}/i,$create)) {           MySQLaccess::Debug::Print(2,"Answer contain error [$nerror]");          return $nerror;        }    }    close(CREATE);    close(DONTCARE);    ## manipulate result for creation-data for temporary table    $create =~ s/CREATE TABLE $tables{$table} \(/CREATE TABLE $table \(/;    ## recreate temporary table    $query .= "$create\n";    $query .= "select 'ok';";    ## execute query

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -