diff options
author | unknown <serg@sergbook.mysql.com> | 2004-12-30 21:11:40 +0100 |
---|---|---|
committer | unknown <serg@sergbook.mysql.com> | 2004-12-30 21:11:40 +0100 |
commit | 379613c3e274147f240a25b10eb677e3ee77aa34 (patch) | |
tree | 3391f0694847502a54c81a4b70a1a4ffb0ff4f9b | |
parent | 49501611aa534efcd18d3ee3bf94ec1ba13aa6f2 (diff) | |
parent | 40a0199e77aa5305a6699b0572e8d913eea8d170 (diff) | |
download | mariadb-git-379613c3e274147f240a25b10eb677e3ee77aa34.tar.gz |
merged
-rw-r--r-- | mysql-test/r/alter_table.result | 2 | ||||
-rw-r--r-- | mysql-test/r/grant_cache.result | 6 | ||||
-rw-r--r-- | sql/sql_acl.cc | 101 |
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), |