~ubuntu-branches/ubuntu/lucid/mysql-dfsg-5.1/lucid-security

« back to all changes in this revision

Viewing changes to mysql-test/suite/rpl/t/rpl_current_user.test

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2012-02-22 22:33:55 UTC
  • mto: (1.2.1) (37.1.1 lucid-security)
  • mto: This revision was merged to the branch mainline in revision 36.
  • Revision ID: package-import@ubuntu.com-20120222223355-ku1tb4r70osci6v2
Tags: upstream-5.1.61
ImportĀ upstreamĀ versionĀ 5.1.61

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
##############################################################################
 
2
# BUG#48321 CURRENT_USER() incorrectly replicated for DROP/RENAME USER,
 
3
# REVOKE, GRANT, ALTER EVENT
 
4
#
 
5
# Calling CURRENT_USER() results into inconsistency between slave and master,
 
6
# as the slave SQL thread has different user with common users.
 
7
#
 
8
# After the patch for bug#48321, session's user will be written into query log
 
9
# event if CURRENT_USER() is called in 'DROP/RENAME USER', 'REVOKE', 'GRANT',
 
10
# 'ALTER EVENT'.
 
11
#
 
12
##############################################################################
 
13
 
 
14
source include/have_binlog_format_statement.inc;
 
15
 
 
16
--let $rpl_topology= 1->2->3
 
17
--source include/rpl_init.inc
 
18
 
 
19
--let $rpl_connection_name= master
 
20
--let $rpl_server_number= 1
 
21
--source include/rpl_connect.inc
 
22
 
 
23
--let $rpl_connection_name= slave
 
24
--let $rpl_server_number= 2
 
25
--source include/rpl_connect.inc
 
26
 
 
27
--connection master
 
28
 
 
29
CREATE TABLE t1(c1 char(100));
 
30
CREATE VIEW test.v_user AS SELECT * FROM mysql.user WHERE User LIKE 'bug48321%';
 
31
CREATE VIEW test.v_tables_priv AS SELECT * FROM mysql.tables_priv WHERE User LIKE 'bug48321%';
 
32
CREATE VIEW test.v_procs_priv AS SELECT * FROM mysql.procs_priv WHERE User LIKE 'bug48321%';
 
33
CREATE VIEW test.v_event AS SELECT definer FROM mysql.event WHERE name = 'e1';
 
34
CREATE PROCEDURE p1() SELECT 1;
 
35
--echo # bug48321_1-01234 has the max length(16) of user.
 
36
GRANT ALL PRIVILEGES ON *.* TO 'bug48321_1-01234'@'localhost' WITH GRANT OPTION; 
 
37
 
 
38
--echo
 
39
--echo # Make sure the max lengths of user and host
 
40
--echo # the user name is too lengh
 
41
--error 1470
 
42
GRANT CREATE USER ON *.* TO '01234567890123456'@'fakehost';
 
43
--echo # the host name is too lengh
 
44
--error 1470
 
45
GRANT CREATE USER ON *.* TO 'fakename'@'0123456789012345678901234567890123456789012345678901234567890';
 
46
 
 
47
--echo
 
48
--echo # User 'bug48321_1-01234' connects to master by conn1
 
49
connect (conn1, 127.0.0.1, 'bug48321_1-01234'@'localhost',,);
 
50
connection conn1;
 
51
--echo # [On conn1]
 
52
--echo # Verify 'REVOKE ALL' statement
 
53
REVOKE ALL PRIVILEGES, GRANT OPTION FROM CURRENT_USER();
 
54
--source include/rpl_sync.inc
 
55
let $diff_tables= server_1:v_user, server_2:v_user, server_3:v_user;
 
56
source include/diff_tables.inc;
 
57
 
 
58
--echo 
 
59
--echo # Verify 'GRANT ... ON TABLE ...' statement
 
60
GRANT CREATE, INSERT, SELECT ON TABLE test.t1 TO CURRENT_USER();
 
61
--source include/rpl_sync.inc
 
62
let $diff_tables= server_1:v_tables_priv, server_2:v_tables_priv, server_3:v_tables_priv;
 
63
source include/diff_tables.inc;
 
64
 
 
65
--echo 
 
66
--echo # Verify 'GRANT ... ON PROCEDURE...' statement
 
67
GRANT ALTER ROUTINE, EXECUTE ON PROCEDURE p1 TO CURRENT_USER();
 
68
--source include/rpl_sync.inc
 
69
let $diff_tables= server_1:v_procs_priv, server_2:v_procs_priv, server_3:v_procs_priv;
 
70
source include/diff_tables.inc;
 
71
 
 
72
--echo 
 
73
--echo # Verify 'GRANT ... ON *.* ...' statement
 
74
GRANT ALL PRIVILEGES ON *.* TO CURRENT_USER() WITH GRANT OPTION;
 
75
--source include/rpl_sync.inc
 
76
let $diff_tables= server_1:v_procs_priv, server_2:v_procs_priv, server_3:v_procs_priv;
 
77
source include/diff_tables.inc;
 
78
 
 
79
--echo 
 
80
--echo # Verify 'REVOKE ... ON TABLE ...' statement
 
81
REVOKE CREATE, INSERT, SELECT ON TABLE t1 FROM CURRENT_USER();
 
82
--source include/rpl_sync.inc
 
83
let $diff_tables= server_1:v_tables_priv, server_2:v_tables_priv, server_3:v_tables_priv;
 
84
source include/diff_tables.inc;
 
85
 
 
86
--echo 
 
87
--echo # Verify 'REVOKE ... ON PROCEDURE...' statement
 
88
REVOKE ALTER ROUTINE, EXECUTE ON PROCEDURE p1 FROM CURRENT_USER();
 
89
--source include/rpl_sync.inc
 
90
let $diff_tables= server_1:v_procs_priv, server_2:v_procs_priv, server_3:v_procs_priv;
 
91
source include/diff_tables.inc;
 
92
 
 
93
--echo 
 
94
--echo # Verify 'REVOKE ... ON *.* ...' statement
 
95
REVOKE ALL PRIVILEGES ON *.* FROM CURRENT_USER();
 
96
--source include/rpl_sync.inc
 
97
let $diff_tables= server_1:v_user, server_2:v_user, server_3:v_user;
 
98
source include/diff_tables.inc;
 
99
 
 
100
--echo 
 
101
--echo # Verify 'GRANT ...' statement in the procedure
 
102
CREATE PROCEDURE my_grant()
 
103
  GRANT CREATE, INSERT, SELECT ON TABLE test.t1 TO CURRENT_USER();
 
104
call my_grant;
 
105
--source include/rpl_sync.inc
 
106
let $diff_tables= server_1:v_tables_priv, server_2:v_tables_priv, server_3:v_tables_priv;
 
107
source include/diff_tables.inc;
 
108
 
 
109
--echo 
 
110
--echo # Verify 'REVOKE ... ON TABLE ...' statement in the procedure
 
111
CREATE PROCEDURE my_revoke()
 
112
  REVOKE CREATE, INSERT, SELECT ON TABLE t1 FROM CURRENT_USER();
 
113
call my_revoke;
 
114
--source include/rpl_sync.inc
 
115
let $diff_tables= server_1:v_tables_priv, server_2:v_tables_priv, server_3:v_tables_priv;
 
116
source include/diff_tables.inc;
 
117
 
 
118
--echo 
 
119
--echo # Verify 'RENAME USER ...' statement
 
120
RENAME USER CURRENT_USER TO 'bug48321_2'@'localhost';
 
121
--source include/rpl_sync.inc
 
122
let $diff_tables= server_1:v_user, server_2:v_user, server_3:v_user;
 
123
source include/diff_tables.inc;
 
124
 
 
125
disconnect conn1;
 
126
 
 
127
--echo 
 
128
--echo # Verify 'DROP USER ...' statement
 
129
connection master;
 
130
GRANT CREATE USER ON *.* TO 'bug48321_2'@'localhost';
 
131
connect (conn1, 127.0.0.1, 'bug48321_2'@'localhost',,);
 
132
connection conn1;
 
133
DROP USER CURRENT_USER();
 
134
--source include/rpl_sync.inc
 
135
let $diff_tables= server_1:v_user, server_2:v_user, server_3:v_user;
 
136
source include/diff_tables.inc;
 
137
 
 
138
--echo 
 
139
--echo # Verify 'ALTER EVENT...' statement
 
140
connection master;
 
141
CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT * FROM t1;
 
142
 
 
143
--echo # Explicitly assign CURRENT_USER() to definer
 
144
ALTER DEFINER=CURRENT_USER() EVENT e1 ENABLE;
 
145
--source include/rpl_sync.inc
 
146
let $diff_tables= server_1:v_event, server_2:v_event, server_3:v_event;
 
147
source include/diff_tables.inc;
 
148
 
 
149
--echo
 
150
--echo # Session user will be set as definer, if the statement does not assign
 
151
--echo # a definer
 
152
ALTER EVENT e1 ENABLE;
 
153
--source include/rpl_sync.inc
 
154
let $diff_tables= server_1:v_event, server_2:v_event, server_3:v_event;
 
155
source include/diff_tables.inc;
 
156
 
 
157
--echo
 
158
--echo # Verify that this patch does not affect the calling of CURRENT_USER() 
 
159
--echo # in the other statements
 
160
connection master;
 
161
--echo # [On master]
 
162
INSERT INTO t1 VALUES(CURRENT_USER()), ('1234');
 
163
SELECT * FROM t1;
 
164
sync_slave_with_master;
 
165
--echo # [On slave]
 
166
SELECT * FROM t1;
 
167
--echo # [On server_3]
 
168
sync_slave_with_master server_3;
 
169
SELECT * FROM t1;
 
170
 
 
171
connection master;
 
172
--echo # [On master]
 
173
UPDATE t1 SET c1=CURRENT_USER() WHERE c1='1234';
 
174
SELECT * FROM t1;
 
175
sync_slave_with_master;
 
176
--echo # [On slave]
 
177
SELECT * FROM t1;
 
178
sync_slave_with_master server_3;
 
179
--echo # [On server_3]
 
180
SELECT * FROM t1;
 
181
 
 
182
connection master;
 
183
--echo # [On master]
 
184
DELETE FROM t1 WHERE c1=CURRENT_USER();
 
185
SELECT * FROM t1;
 
186
sync_slave_with_master;
 
187
--echo # [On slave]
 
188
SELECT * FROM t1;
 
189
sync_slave_with_master server_3;
 
190
--echo # [On server_3]
 
191
SELECT * FROM t1;
 
192
 
 
193
connection master;
 
194
--echo # [On master]
 
195
CREATE TABLE t2(c1 char(100));
 
196
 
 
197
DELIMITER |;
 
198
CREATE FUNCTION my_user() RETURNS VARCHAR(64) 
 
199
  SQL SECURITY INVOKER 
 
200
BEGIN
 
201
  INSERT INTO t2 VALUES(CURRENT_USER());
 
202
  RETURN CURRENT_USER();
 
203
END |
 
204
DELIMITER ;|
 
205
 
 
206
INSERT INTO t1 VALUES(my_user());
 
207
SELECT * FROM t1;
 
208
SELECT * FROM t2;
 
209
sync_slave_with_master;
 
210
--echo # [On slave]
 
211
SELECT * FROM t1;
 
212
SELECT * FROM t2;
 
213
sync_slave_with_master server_3;
 
214
--echo # [On server_3]
 
215
SELECT * FROM t1;
 
216
SELECT * FROM t2;
 
217
 
 
218
--echo
 
219
--echo # END
 
220
connection master;
 
221
DROP TABLE t1, t2;
 
222
DROP VIEW v_user, v_tables_priv, v_procs_priv, v_event; 
 
223
DROP PROCEDURE p1;
 
224
DROP PROCEDURE my_grant;
 
225
DROP PROCEDURE my_revoke;
 
226
DROP FUNCTION my_user;
 
227
DROP EVENT e1;
 
228
--source include/rpl_end.inc
 
229