Loading sql/sql_base.cc +5 −2 Original line number Diff line number Diff line Loading @@ -1644,7 +1644,8 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables) found_table=1; Field *find=find_field_in_table(thd,tables->table,name,length, grant_option && tables->grant.want_privilege ,1); tables->table->grant.want_privilege, 1); if (find) { if (find == WRONG_GRANT) Loading Loading @@ -1683,7 +1684,9 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables) for (; tables ; tables=tables->next) { Field *field=find_field_in_table(thd,tables->table,name,length, grant_option && tables->grant.want_privilege ,allow_rowid); grant_option && tables->table->grant.want_privilege, allow_rowid); if (field) { if (field == WRONG_GRANT) Loading tests/grant.pl +33 −22 Original line number Diff line number Diff line Loading @@ -10,10 +10,11 @@ use strict; use vars qw($dbh $user_dbh $opt_help $opt_Information $opt_force $opt_debug $opt_verbose $opt_server $opt_root_user $opt_password $opt_user $opt_database $opt_host $version $user $tables_cols $columns_cols); $opt_database $opt_host $version $user $tables_cols $columns_cols $opt_silent); $version="1.0"; $opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=0; $version="1.1"; $opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=$opt_silent=0; $opt_host="localhost", $opt_server="mysql"; $opt_root_user="root"; Loading @@ -21,7 +22,7 @@ $opt_password=""; $opt_user="grant_user"; $opt_database="grant_test"; GetOptions("Information","help","server=s","root-user=s","password=s","user","database=s","force","host=s","debug","verbose") || usage(); GetOptions("Information","help","server=s","root-user=s","password=s","user","database=s","force","host=s","debug","verbose","silent") || usage(); usage() if ($opt_help || $opt_Information); $user="$opt_user\@$opt_host"; Loading Loading @@ -477,7 +478,10 @@ sub user_connect $password, { PrintError => 0}); if (!$user_dbh) { print "$DBI::errstr\n"; if ($opt_verbose || !$ignore_error) { print "Error on connect: $DBI::errstr\n"; } if (!$ignore_error) { die "The above should not have failed!"; Loading @@ -492,7 +496,7 @@ sub user_connect sub safe_query { my ($query,$ignore_error)=@_; if (do_query($dbh,$query)) if (do_query($dbh,$query, $ignore_error)) { if (!defined($ignore_error)) { Loading @@ -509,7 +513,7 @@ sub safe_query sub user_query { my ($query,$ignore_error)=@_; if (do_query($user_dbh,$query)) if (do_query($user_dbh,$query, $ignore_error)) { if (!defined($ignore_error)) { Loading @@ -525,8 +529,8 @@ sub user_query sub do_query { my ($my_dbh, $query)=@_; my ($sth,$row,$tab,$col,$found); my ($my_dbh, $query, $ignore_error)=@_; my ($sth, $row, $tab, $col, $found, $fatal_error); print "$query\n" if ($opt_debug || $opt_verbose); if (!($sth= $my_dbh->prepare($query))) Loading @@ -535,13 +539,19 @@ sub do_query return 1; } if (!$sth->execute) { $fatal_error= ($DBI::errstr =~ /parse error/); if (!$ignore_error || $opt_verbose || $fatal_error) { print "Error in execute: $DBI::errstr\n"; die if ($DBI::errstr =~ /parse error/); } die if ($fatal_error); $sth->finish; return 1; } $found=0; if (!$opt_silent) { while (($row=$sth->fetchrow_arrayref)) { $found=1; Loading @@ -555,6 +565,7 @@ sub do_query print "\n"; } print "\n" if ($found); } $sth->finish; return 0; } tests/grant.res +7 −7 Original line number Diff line number Diff line Loading @@ -9,13 +9,13 @@ drop database grant_test Error in execute: Can't drop database 'grant_test'. Database doesn't exist create database grant_test Connecting grant_user Access denied for user: '@localhost' to database 'grant_test' Error on connect: Access denied for user: '@localhost' to database 'grant_test' grant select on *.* to grant_user@localhost set password FOR grant_user2@localhost = password('test') Error in execute: Can't find any matching row in the user table set password FOR grant_user=password('test') Connecting grant_user Access denied for user: 'grant_user@localhost' (Using password: NO) Error on connect: Access denied for user: 'grant_user@localhost' (Using password: NO) set password FOR grant_user='' Connecting grant_user select * from mysql.user where user = 'grant_user' Loading Loading @@ -48,7 +48,7 @@ Error in execute: The host or user argument to GRANT is too long grant select on grant_test.test to grant_user with grant option Error in execute: grant command denied to user: 'grant_user@localhost' for table 'test' set password FOR ''@''='' Error in execute: You are using MySQL as an anonymous users and anonymous users are not allowed to change passwords Error in execute: Can't find any matching row in the user table set password FOR root@localhost = password('test') Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql' revoke select on *.* from grant_user@localhost Loading Loading @@ -86,7 +86,7 @@ select count(*) from grant_test.test revoke ALL PRIVILEGES on *.* from grant_user@localhost Connecting grant_user Access denied for user: 'grant_user@localhost' to database 'grant_test' Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' delete from user where user='grant_user' flush privileges delete from user where user='grant_user' Loading Loading @@ -133,7 +133,7 @@ insert into grant_test.test values (6,0) Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' REVOKE GRANT OPTION on grant_test.* from grant_user@localhost Connecting grant_user Access denied for user: 'grant_user@localhost' to database 'grant_test' Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' grant ALL PRIVILEGES on grant_test.* to grant_user@localhost Connecting grant_user select * from mysql.user where user = 'grant_user' Loading @@ -156,7 +156,7 @@ localhost grant_user N N N N N N N N N N N N N N select * from mysql.db where user = 'grant_user' Connecting grant_user Access denied for user: 'grant_user@localhost' to database 'grant_test' Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' grant create on grant_test.test2 to grant_user@localhost Connecting grant_user create table grant_test.test2 (a int not null) Loading Loading
sql/sql_base.cc +5 −2 Original line number Diff line number Diff line Loading @@ -1644,7 +1644,8 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables) found_table=1; Field *find=find_field_in_table(thd,tables->table,name,length, grant_option && tables->grant.want_privilege ,1); tables->table->grant.want_privilege, 1); if (find) { if (find == WRONG_GRANT) Loading Loading @@ -1683,7 +1684,9 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables) for (; tables ; tables=tables->next) { Field *field=find_field_in_table(thd,tables->table,name,length, grant_option && tables->grant.want_privilege ,allow_rowid); grant_option && tables->table->grant.want_privilege, allow_rowid); if (field) { if (field == WRONG_GRANT) Loading
tests/grant.pl +33 −22 Original line number Diff line number Diff line Loading @@ -10,10 +10,11 @@ use strict; use vars qw($dbh $user_dbh $opt_help $opt_Information $opt_force $opt_debug $opt_verbose $opt_server $opt_root_user $opt_password $opt_user $opt_database $opt_host $version $user $tables_cols $columns_cols); $opt_database $opt_host $version $user $tables_cols $columns_cols $opt_silent); $version="1.0"; $opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=0; $version="1.1"; $opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=$opt_silent=0; $opt_host="localhost", $opt_server="mysql"; $opt_root_user="root"; Loading @@ -21,7 +22,7 @@ $opt_password=""; $opt_user="grant_user"; $opt_database="grant_test"; GetOptions("Information","help","server=s","root-user=s","password=s","user","database=s","force","host=s","debug","verbose") || usage(); GetOptions("Information","help","server=s","root-user=s","password=s","user","database=s","force","host=s","debug","verbose","silent") || usage(); usage() if ($opt_help || $opt_Information); $user="$opt_user\@$opt_host"; Loading Loading @@ -477,7 +478,10 @@ sub user_connect $password, { PrintError => 0}); if (!$user_dbh) { print "$DBI::errstr\n"; if ($opt_verbose || !$ignore_error) { print "Error on connect: $DBI::errstr\n"; } if (!$ignore_error) { die "The above should not have failed!"; Loading @@ -492,7 +496,7 @@ sub user_connect sub safe_query { my ($query,$ignore_error)=@_; if (do_query($dbh,$query)) if (do_query($dbh,$query, $ignore_error)) { if (!defined($ignore_error)) { Loading @@ -509,7 +513,7 @@ sub safe_query sub user_query { my ($query,$ignore_error)=@_; if (do_query($user_dbh,$query)) if (do_query($user_dbh,$query, $ignore_error)) { if (!defined($ignore_error)) { Loading @@ -525,8 +529,8 @@ sub user_query sub do_query { my ($my_dbh, $query)=@_; my ($sth,$row,$tab,$col,$found); my ($my_dbh, $query, $ignore_error)=@_; my ($sth, $row, $tab, $col, $found, $fatal_error); print "$query\n" if ($opt_debug || $opt_verbose); if (!($sth= $my_dbh->prepare($query))) Loading @@ -535,13 +539,19 @@ sub do_query return 1; } if (!$sth->execute) { $fatal_error= ($DBI::errstr =~ /parse error/); if (!$ignore_error || $opt_verbose || $fatal_error) { print "Error in execute: $DBI::errstr\n"; die if ($DBI::errstr =~ /parse error/); } die if ($fatal_error); $sth->finish; return 1; } $found=0; if (!$opt_silent) { while (($row=$sth->fetchrow_arrayref)) { $found=1; Loading @@ -555,6 +565,7 @@ sub do_query print "\n"; } print "\n" if ($found); } $sth->finish; return 0; }
tests/grant.res +7 −7 Original line number Diff line number Diff line Loading @@ -9,13 +9,13 @@ drop database grant_test Error in execute: Can't drop database 'grant_test'. Database doesn't exist create database grant_test Connecting grant_user Access denied for user: '@localhost' to database 'grant_test' Error on connect: Access denied for user: '@localhost' to database 'grant_test' grant select on *.* to grant_user@localhost set password FOR grant_user2@localhost = password('test') Error in execute: Can't find any matching row in the user table set password FOR grant_user=password('test') Connecting grant_user Access denied for user: 'grant_user@localhost' (Using password: NO) Error on connect: Access denied for user: 'grant_user@localhost' (Using password: NO) set password FOR grant_user='' Connecting grant_user select * from mysql.user where user = 'grant_user' Loading Loading @@ -48,7 +48,7 @@ Error in execute: The host or user argument to GRANT is too long grant select on grant_test.test to grant_user with grant option Error in execute: grant command denied to user: 'grant_user@localhost' for table 'test' set password FOR ''@''='' Error in execute: You are using MySQL as an anonymous users and anonymous users are not allowed to change passwords Error in execute: Can't find any matching row in the user table set password FOR root@localhost = password('test') Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql' revoke select on *.* from grant_user@localhost Loading Loading @@ -86,7 +86,7 @@ select count(*) from grant_test.test revoke ALL PRIVILEGES on *.* from grant_user@localhost Connecting grant_user Access denied for user: 'grant_user@localhost' to database 'grant_test' Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' delete from user where user='grant_user' flush privileges delete from user where user='grant_user' Loading Loading @@ -133,7 +133,7 @@ insert into grant_test.test values (6,0) Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test' REVOKE GRANT OPTION on grant_test.* from grant_user@localhost Connecting grant_user Access denied for user: 'grant_user@localhost' to database 'grant_test' Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' grant ALL PRIVILEGES on grant_test.* to grant_user@localhost Connecting grant_user select * from mysql.user where user = 'grant_user' Loading @@ -156,7 +156,7 @@ localhost grant_user N N N N N N N N N N N N N N select * from mysql.db where user = 'grant_user' Connecting grant_user Access denied for user: 'grant_user@localhost' to database 'grant_test' Error on connect: Access denied for user: 'grant_user@localhost' to database 'grant_test' grant create on grant_test.test2 to grant_user@localhost Connecting grant_user create table grant_test.test2 (a int not null) Loading