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

📄 mysql_setpermission

📁 开启mysql的远程连接的方法 mysql-noinstall-5.1.6-alpha-win32.zip
💻
📖 第 1 页 / 共 2 页
字号:
#!/usr/bin/perl## Emacs, this is -*- perl -*- mode? :-)####        Permission setter for MySQL####        mady by Luuk de Boer (luuk@wxs.nl) 1998.##        it's made under GPL ...:-))################################################################################## History#### 1.0 first start of the program## 1.1 some changes from monty and after that##     initial release in mysql 3.22.10 (nov 1998)## 1.2 begin screen now in a loop + quit is using 0 instead of 9##     after ideas of Paul DuBois.## 1.2a Add Grant, References, Index and Alter privilege handling (Monty)## 1.3 Applied patch provided by Martin Mokrejs <mmokrejs@natur.cuni.cz>##     (General code cleanup, use the GRANT statement instead of updating##     the privilege tables directly, added option to revoke privileges)#### TODO## empty ... suggestions ... mail them to me ...$version="1.3";use DBI;use Getopt::Long;use strict;use vars qw($dbh $sth $hostname $opt_user $opt_password $opt_help $opt_host	    $opt_socket $opt_port $host $version);my $sqlhost = "";my $user = "";$dbh=$host=$opt_user= $opt_password= $opt_help= $opt_host= $opt_socket= "";$opt_port=0;read_my_cnf();		# Read options from ~/.my.cnfGetOptions("user=s","password=s","help","host=s","socket=s","port=i");usage() if ($opt_help); # the help functionif ($opt_host eq ''){  $sqlhost = "localhost";}else{  $sqlhost = $opt_host;}# ask for a password if no password is set alreadyif ($opt_password eq ''){  system "stty -echo";  print "Password for user $opt_user to connect to MySQL: ";  $opt_password = <STDIN>;  chomp($opt_password);  system "stty echo";  print "\n";}# make the connection to MySQL$dbh= DBI->connect("DBI:mysql:mysql:host=$sqlhost:port=$opt_port:mysql_socket=$opt_socket",$opt_user,$opt_password, {PrintError => 0}) ||  die("Can't make a connection to the mysql server.\n The error: $DBI::errstr");# the start of the program&q1();exit(0); # the end...###### below all subroutines of the program######### the beginning of the program###sub q1 { # first question ...  my ($answer,$end);  while (! $end) {    print "#"x70;    print "\n";    print "## Welcome to the permission setter $version for MySQL.\n";    print "## made by Luuk de Boer\n";    print "#"x70;    print "\n";    print "What would you like to do:\n";    print "  1. Set password for an existing user.\n";    print "  2. Create a database + user privilege for that database\n";		print "     and host combination (user can only do SELECT)\n";    print "  3. Create/append user privilege for an existing database\n";		print "     and host combination (user can only do SELECT)\n";    print "  4. Create/append broader user privileges for an existing\n";		print "     database and host combination\n";		print "     (user can do SELECT,INSERT,UPDATE,DELETE)\n";    print "  5. Create/append quite extended user privileges for an\n";		print "     existing database and host combination (user can do\n";		print "     SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,\n";		print "     LOCK TABLES,CREATE TEMPORARY TABLES)\n";    print "  6. Create/append database administrative privileges for an\n";		print "     existing database and host combination (user can do\n";		print "     SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,LOCK TABLES,\n";		print "     CREATE TEMPORARY TABLES,SHOW DATABASES,PROCESS)\n";    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,6,7,0]: ";    while (<STDIN>) {      $answer = $_;      chomp($answer);      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";      }      last;    }  }}#### set a password for a user###sub setpwd{  my ($user,$pass,$host) = "";  print "\n\nSetting a (new) password for a user.\n";  $user = user();  $pass = newpass($user);  $host = hosts($user);  print "#"x70;  print "\n\n";  print "That was it ... here is an overview of what you gave to me:\n";  print "The username 		: $user\n";#  print "The password		: $pass\n";  print "The host		: $host\n";  print "#"x70;  print "\n\n";  print "Are you pretty sure you would like to implement this [yes/no]: ";  my $no = <STDIN>;  chomp($no);  if ($no =~ /n/i)  {    print "Okay .. that was it then ... See ya\n\n";    return(0);  }  else  {    print "Okay ... let's go then ...\n\n";  }  $user = $dbh->quote($user);  $host = $dbh->quote($host);  if ($pass eq '')  {    $pass = "''";  }  else  {    $pass = "PASSWORD(". $dbh->quote($pass) . ")";  }  my $sth = $dbh->prepare("update user set Password=$pass where User = $user and Host = $host") || die $dbh->errstr;  $sth->execute || die $dbh->errstr;  $sth->finish;  print "The password is set for user $user.\n\n";}#### all things which will be added are done here###sub addall {  my ($todo) = @_;  my ($answer,$good,$db,$user,$pass,$host,$priv);  if ($todo == 2) {    $db = newdatabase();  } else {    $db = database();  }  $user = newuser();  $pass = newpass("$user");  $host = newhosts();  print "#"x70;  print "\n\n";  print "That was it ... here is an overview of what you gave to me:\n";  print "The database name	: $db\n";  print "The username 		: $user\n";#  print "The password		: $pass\n";  print "The host(s)		: $host\n";  print "#"x70;  print "\n\n";  print "Are you pretty sure you would like to implement this [yes/no]: ";  my $no = <STDIN>;  chomp($no);  if ($no =~ /n/i) {    print "Okay .. that was it then ... See ya\n\n";    return(0);  } else {    print "Okay ... let's go then ...\n\n";  }  if ($todo == 2) {    # create the database    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";  }  }  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);  if (!$user) {     die "username not specified: $user\n";  }  if (!$db) {     die "databasename is not specified nor *\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;    }    }  $dbh->do("FLUSH PRIVILEGES") || print STDERR "Can't flush privileges\n";  print "Everything is inserted and mysql privileges have been reloaded.\n\n";}#### ask for a new database name###sub newdatabase {  my ($answer,$good,$db);  print "\n\nWhich database would you like to add: ";  while (<STDIN>) {    $answer = $_;    $good = 0;    chomp($answer);    if ($answer) {      my $sth = $dbh->prepare("SHOW DATABASES") || die $dbh->errstr;      $sth->execute || die $dbh->errstr;      while (my @r = $sth->fetchrow_array) {        if ($r[0] eq $answer) {          print "\n\nSorry, this database name is already in use; try something else: ";          $good = 1;        }      }    } else {      print "You must type something ...\nTry again: ";      next;    }    last if ($good == 0);  }  $db = $answer;  print "The new database $db will be created\n";  return($db);}#### select a database###sub database {  my ($answer,$good,$db);  print "\n\nWhich database from existing databases would you like to select: \n";  print "You can choose from: \n";  my $sth = $dbh->prepare("show databases") || die $dbh->errstr;  $sth->execute || die $dbh->errstr;  while (my @r = $sth->fetchrow_array) {    print "  - $r[0] \n";  }  print "Which database will it be (case sensitive). Type * for any: \n";  while (<STDIN>) {    $answer = $_;    $good = 0;    chomp($answer);    if ($answer) {      if ($answer eq "*") {        print "OK, the user entry will NOT be limited to any database";        return("*");      }      my $sth = $dbh->prepare("show databases") || die $dbh->errstr;      $sth->execute || die $dbh->errstr;      while (my @r = $sth->fetchrow_array) {        if ($r[0] eq $answer) {          $good = 1;          $db = $r[0];          last;

⌨️ 快捷键说明

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