mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Fix for bug#10261: INFORMATION_SCHEMA.COLUMNS, incomplete result for non root user
I_S table columns information is available for any user mysql-test/r/information_schema.result: Fix for bug#10261: INFORMATION_SCHEMA.COLUMNS, incomplete result for non root user mysql-test/t/information_schema.test: Fix for bug#10261: INFORMATION_SCHEMA.COLUMNS, incomplete result for non root user sql/sql_show.cc: Fix for bug#10261: INFORMATION_SCHEMA.COLUMNS, incomplete result for non root user
This commit is contained in:
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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,7 +2320,12 @@ static int get_schema_column_record(THD *thd, struct st_table_list *tables,
|
||||
#else
|
||||
*end= 0;
|
||||
#endif
|
||||
table->field[17]->store(tmp+1,end == tmp ? 0 : (uint) (end-tmp-1), cs);
|
||||
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);
|
||||
table->field[2]->store(file_name, strlen(file_name), cs);
|
||||
|
Reference in New Issue
Block a user