Commit de275d94 authored by unknown's avatar unknown
Browse files

Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-5.0

into mysql.com:/home/gluh/MySQL/Bugs/5.0.10261

parents c394ec89 6cc34bf2
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -734,3 +734,17 @@ x_real NULL NULL
x_float	NULL	NULL
x_double_precision	NULL	NULL
drop table t1;
create user mysqltest_4@localhost;
SELECT TABLE_NAME, COLUMN_NAME, PRIVILEGES FROM INFORMATION_SCHEMA.COLUMNS 
where COLUMN_NAME='TABLE_NAME';
TABLE_NAME	COLUMN_NAME	PRIVILEGES
TABLES	TABLE_NAME	select
COLUMNS	TABLE_NAME	select
STATISTICS	TABLE_NAME	select
VIEWS	TABLE_NAME	select
TABLE_PRIVILEGES	TABLE_NAME	select
COLUMN_PRIVILEGES	TABLE_NAME	select
TABLE_CONSTRAINTS	TABLE_NAME	select
KEY_COLUMN_USAGE	TABLE_NAME	select
delete from mysql.user where user='mysqltest_4';
flush privileges;
+13 −0
Original line number Diff line number Diff line
@@ -473,3 +473,16 @@ SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH, CHARACTER_OCTET_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME= 't1';
drop table t1;

#
# Bug#10261  INFORMATION_SCHEMA.COLUMNS, incomplete result for non root user
#

create user mysqltest_4@localhost;
connect (user4,localhost,mysqltest_4,,);
connection user4;
SELECT TABLE_NAME, COLUMN_NAME, PRIVILEGES FROM INFORMATION_SCHEMA.COLUMNS 
where COLUMN_NAME='TABLE_NAME';
connection default;
delete from mysql.user where user='mysqltest_4';
flush privileges;
+8 −2
Original line number Diff line number Diff line
@@ -2306,7 +2306,8 @@ static int get_schema_column_record(THD *thd, struct st_table_list *tables,
      col_access= get_column_grant(thd, &tables->grant, 
                                   base_name, file_name,
                                   field->field_name) & COL_ACLS;
      if (lex->orig_sql_command != SQLCOM_SHOW_FIELDS  && !col_access)
      if (lex->orig_sql_command != SQLCOM_SHOW_FIELDS  && 
          !tables->schema_table && !col_access)
        continue;
      for (uint bitnr=0; col_access ; col_access>>=1,bitnr++)
      {
@@ -2319,6 +2320,11 @@ static int get_schema_column_record(THD *thd, struct st_table_list *tables,
#else
      *end= 0;
#endif
      if (tables->schema_table)      // any user has 'select' privilege on all 
                                     // I_S table columns
        table->field[17]->store(grant_types.type_names[0],
                                strlen(grant_types.type_names[0]), cs);
      else
        table->field[17]->store(tmp+1,end == tmp ? 0 : (uint) (end-tmp-1), cs);

      table->field[1]->store(base_name, strlen(base_name), cs);