summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <serg@sergbook.mysql.com>2004-12-30 21:11:40 +0100
committerunknown <serg@sergbook.mysql.com>2004-12-30 21:11:40 +0100
commit379613c3e274147f240a25b10eb677e3ee77aa34 (patch)
tree3391f0694847502a54c81a4b70a1a4ffb0ff4f9b
parent49501611aa534efcd18d3ee3bf94ec1ba13aa6f2 (diff)
parent40a0199e77aa5305a6699b0572e8d913eea8d170 (diff)
downloadmariadb-git-379613c3e274147f240a25b10eb677e3ee77aa34.tar.gz
merged
-rw-r--r--mysql-test/r/alter_table.result2
-rw-r--r--mysql-test/r/grant_cache.result6
-rw-r--r--sql/sql_acl.cc101
3 files changed, 54 insertions, 55 deletions
diff --git a/mysql-test/r/alter_table.result b/mysql-test/r/alter_table.result
index 9e14ca85a29..5a47110dda3 100644
--- a/mysql-test/r/alter_table.result
+++ b/mysql-test/r/alter_table.result
@@ -121,7 +121,7 @@ create database mysqltest;
create table mysqltest.t1 (a int,b int,c int);
grant all on mysqltest.t1 to mysqltest_1@localhost;
alter table t1 rename t2;
-ERROR 42000: insert command denied to user 'mysqltest_1'@'localhost' for table 't2'
+ERROR 42000: INSERT,CREATE command denied to user: 'mysqltest_1@localhost' for table 't2'
revoke all privileges on mysqltest.t1 from mysqltest_1@localhost;
delete from mysql.user where user=_binary'mysqltest_1';
drop database mysqltest;
diff --git a/mysql-test/r/grant_cache.result b/mysql-test/r/grant_cache.result
index 892f1d940a6..b3e16f1fcf0 100644
--- a/mysql-test/r/grant_cache.result
+++ b/mysql-test/r/grant_cache.result
@@ -134,7 +134,7 @@ a b c a
1 1 1 test.t1
2 2 2 test.t1
select * from t2;
-ERROR 42000: select command denied to user 'mysqltest_2'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user: 'mysqltest_2@localhost' for table 't2'
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 6
@@ -148,7 +148,7 @@ select "user3";
user3
user3
select * from t1;
-ERROR 42000: select command denied to user 'mysqltest_3'@'localhost' for column 'b' in table 't1'
+ERROR 42000: SELECT command denied to user: 'mysqltest_3@localhost' for column 'b' in table 't1'
select a from t1;
a
1
@@ -156,7 +156,7 @@ a
select c from t1;
ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'c' in table 't1'
select * from t2;
-ERROR 42000: select command denied to user 'mysqltest_3'@'localhost' for table 't2'
+ERROR 42000: SELECT command denied to user: 'mysqltest_3@localhost' for table 't2'
select mysqltest.t1.c from test.t1,mysqltest.t1;
ERROR 42000: SELECT command denied to user 'mysqltest_3'@'localhost' for column 'c' in table 't1'
show status like "Qcache_queries_in_cache";
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 36629656c11..5579aa9b3f5 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -2256,39 +2256,58 @@ int mysql_table_grant(THD *thd, TABLE_LIST *table_list,
DBUG_RETURN(-1);
}
- if (columns.elements && !revoke_grant)
+ if (!revoke_grant)
{
- TABLE *table;
- class LEX_COLUMN *column;
- List_iterator <LEX_COLUMN> column_iter(columns);
-
- if (!(table=open_ltable(thd,table_list,TL_READ)))
- DBUG_RETURN(-1);
- while ((column = column_iter++))
+ if (columns.elements && !revoke_grant)
{
- uint unused_field_idx= NO_CACHED_FIELD_INDEX;
- if (!find_field_in_table(thd,table,column->column.ptr(),
- column->column.length(),0,0,
- &unused_field_idx))
+ TABLE *table;
+ class LEX_COLUMN *column;
+ List_iterator <LEX_COLUMN> column_iter(columns);
+
+ if (!(table=open_ltable(thd,table_list,TL_READ)))
+ DBUG_RETURN(-1);
+ while ((column = column_iter++))
{
- my_error(ER_BAD_FIELD_ERROR, MYF(0),
- column->column.c_ptr(), table_list->alias);
- DBUG_RETURN(-1);
+ uint unused_field_idx= NO_CACHED_FIELD_INDEX;
+ Field *f= find_field_in_table(thd,table,column->column.ptr(),
+ column->column.length(),1,0,&unused_field_idx);
+ if (!f)
+ {
+ my_error(ER_BAD_FIELD_ERROR, MYF(0),
+ column->column.c_ptr(), table_list->alias);
+ DBUG_RETURN(-1);
+ }
+ if (f == (Field*)-1)
+ {
+ DBUG_RETURN(-1);
+ }
+ column_priv|= column->rights;
}
- column_priv|= column->rights;
+ close_thread_tables(thd);
}
- close_thread_tables(thd);
- }
- else if (!(rights & CREATE_ACL) && !revoke_grant)
- {
- char buf[FN_REFLEN];
- sprintf(buf,"%s/%s/%s.frm",mysql_data_home, table_list->db,
- table_list->real_name);
- fn_format(buf,buf,"","",4+16+32);
- if (access(buf,F_OK))
+ else
{
- my_error(ER_NO_SUCH_TABLE, MYF(0), table_list->db, table_list->alias);
- DBUG_RETURN(-1);
+ if (!(rights & CREATE_ACL))
+ {
+ char buf[FN_REFLEN];
+ sprintf(buf,"%s/%s/%s.frm",mysql_data_home, table_list->db,
+ table_list->real_name);
+ fn_format(buf,buf,"","",4+16+32);
+ if (access(buf,F_OK))
+ {
+ my_error(ER_NO_SUCH_TABLE, MYF(0), table_list->db, table_list->alias);
+ DBUG_RETURN(-1);
+ }
+ }
+ if (table_list->grant.want_privilege)
+ {
+ char command[128];
+ get_privilege_desc(command, sizeof(command),
+ table_list->grant.want_privilege);
+ my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0),
+ command, thd->priv_user, thd->host_or_ip, table_list->alias);
+ DBUG_RETURN(-1);
+ }
}
}
@@ -2773,25 +2792,8 @@ err:
rw_unlock(&LOCK_grant);
if (!no_errors) // Not a silent skip of table
{
- const char *command="";
- if (want_access & SELECT_ACL)
- command= "select";
- else if (want_access & INSERT_ACL)
- command= "insert";
- else if (want_access & UPDATE_ACL)
- command= "update";
- else if (want_access & DELETE_ACL)
- command= "delete";
- else if (want_access & DROP_ACL)
- command= "drop";
- else if (want_access & CREATE_ACL)
- command= "create";
- else if (want_access & ALTER_ACL)
- command= "alter";
- else if (want_access & INDEX_ACL)
- command= "index";
- else if (want_access & GRANT_ACL)
- command= "grant";
+ char command[128];
+ get_privilege_desc(command, sizeof(command), want_access);
net_printf(thd,ER_TABLEACCESS_DENIED_ERROR,
command,
thd->priv_user,
@@ -2906,11 +2908,8 @@ bool check_grant_all_columns(THD *thd, ulong want_access, TABLE *table)
err:
rw_unlock(&LOCK_grant);
err2:
- const char *command= "";
- if (want_access & SELECT_ACL)
- command= "select";
- else if (want_access & INSERT_ACL)
- command= "insert";
+ char command[128];
+ get_privilege_desc(command, sizeof(command), want_access);
my_printf_error(ER_COLUMNACCESS_DENIED_ERROR,
ER(ER_COLUMNACCESS_DENIED_ERROR),
MYF(0),