summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgluh@mysql.com <>2005-05-07 15:25:57 +0000
committergluh@mysql.com <>2005-05-07 15:25:57 +0000
commit3ce315ce3313a2cbd2d9bc6878f138c0f833c918 (patch)
tree4534c868514029c06bfd47fa128afddf6f33ffaa
parentfa8673a627d47693bcd2e379ac906077cfe1240d (diff)
parentf6bf2680b2c4de6d9bd76bb946cb4afbd02151cb (diff)
downloadmariadb-git-3ce315ce3313a2cbd2d9bc6878f138c0f833c918.tar.gz
Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/gluh/MySQL/Bugs/5.0.10261
-rw-r--r--mysql-test/r/information_schema.result14
-rw-r--r--mysql-test/t/information_schema.test13
-rw-r--r--sql/sql_show.cc10
3 files changed, 35 insertions, 2 deletions
diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index 0aa5e759207..6c8e7a9cf8b 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -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;
diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test
index 1739604372a..3e322ad2f5b 100644
--- a/mysql-test/t/information_schema.test
+++ b/mysql-test/t/information_schema.test
@@ -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;
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index ceb98740298..a90756e38db 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -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);