summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgkodinov@mysql.com <>2006-05-26 11:51:11 +0300
committergkodinov@mysql.com <>2006-05-26 11:51:11 +0300
commitf0f9c740ed629882fdb07c9d86076b2d4e29d645 (patch)
tree2d7b7b5883cd12850e59765a033e5443724481b2
parent0336a34c7fc39500cb171d926e7fa64e4b4508f5 (diff)
parent59837f7a5bc39ba52289f60f74343a5b6a418f15 (diff)
downloadmariadb-git-f0f9c740ed629882fdb07c9d86076b2d4e29d645.tar.gz
Merge mysql.com:/home/kgeorge/mysql/5.0/clean
into mysql.com:/home/kgeorge/mysql/5.0/B14875
-rw-r--r--mysql-test/r/view_grant.result15
-rw-r--r--mysql-test/t/view_grant.test14
-rw-r--r--sql/sql_acl.cc2
-rw-r--r--sql/table.cc14
4 files changed, 43 insertions, 2 deletions
diff --git a/mysql-test/r/view_grant.result b/mysql-test/r/view_grant.result
index 3feffb4a510..29b3e710573 100644
--- a/mysql-test/r/view_grant.result
+++ b/mysql-test/r/view_grant.result
@@ -533,3 +533,18 @@ View Create View
v2 CREATE ALGORITHM=UNDEFINED DEFINER=`some_user`@`localhost` SQL SECURITY INVOKER VIEW `v2` AS select 1 AS `1`
drop view v1;
drop view v2;
+CREATE TABLE t1 (a INT PRIMARY KEY);
+INSERT INTO t1 VALUES (1), (2), (3);
+CREATE DEFINER = 'no-such-user'@localhost VIEW v AS SELECT a from t1;
+Warnings:
+Note 1449 There is no 'no-such-user'@'localhost' registered
+SHOW CREATE VIEW v;
+View Create View
+v CREATE ALGORITHM=UNDEFINED DEFINER=`no-such-user`@`localhost` SQL SECURITY DEFINER VIEW `v` AS select `t1`.`a` AS `a` from `t1`
+Warnings:
+Note 1449 There is no 'no-such-user'@'localhost' registered
+SELECT * FROM v;
+ERROR HY000: There is no 'no-such-user'@'localhost' registered
+DROP VIEW v;
+DROP TABLE t1;
+USE test;
diff --git a/mysql-test/t/view_grant.test b/mysql-test/t/view_grant.test
index e80e1770ba2..e7148418ac5 100644
--- a/mysql-test/t/view_grant.test
+++ b/mysql-test/t/view_grant.test
@@ -712,3 +712,17 @@ show create view v1;
show create view v2;
drop view v1;
drop view v2;
+
+#
+# BUG#14875: Bad view DEFINER makes SHOW CREATE VIEW fail
+#
+CREATE TABLE t1 (a INT PRIMARY KEY);
+INSERT INTO t1 VALUES (1), (2), (3);
+CREATE DEFINER = 'no-such-user'@localhost VIEW v AS SELECT a from t1;
+--warning 1448
+SHOW CREATE VIEW v;
+--error 1449
+SELECT * FROM v;
+DROP VIEW v;
+DROP TABLE t1;
+USE test;
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 02b2f88676f..197c703ece3 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -959,6 +959,8 @@ bool acl_getroot_no_password(Security_context *sctx, char *user, char *host,
sctx->master_access= 0;
sctx->db_access= 0;
+ sctx->priv_user= (char *) "";
+ *sctx->priv_host= 0;
/*
Find acl entry in user database.
diff --git a/sql/table.cc b/sql/table.cc
index 8e23bea2540..4390c67c77d 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -2428,8 +2428,18 @@ bool st_table_list::prepare_view_securety_context(THD *thd)
definer.host.str,
thd->db))
{
- my_error(ER_NO_SUCH_USER, MYF(0), definer.user.str, definer.host.str);
- DBUG_RETURN(TRUE);
+ if (thd->lex->sql_command == SQLCOM_SHOW_CREATE)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
+ ER_NO_SUCH_USER,
+ ER(ER_NO_SUCH_USER),
+ definer.user.str, definer.host.str);
+ }
+ else
+ {
+ my_error(ER_NO_SUCH_USER, MYF(0), definer.user.str, definer.host.str);
+ DBUG_RETURN(TRUE);
+ }
}
}
DBUG_RETURN(FALSE);