summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <jimw@mysql.com>2006-06-27 17:16:02 -0700
committerunknown <jimw@mysql.com>2006-06-27 17:16:02 -0700
commit88afd72b47973afa087a34299f1a3a9e12d143ca (patch)
tree01d1b2354252ecf262d2bb8ba58fc308c1d3d828
parentc3cb46908c30895e0aafa0f7602370240a3c5a98 (diff)
downloadmariadb-git-88afd72b47973afa087a34299f1a3a9e12d143ca.tar.gz
Bug #18005: Creating a trigger on mysql.event leads to server crash on scheduler startup
Bug #18361: Triggers on mysql.user table cause server crash Because they do not work, we do not allow creating triggers on tables within the 'mysql' schema. (They may be made to work and re-enabled at some later date, but not in 5.0 or 5.1.) mysql-test/r/trigger.result: Add new results mysql-test/t/trigger.test: Add new regression test for creating triggers on system schema sql/share/errmsg.txt: Add new error message sql/sql_trigger.cc: Disallow creating triggers on tables in the 'mysql' schema
-rw-r--r--mysql-test/r/trigger.result12
-rw-r--r--mysql-test/t/trigger.test24
-rw-r--r--sql/share/errmsg.txt2
-rw-r--r--sql/sql_trigger.cc9
4 files changed, 46 insertions, 1 deletions
diff --git a/mysql-test/r/trigger.result b/mysql-test/r/trigger.result
index d4791c6b117..4fa7a9ca8bd 100644
--- a/mysql-test/r/trigger.result
+++ b/mysql-test/r/trigger.result
@@ -1078,3 +1078,15 @@ i1
43
51
DROP TABLE t1;
+create trigger wont_work after update on mysql.user for each row
+begin
+set @a:= 1;
+end|
+ERROR HY000: Triggers can not be created on system tables
+use mysql|
+create trigger wont_work after update on event for each row
+begin
+set @a:= 1;
+end|
+ERROR HY000: Triggers can not be created on system tables
+End of 5.0 tests
diff --git a/mysql-test/t/trigger.test b/mysql-test/t/trigger.test
index 3743d8f5c76..6c9b5063f32 100644
--- a/mysql-test/t/trigger.test
+++ b/mysql-test/t/trigger.test
@@ -1281,4 +1281,26 @@ SELECT * FROM t1;
DROP TABLE t1;
-# End of 5.0 tests
+#
+# Bug #18005: Creating a trigger on mysql.event leads to server crash on
+# scheduler startup
+#
+# Bug #18361: Triggers on mysql.user table cause server crash
+#
+# We don't allow triggers on the mysql schema
+delimiter |;
+--error ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA
+create trigger wont_work after update on mysql.user for each row
+begin
+ set @a:= 1;
+end|
+# Try when we're already using the mysql schema
+use mysql|
+--error ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA
+create trigger wont_work after update on event for each row
+begin
+ set @a:= 1;
+end|
+delimiter ;|
+
+--echo End of 5.0 tests
diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt
index 4e7b9200d88..9b20c37ece2 100644
--- a/sql/share/errmsg.txt
+++ b/sql/share/errmsg.txt
@@ -5619,3 +5619,5 @@ ER_NON_GROUPING_FIELD_USED 42000
eng "non-grouping field '%-.64s' is used in %-.64s clause"
ER_TABLE_CANT_HANDLE_SPKEYS
eng "The used table type doesn't support SPATIAL indexes"
+ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA
+ eng "Triggers can not be created on system tables"
diff --git a/sql/sql_trigger.cc b/sql/sql_trigger.cc
index f943b014118..74e36de500c 100644
--- a/sql/sql_trigger.cc
+++ b/sql/sql_trigger.cc
@@ -183,6 +183,15 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
!(tables= add_table_for_trigger(thd, thd->lex->spname)))
DBUG_RETURN(TRUE);
+ /*
+ We don't allow creating triggers on tables in the 'mysql' schema
+ */
+ if (create && !my_strcasecmp(system_charset_info, "mysql", tables->db))
+ {
+ my_error(ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA, MYF(0));
+ DBUG_RETURN(TRUE);
+ }
+
/* We should have only one table in table list. */
DBUG_ASSERT(tables->next_global == 0);