Loading mysql-test/r/information_schema.result +14 −0 Original line number Diff line number Diff line Loading @@ -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; mysql-test/t/information_schema.test +13 −0 Original line number Diff line number Diff line Loading @@ -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; sql/sql_show.cc +8 −2 Original line number Diff line number Diff line Loading @@ -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++) { Loading @@ -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); Loading Loading
mysql-test/r/information_schema.result +14 −0 Original line number Diff line number Diff line Loading @@ -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;
mysql-test/t/information_schema.test +13 −0 Original line number Diff line number Diff line Loading @@ -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;
sql/sql_show.cc +8 −2 Original line number Diff line number Diff line Loading @@ -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++) { Loading @@ -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); Loading