Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
6c81552d
Commit
6c81552d
authored
Mar 13, 2003
by
monty@mashka.mysql.fi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Better fix for GRANT bug
parent
e10fd444
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
45 additions
and
31 deletions
+45
-31
sql/sql_base.cc
sql/sql_base.cc
+5
-2
tests/grant.pl
tests/grant.pl
+33
-22
tests/grant.res
tests/grant.res
+7
-7
No files found.
sql/sql_base.cc
View file @
6c81552d
...
@@ -1644,7 +1644,8 @@ find_field_in_tables(THD *thd,Item_field *item,TABLE_LIST *tables)
...
@@ -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)
...
@@ -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
)
...
...
tests/grant.pl
View file @
6c81552d
...
@@ -8,12 +8,13 @@ use DBI;
...
@@ -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="";
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
...
@@ -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
;
}
}
tests/grant.res
View file @
6c81552d
...
@@ -9,13 +9,13 @@ drop database grant_test
...
@@ -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
...
@@ -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
...
@@ -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)
...
@@ -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
...
@@ -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
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment