mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Better fix for GRANT bug
tests/grant.pl: More options for test tests/grant.res: new test results
This commit is contained in:
@@ -1644,7 +1644,8 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables)
|
|||||||
found_table=1;
|
found_table=1;
|
||||||
Field *find=find_field_in_table(thd,tables->table,name,length,
|
Field *find=find_field_in_table(thd,tables->table,name,length,
|
||||||
grant_option &&
|
grant_option &&
|
||||||
tables->grant.want_privilege ,1);
|
tables->table->grant.want_privilege,
|
||||||
|
1);
|
||||||
if (find)
|
if (find)
|
||||||
{
|
{
|
||||||
if (find == WRONG_GRANT)
|
if (find == WRONG_GRANT)
|
||||||
@@ -1683,7 +1684,9 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables)
|
|||||||
for (; tables ; tables=tables->next)
|
for (; tables ; tables=tables->next)
|
||||||
{
|
{
|
||||||
Field *field=find_field_in_table(thd,tables->table,name,length,
|
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)
|
||||||
{
|
{
|
||||||
if (field == WRONG_GRANT)
|
if (field == WRONG_GRANT)
|
||||||
|
@@ -8,12 +8,13 @@ use DBI;
|
|||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
use strict;
|
use strict;
|
||||||
|
|
||||||
use vars qw($dbh $user_dbh $opt_help $opt_Information $opt_force $opt_debug
|
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_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";
|
$version="1.1";
|
||||||
$opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=0;
|
$opt_help=$opt_Information=$opt_force=$opt_debug=$opt_verbose=$opt_silent=0;
|
||||||
$opt_host="localhost",
|
$opt_host="localhost",
|
||||||
$opt_server="mysql";
|
$opt_server="mysql";
|
||||||
$opt_root_user="root";
|
$opt_root_user="root";
|
||||||
@@ -21,7 +22,7 @@ $opt_password="";
|
|||||||
$opt_user="grant_user";
|
$opt_user="grant_user";
|
||||||
$opt_database="grant_test";
|
$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);
|
usage() if ($opt_help || $opt_Information);
|
||||||
|
|
||||||
$user="$opt_user\@$opt_host";
|
$user="$opt_user\@$opt_host";
|
||||||
@@ -477,7 +478,10 @@ sub user_connect
|
|||||||
$password, { PrintError => 0});
|
$password, { PrintError => 0});
|
||||||
if (!$user_dbh)
|
if (!$user_dbh)
|
||||||
{
|
{
|
||||||
print "$DBI::errstr\n";
|
if ($opt_verbose || !$ignore_error)
|
||||||
|
{
|
||||||
|
print "Error on connect: $DBI::errstr\n";
|
||||||
|
}
|
||||||
if (!$ignore_error)
|
if (!$ignore_error)
|
||||||
{
|
{
|
||||||
die "The above should not have failed!";
|
die "The above should not have failed!";
|
||||||
@@ -492,7 +496,7 @@ sub user_connect
|
|||||||
sub safe_query
|
sub safe_query
|
||||||
{
|
{
|
||||||
my ($query,$ignore_error)=@_;
|
my ($query,$ignore_error)=@_;
|
||||||
if (do_query($dbh,$query))
|
if (do_query($dbh,$query, $ignore_error))
|
||||||
{
|
{
|
||||||
if (!defined($ignore_error))
|
if (!defined($ignore_error))
|
||||||
{
|
{
|
||||||
@@ -509,7 +513,7 @@ sub safe_query
|
|||||||
sub user_query
|
sub user_query
|
||||||
{
|
{
|
||||||
my ($query,$ignore_error)=@_;
|
my ($query,$ignore_error)=@_;
|
||||||
if (do_query($user_dbh,$query))
|
if (do_query($user_dbh,$query, $ignore_error))
|
||||||
{
|
{
|
||||||
if (!defined($ignore_error))
|
if (!defined($ignore_error))
|
||||||
{
|
{
|
||||||
@@ -525,8 +529,8 @@ sub user_query
|
|||||||
|
|
||||||
sub do_query
|
sub do_query
|
||||||
{
|
{
|
||||||
my ($my_dbh, $query)=@_;
|
my ($my_dbh, $query, $ignore_error)=@_;
|
||||||
my ($sth,$row,$tab,$col,$found);
|
my ($sth, $row, $tab, $col, $found, $fatal_error);
|
||||||
|
|
||||||
print "$query\n" if ($opt_debug || $opt_verbose);
|
print "$query\n" if ($opt_debug || $opt_verbose);
|
||||||
if (!($sth= $my_dbh->prepare($query)))
|
if (!($sth= $my_dbh->prepare($query)))
|
||||||
@@ -536,25 +540,32 @@ sub do_query
|
|||||||
}
|
}
|
||||||
if (!$sth->execute)
|
if (!$sth->execute)
|
||||||
{
|
{
|
||||||
print "Error in execute: $DBI::errstr\n";
|
$fatal_error= ($DBI::errstr =~ /parse error/);
|
||||||
die if ($DBI::errstr =~ /parse error/);
|
if (!$ignore_error || $opt_verbose || $fatal_error)
|
||||||
|
{
|
||||||
|
print "Error in execute: $DBI::errstr\n";
|
||||||
|
}
|
||||||
|
die if ($fatal_error);
|
||||||
$sth->finish;
|
$sth->finish;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
$found=0;
|
$found=0;
|
||||||
while (($row=$sth->fetchrow_arrayref))
|
if (!$opt_silent)
|
||||||
{
|
{
|
||||||
$found=1;
|
while (($row=$sth->fetchrow_arrayref))
|
||||||
$tab="";
|
|
||||||
foreach $col (@$row)
|
|
||||||
{
|
{
|
||||||
print $tab;
|
$found=1;
|
||||||
print defined($col) ? $col : "NULL";
|
$tab="";
|
||||||
$tab="\t";
|
foreach $col (@$row)
|
||||||
|
{
|
||||||
|
print $tab;
|
||||||
|
print defined($col) ? $col : "NULL";
|
||||||
|
$tab="\t";
|
||||||
|
}
|
||||||
|
print "\n";
|
||||||
}
|
}
|
||||||
print "\n";
|
print "\n" if ($found);
|
||||||
}
|
}
|
||||||
print "\n" if ($found);
|
|
||||||
$sth->finish;
|
$sth->finish;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -9,13 +9,13 @@ drop database grant_test
|
|||||||
Error in execute: Can't drop database 'grant_test'. Database doesn't exist
|
Error in execute: Can't drop database 'grant_test'. Database doesn't exist
|
||||||
create database grant_test
|
create database grant_test
|
||||||
Connecting grant_user
|
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
|
grant select on *.* to grant_user@localhost
|
||||||
set password FOR grant_user2@localhost = password('test')
|
set password FOR grant_user2@localhost = password('test')
|
||||||
Error in execute: Can't find any matching row in the user table
|
Error in execute: Can't find any matching row in the user table
|
||||||
set password FOR grant_user=password('test')
|
set password FOR grant_user=password('test')
|
||||||
Connecting grant_user
|
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=''
|
set password FOR grant_user=''
|
||||||
Connecting grant_user
|
Connecting grant_user
|
||||||
select * from mysql.user where user = 'grant_user'
|
select * from mysql.user where user = 'grant_user'
|
||||||
@@ -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
|
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'
|
Error in execute: grant command denied to user: 'grant_user@localhost' for table 'test'
|
||||||
set password FOR ''@''=''
|
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')
|
set password FOR root@localhost = password('test')
|
||||||
Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql'
|
Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql'
|
||||||
revoke select on *.* from grant_user@localhost
|
revoke select on *.* from grant_user@localhost
|
||||||
@@ -86,7 +86,7 @@ select count(*) from grant_test.test
|
|||||||
|
|
||||||
revoke ALL PRIVILEGES on *.* from grant_user@localhost
|
revoke ALL PRIVILEGES on *.* from grant_user@localhost
|
||||||
Connecting 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'
|
||||||
delete from user where user='grant_user'
|
delete from user where user='grant_user'
|
||||||
flush privileges
|
flush privileges
|
||||||
delete from user where user='grant_user'
|
delete from user where user='grant_user'
|
||||||
@@ -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'
|
Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test'
|
||||||
REVOKE GRANT OPTION on grant_test.* from grant_user@localhost
|
REVOKE GRANT OPTION on grant_test.* from grant_user@localhost
|
||||||
Connecting 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 ALL PRIVILEGES on grant_test.* to grant_user@localhost
|
grant ALL PRIVILEGES on grant_test.* to grant_user@localhost
|
||||||
Connecting grant_user
|
Connecting grant_user
|
||||||
select * from mysql.user where user = 'grant_user'
|
select * from mysql.user where user = 'grant_user'
|
||||||
@@ -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'
|
select * from mysql.db where user = 'grant_user'
|
||||||
Connecting 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
|
grant create on grant_test.test2 to grant_user@localhost
|
||||||
Connecting grant_user
|
Connecting grant_user
|
||||||
create table grant_test.test2 (a int not null)
|
create table grant_test.test2 (a int not null)
|
||||||
@@ -168,7 +168,7 @@ Error in execute: select command denied to user: 'grant_user@localhost' for tabl
|
|||||||
show keys from test
|
show keys from test
|
||||||
Error in execute: select command denied to user: 'grant_user@localhost' for table 'test'
|
Error in execute: select command denied to user: 'grant_user@localhost' for table 'test'
|
||||||
show columns from test2
|
show columns from test2
|
||||||
a int(11) 0
|
a int(11) 0
|
||||||
|
|
||||||
show keys from test2
|
show keys from test2
|
||||||
select * from test
|
select * from test
|
||||||
|
Reference in New Issue
Block a user