MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
triggers_03e_table_level.inc
1 #======================================================================
2 #
3 # Trigger Tests
4 # test cases for TRIGGER privilege on db, table and column level
5 #======================================================================
6 
7 --disable_abort_on_error
8 
9 ###########################################
10 ################ Section 3.5.3 ############
11 # Check for the db level of Triggers #
12 ###########################################
13 
14 # General setup to be used in all testcases
15 let $message= ######### Testcase for table level: ########;
16 --source include/show_msg.inc
17 
18  --disable_warnings
19  drop database if exists priv_db;
20  --enable_warnings
21  create database priv_db;
22  use priv_db;
23  eval create table t1 (f1 char(20)) engine= $engine_type;
24 
25  create User test_yesprivs@localhost;
26  set password for test_yesprivs@localhost = password('PWD');
27  revoke ALL PRIVILEGES, GRANT OPTION FROM test_yesprivs@localhost;
28 
29  create User test_noprivs@localhost;
30  set password for test_noprivs@localhost = password('PWD');
31  revoke ALL PRIVILEGES, GRANT OPTION FROM test_noprivs@localhost;
32 
33  connect (yes_privs,localhost,test_yesprivs,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK);
34 
35  connect (no_privs,localhost,test_noprivs,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK);
36 
37 ################ Section 3.5.3 ############
38 # Check for the table level of Triggers #
39 ###########################################
40 
41 # user has no trigger privilege->create trigger fail
42 
43 let $message= no trigger privilege on table level for create:;
44 --source include/show_msg.inc
45  connection default;
46  select current_user;
47  show triggers;
48  grant select, insert, update on priv_db.t1 to test_yesprivs@localhost;
49  show grants for test_yesprivs@localhost;
50  grant select, update, insert on priv_db.t1 to test_noprivs@localhost;
51  show grants for test_noprivs@localhost;
52 
53  connection yes_privs;
54  select current_user;
55  use priv_db;
56  show tables;
57  --error ER_TABLEACCESS_DENIED_ERROR
58  create trigger trg1_1 before INSERT on t1 for each row
59  set new.f1 = 'trig 1_1-no';
60 
61 # no trigger execution, as trigger does'nt exist
62 
63  connection no_privs;
64  select current_user;
65  use priv_db;
66  insert into t1 (f1) values ('insert1-yes');
67  select f1 from t1 order by f1;
68 
69  connection default;
70  select current_user;
71  show triggers;
72  show tables;
73  insert into t1 (f1) values ('insert2-yes');
74  select f1 from t1 order by f1;
75  grant TRIGGER on priv_db.t1 to test_yesprivs@localhost;
76  show grants for test_yesprivs@localhost;
77 
78 # user got trigger privilege->create trigger successful
79 
80 let $message= trigger privilege on table level for create:;
81 --source include/show_msg.inc
82  connection yes_privs;
83  select current_user;
84  show triggers;
85  create trigger trg1_2 before INSERT on t1 for each row
86  set new.f1 = 'trig 1_2-yes';
87 
88 # insert now executes the trigger
89 
90  connection no_privs;
91  select current_user;
92  insert into t1 (f1) values ('insert3-no');
93  select f1 from t1 order by f1;
94 
95  connection default;
96  select current_user;
97  insert into t1 (f1) values ('insert4-no');
98  select f1 from t1 order by f1;
99  revoke TRIGGER on priv_db.t1 from test_yesprivs@localhost;
100  show grants for test_yesprivs@localhost;
101 
102 # revoke triggerprivilege->drop trigger fail
103 
104 let $message= no trigger privilege on table level for drop:;
105 --source include/show_msg.inc
106  connection yes_privs;
107  select current_user;
108 
109  --error ER_TABLEACCESS_DENIED_ERROR
110  drop trigger trg1_2;
111 
112 # no trigger priv at activation time->insert fails
113 
114 let $message= no trigger privilege at activation time:;
115 --source include/show_msg.inc
116  connection no_privs;
117  select current_user;
118  --error ER_TABLEACCESS_DENIED_ERROR
119  insert into t1 (f1) values ('insert5-no');
120  select f1 from t1 order by f1;
121 
122  connection default;
123  select current_user;
124  grant TRIGGER on priv_db.t1 to test_yesprivs@localhost;
125 
126 # trigger privilege at activation time->insert with trigger successful
127 
128 let $message= trigger privilege at activation time:;
129 --source include/show_msg.inc
130  connection no_privs;
131  select current_user;
132  insert into t1 (f1) values ('insert6-no');
133  select f1 from t1 order by f1;
134 
135 # trigger privilege->drop trigger successful
136 let $message= trigger privilege on table level for drop:;
137 --source include/show_msg.inc
138  connection yes_privs;
139  select current_user;
140  show grants for test_yesprivs@localhost;
141  drop trigger trg1_2;
142 
143 # inserts without trigger
144 
145  connection no_privs;
146  select current_user;
147  insert into t1 (f1) values ('insert7-yes');
148  select f1 from t1 order by f1;
149 
150  connection default;
151  select current_user;
152  insert into t1 (f1) values ('insert8-yes');
153  select f1 from t1 order by f1;
154 
155 # trigger privilege must be keep when mixinf tables with and without
156 # trigger privilege
157 
158 let $message= switch to table without having trigger priv for it:;
159 --source include/show_msg.inc
160  eval create table t2 (f1 char(20)) engine= $engine_type;
161 # Adding the minimal priv to be able to set to the db
162  grant SELECT, INSERT, UPDATE on priv_db.t2 to test_yesprivs@localhost;
163  show grants for test_yesprivs@localhost;
164 
165  grant SELECT, INSERT, UPDATE on priv_db.t2 to test_noprivs@localhost;
166  show grants for test_noprivs@localhost;
167 
168 let $message= use table with trigger privilege and without...:;
169 --source include/show_msg.inc
170  connection yes_privs;
171  select current_user;
172  --error ER_TABLEACCESS_DENIED_ERROR
173  create trigger trg2_1 before INSERT on t2 for each row
174  set new.f1 = 'trig 2_1-no';
175  create trigger trg1_3 before INSERT on t1 for each row
176  set new.f1 = 'trig 1_3-yes';
177  --error ER_TABLEACCESS_DENIED_ERROR
178  create trigger trg2_2 before UPDATE on t2 for each row
179  set new.f1 = 'trig 2_2-no';
180  create trigger trg1_4 before UPDATE on t1 for each row
181  set new.f1 = 'trig 1_4-yes';
182  show triggers;
183  connection no_privs;
184  select current_user;
185  insert into t2 (f1) values ('insert9-yes');
186  select f1 from t2 order by f1;
187  insert into t1 (f1) values ('insert10-no');
188  select f1 from t1 order by f1;
189  disconnect no_privs;
190 
191  connection yes_privs;
192  select current_user;
193  --error ER_TRG_DOES_NOT_EXIST
194  drop trigger trg2_1;
195  drop trigger trg1_3;
196  --error ER_TRG_DOES_NOT_EXIST
197  drop trigger trg2_2;
198  drop trigger trg1_4;
199 
200 
201 # Cleanup table level
202  --disable_warnings
203  disconnect yes_privs;
204 
205  connection default;
206  select current_user;
207  --enable_warnings
208 
209 
210 # general Cleanup
211  --disable_warnings
212  drop database if exists priv_db;
213  drop user test_yesprivs@localhost;
214  drop user test_noprivs@localhost;
215  --enable_warnings
216