diff options
author | unknown <ram@gw.mysql.r18.ru> | 2004-12-02 13:34:30 +0400 |
---|---|---|
committer | unknown <ram@gw.mysql.r18.ru> | 2004-12-02 13:34:30 +0400 |
commit | 491a3d90a99c3849c220592b4f8ff29de8484de9 (patch) | |
tree | c596bb93ad8484a3ee8304221ae337a4af3061c8 | |
parent | 6f20687e202303fe61a4e827fe74a5133e57337a (diff) | |
download | mariadb-git-491a3d90a99c3849c220592b4f8ff29de8484de9.tar.gz |
Fixes (bug #6932: 'revoke all privileges...' doesn't remove all proper columns from columns_priv
bug #6933: error in the tests/grant.pl test).
mysql-test/r/grant.result:
A fix (bug #6932: 'revoke all privileges...' doesn't remove all proper columns from columns_priv).
mysql-test/t/grant.test:
A fix (bug #6932: 'revoke all privileges...' doesn't remove all proper columns from columns_priv).
sql/sql_acl.cc:
A fix (bug #6932: 'revoke all privileges...' doesn't remove all proper columns from columns_priv).
The problem is that we use whole key length (including 'Column_name' keypart)
during scanning the 'columns_priv' table in case of revoke_grant.
tests/grant.pl:
A fix (bug #6933: error in the tests/grant.pl test).
-rw-r--r-- | mysql-test/r/grant.result | 20 | ||||
-rw-r--r-- | mysql-test/t/grant.test | 13 | ||||
-rw-r--r-- | sql/sql_acl.cc | 2 | ||||
-rw-r--r-- | tests/grant.pl | 4 |
4 files changed, 36 insertions, 3 deletions
diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result index f903e35fa1f..d163e1033fc 100644 --- a/mysql-test/r/grant.result +++ b/mysql-test/r/grant.result @@ -321,3 +321,23 @@ DROP DATABASE testdb7; DROP DATABASE testdb8; DROP DATABASE testdb9; DROP DATABASE testdb10; +create table t1(a int, b int, c int, d int); +grant insert(b), insert(c), insert(d), insert(a) on t1 to grant_user@localhost; +show grants for grant_user@localhost; +Grants for grant_user@localhost +GRANT USAGE ON *.* TO 'grant_user'@'localhost' +GRANT INSERT (a, d, c, b) ON `test`.`t1` TO 'grant_user'@'localhost' +select Host,Db,User,Table_name,Column_name,Column_priv from mysql.columns_priv; +Host Db User Table_name Column_name Column_priv +localhost test grant_user t1 c Insert +localhost test grant_user t1 b Insert +localhost test grant_user t1 a Insert +localhost test grant_user t1 d Insert +revoke ALL PRIVILEGES on t1 from grant_user@localhost; +show grants for grant_user@localhost; +Grants for grant_user@localhost +GRANT USAGE ON *.* TO 'grant_user'@'localhost' +select Host,Db,User,Table_name,Column_name,Column_priv from mysql.columns_priv; +Host Db User Table_name Column_name Column_priv +drop user grant_user@localhost; +drop table t1; diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test index 963b9ae5080..169dd03ad86 100644 --- a/mysql-test/t/grant.test +++ b/mysql-test/t/grant.test @@ -267,3 +267,16 @@ DROP DATABASE testdb8; DROP DATABASE testdb9; DROP DATABASE testdb10; +# +# Bug #6932: a problem with 'revoke ALL PRIVILEGES' +# + +create table t1(a int, b int, c int, d int); +grant insert(b), insert(c), insert(d), insert(a) on t1 to grant_user@localhost; +show grants for grant_user@localhost; +select Host,Db,User,Table_name,Column_name,Column_priv from mysql.columns_priv; +revoke ALL PRIVILEGES on t1 from grant_user@localhost; +show grants for grant_user@localhost; +select Host,Db,User,Table_name,Column_name,Column_priv from mysql.columns_priv; +drop user grant_user@localhost; +drop table t1; diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index d6f52fed1d2..f1698dcc911 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -2035,7 +2035,7 @@ static int replace_column_table(GRANT_TABLE *g_t, { table->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS); if (table->file->index_read(table->record[0], (byte*) table->field[0]->ptr, - table->key_info[0].key_length, + key_length, HA_READ_KEY_EXACT)) goto end; diff --git a/tests/grant.pl b/tests/grant.pl index eb2d00f3e1d..cd6a2eb80de 100644 --- a/tests/grant.pl +++ b/tests/grant.pl @@ -74,9 +74,9 @@ safe_query("revoke select(user) on mysql.user from $user"); safe_query("grant select on *.* to $user"); safe_query("set password FOR ${opt_user}2\@$opt_host = password('test')",1); -safe_query("set password FOR $opt_user=password('test')"); +safe_query("set password FOR $opt_user\@$opt_host=password('test')"); user_connect(1); -safe_query("set password FOR $opt_user=''"); +safe_query("set password FOR $opt_user\@$opt_host=''"); user_connect(0); user_query("select * from mysql.user where user = '$opt_user'"); user_query("select * from mysql.db where user = '$opt_user'"); |