~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to scripts/mysql_system_tables_fix.sql

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# This part converts any old privilege tables to privilege tables suitable
 
2
# for current version of MySQL
 
3
 
 
4
# You can safely ignore all 'Duplicate column' and 'Unknown column' errors
 
5
# because these just mean that your tables are already up to date.
 
6
# This script is safe to run even if your tables are already up to date!
 
7
 
 
8
# On unix, you should use the mysql_fix_privilege_tables script to execute
 
9
# this sql script.
 
10
# On windows you should do 'mysql --force mysql < mysql_fix_privilege_tables.sql'
 
11
 
 
12
set sql_mode='';
 
13
set storage_engine=MyISAM;
 
14
 
 
15
ALTER TABLE user add File_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
 
16
 
 
17
# Detect whether or not we had the Grant_priv column
 
18
SET @hadGrantPriv:=0;
 
19
SELECT @hadGrantPriv:=1 FROM user WHERE Grant_priv LIKE '%';
 
20
 
 
21
ALTER TABLE user add Grant_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add References_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Index_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Alter_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
 
22
ALTER TABLE host add Grant_priv enum('N','Y') NOT NULL,add References_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Index_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Alter_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
 
23
ALTER TABLE db add Grant_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add References_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Index_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Alter_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
 
24
 
 
25
# Fix privileges for old tables
 
26
UPDATE user SET Grant_priv=File_priv,References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
 
27
UPDATE db SET References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
 
28
UPDATE host SET References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
 
29
 
 
30
#
 
31
# The second alter changes ssl_type to new 4.0.2 format
 
32
# Adding columns needed by GRANT .. REQUIRE (openssl)
 
33
 
 
34
ALTER TABLE user
 
35
ADD ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci NOT NULL,
 
36
ADD ssl_cipher BLOB NOT NULL,
 
37
ADD x509_issuer BLOB NOT NULL,
 
38
ADD x509_subject BLOB NOT NULL;
 
39
ALTER TABLE user MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') NOT NULL;
 
40
 
 
41
#
 
42
# tables_priv
 
43
#
 
44
ALTER TABLE tables_priv
 
45
  ADD KEY Grantor (Grantor);
 
46
 
 
47
ALTER TABLE tables_priv
 
48
  MODIFY Host char(60) NOT NULL default '',
 
49
  MODIFY Db char(64) NOT NULL default '',
 
50
  MODIFY User char(16) NOT NULL default '',
 
51
  MODIFY Table_name char(64) NOT NULL default '',
 
52
  MODIFY Grantor char(77) NOT NULL default '',
 
53
  ENGINE=MyISAM,
 
54
  CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
 
55
 
 
56
ALTER TABLE tables_priv
 
57
  MODIFY Column_priv set('Select','Insert','Update','References')
 
58
    COLLATE utf8_general_ci DEFAULT '' NOT NULL,
 
59
  MODIFY Table_priv set('Select','Insert','Update','Delete','Create',
 
60
                        'Drop','Grant','References','Index','Alter',
 
61
                        'Create View','Show view')
 
62
    COLLATE utf8_general_ci DEFAULT '' NOT NULL,
 
63
  COMMENT='Table privileges';
 
64
 
 
65
#
 
66
# columns_priv
 
67
#
 
68
#
 
69
# Name change of Type -> Column_priv from MySQL 3.22.12
 
70
#
 
71
ALTER TABLE columns_priv
 
72
  CHANGE Type Column_priv set('Select','Insert','Update','References')
 
73
    COLLATE utf8_general_ci DEFAULT '' NOT NULL;
 
74
 
 
75
ALTER TABLE columns_priv
 
76
  MODIFY Host char(60) NOT NULL default '',
 
77
  MODIFY Db char(64) NOT NULL default '',
 
78
  MODIFY User char(16) NOT NULL default '',
 
79
  MODIFY Table_name char(64) NOT NULL default '',
 
80
  MODIFY Column_name char(64) NOT NULL default '',
 
81
  ENGINE=MyISAM,
 
82
  CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin,
 
83
  COMMENT='Column privileges';
 
84
 
 
85
ALTER TABLE columns_priv
 
86
  MODIFY Column_priv set('Select','Insert','Update','References')
 
87
    COLLATE utf8_general_ci DEFAULT '' NOT NULL;
 
88
 
 
89
#
 
90
#  Add the new 'type' column to the func table.
 
91
#
 
92
 
 
93
ALTER TABLE func add type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL;
 
94
 
 
95
#
 
96
#  Change the user,db and host tables to current format
 
97
#
 
98
 
 
99
# Detect whether we had Show_db_priv
 
100
SET @hadShowDbPriv:=0;
 
101
SELECT @hadShowDbPriv:=1 FROM user WHERE Show_db_priv LIKE '%';
 
102
 
 
103
ALTER TABLE user
 
104
ADD Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_priv,
 
105
ADD Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_db_priv,
 
106
ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Super_priv,
 
107
ADD Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_tmp_table_priv,
 
108
ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv,
 
109
ADD Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Execute_priv,
 
110
ADD Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_slave_priv;
 
111
 
 
112
# Convert privileges so that users have similar privileges as before
 
113
 
 
114
UPDATE user SET Show_db_priv= Select_priv, Super_priv=Process_priv, Execute_priv=Process_priv, Create_tmp_table_priv='Y', Lock_tables_priv='Y', Repl_slave_priv=file_priv, Repl_client_priv=File_priv where user<>"" AND @hadShowDbPriv = 0;
 
115
 
 
116
 
 
117
#  Add fields that can be used to limit number of questions and connections
 
118
#  for some users.
 
119
 
 
120
ALTER TABLE user
 
121
ADD max_questions int(11) NOT NULL DEFAULT 0 AFTER x509_subject,
 
122
ADD max_updates   int(11) unsigned NOT NULL DEFAULT 0 AFTER max_questions,
 
123
ADD max_connections int(11) unsigned NOT NULL DEFAULT 0 AFTER max_updates;
 
124
 
 
125
 
 
126
#
 
127
#  Add Create_tmp_table_priv and Lock_tables_priv to db and host
 
128
#
 
129
 
 
130
ALTER TABLE db
 
131
ADD Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
132
ADD Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
 
133
ALTER TABLE host
 
134
ADD Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,
 
135
ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL;
 
136
 
 
137
alter table user change max_questions max_questions int(11) unsigned DEFAULT 0  NOT NULL;
 
138
 
 
139
 
 
140
alter table db comment='Database privileges';
 
141
alter table host comment='Host privileges;  Merged with database privileges';
 
142
alter table user comment='Users and global privileges';
 
143
alter table func comment='User defined functions';
 
144
 
 
145
# Convert all tables to UTF-8 with binary collation
 
146
# and reset all char columns to correct width
 
147
ALTER TABLE user
 
148
  MODIFY Host char(60) NOT NULL default '',
 
149
  MODIFY User char(16) NOT NULL default '',
 
150
  ENGINE=MyISAM, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
 
151
ALTER TABLE user
 
152
  MODIFY Password char(41) character set latin1 collate latin1_bin NOT NULL default '',
 
153
  MODIFY Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
154
  MODIFY Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
155
  MODIFY Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
156
  MODIFY Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
157
  MODIFY Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
158
  MODIFY Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
159
  MODIFY Reload_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
160
  MODIFY Shutdown_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
161
  MODIFY Process_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
162
  MODIFY File_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
163
  MODIFY Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
164
  MODIFY References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
165
  MODIFY Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
166
  MODIFY Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
167
  MODIFY Show_db_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
168
  MODIFY Super_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
169
  MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
170
  MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
171
  MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
172
  MODIFY Repl_slave_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
173
  MODIFY Repl_client_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
174
  MODIFY ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL;
 
175
 
 
176
ALTER TABLE db
 
177
  MODIFY Host char(60) NOT NULL default '',
 
178
  MODIFY Db char(64) NOT NULL default '',
 
179
  MODIFY User char(16) NOT NULL default '',
 
180
  ENGINE=MyISAM, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
 
181
ALTER TABLE db
 
182
  MODIFY  Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
183
  MODIFY  Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
184
  MODIFY  Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
185
  MODIFY  Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
186
  MODIFY  Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
187
  MODIFY  Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
188
  MODIFY  Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
189
  MODIFY  References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
190
  MODIFY  Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
191
  MODIFY  Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
192
  MODIFY  Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
193
  MODIFY  Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
 
194
 
 
195
ALTER TABLE host
 
196
  MODIFY Host char(60) NOT NULL default '',
 
197
  MODIFY Db char(64) NOT NULL default '',
 
198
  ENGINE=MyISAM, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
 
199
ALTER TABLE host
 
200
  MODIFY Select_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
201
  MODIFY Insert_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
202
  MODIFY Update_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
203
  MODIFY Delete_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
204
  MODIFY Create_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
205
  MODIFY Drop_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
206
  MODIFY Grant_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
207
  MODIFY References_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
208
  MODIFY Index_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
209
  MODIFY Alter_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
210
  MODIFY Create_tmp_table_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
211
  MODIFY Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
 
212
 
 
213
ALTER TABLE func
 
214
  ENGINE=MyISAM, CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
 
215
ALTER TABLE func
 
216
  MODIFY type enum ('function','aggregate') COLLATE utf8_general_ci NOT NULL;
 
217
 
 
218
#
 
219
# Modify log tables.
 
220
#
 
221
 
 
222
SET @old_log_state = @@global.general_log;
 
223
SET GLOBAL general_log = 'OFF';
 
224
ALTER TABLE general_log MODIFY COLUMN server_id INTEGER UNSIGNED NOT NULL;
 
225
SET GLOBAL general_log = @old_log_state;
 
226
 
 
227
SET @old_log_state = @@global.slow_query_log;
 
228
SET GLOBAL slow_query_log = 'OFF';
 
229
ALTER TABLE slow_log MODIFY COLUMN server_id INTEGER UNSIGNED NOT NULL;
 
230
SET GLOBAL slow_query_log = @old_log_state;
 
231
 
 
232
#
 
233
# Detect whether we had Create_view_priv
 
234
#
 
235
SET @hadCreateViewPriv:=0;
 
236
SELECT @hadCreateViewPriv:=1 FROM user WHERE Create_view_priv LIKE '%';
 
237
 
 
238
#
 
239
# Create VIEWs privileges (v5.0)
 
240
#
 
241
ALTER TABLE db ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
 
242
ALTER TABLE db MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
 
243
 
 
244
ALTER TABLE host ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
 
245
ALTER TABLE host MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
 
246
 
 
247
ALTER TABLE user ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv;
 
248
ALTER TABLE user MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv;
 
249
 
 
250
#
 
251
# Show VIEWs privileges (v5.0)
 
252
#
 
253
ALTER TABLE db ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
254
ALTER TABLE db MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
255
 
 
256
ALTER TABLE host ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
257
ALTER TABLE host MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
258
 
 
259
ALTER TABLE user ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
260
ALTER TABLE user MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
261
 
 
262
#
 
263
# Assign create/show view privileges to people who have create provileges
 
264
#
 
265
UPDATE user SET Create_view_priv=Create_priv, Show_view_priv=Create_priv where user<>"" AND @hadCreateViewPriv = 0;
 
266
 
 
267
#
 
268
#
 
269
#
 
270
SET @hadCreateRoutinePriv:=0;
 
271
SELECT @hadCreateRoutinePriv:=1 FROM user WHERE Create_routine_priv LIKE '%';
 
272
 
 
273
#
 
274
# Create PROCEDUREs privileges (v5.0)
 
275
#
 
276
ALTER TABLE db ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
277
ALTER TABLE db MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
278
 
 
279
ALTER TABLE host ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
280
ALTER TABLE host MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
281
 
 
282
ALTER TABLE user ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
283
ALTER TABLE user MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
284
 
 
285
#
 
286
# Alter PROCEDUREs privileges (v5.0)
 
287
#
 
288
ALTER TABLE db ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
289
ALTER TABLE db MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
290
 
 
291
ALTER TABLE host ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
292
ALTER TABLE host MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
293
 
 
294
ALTER TABLE user ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
295
ALTER TABLE user MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
296
 
 
297
ALTER TABLE db ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
298
ALTER TABLE db MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
299
 
 
300
ALTER TABLE host ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
301
ALTER TABLE host MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
302
 
 
303
#
 
304
# Assign create/alter routine privileges to people who have create privileges
 
305
#
 
306
UPDATE user SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv where user<>"" AND @hadCreateRoutinePriv = 0;
 
307
UPDATE db SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv, Execute_priv=Select_priv where user<>"" AND @hadCreateRoutinePriv = 0;
 
308
UPDATE host SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv, Execute_priv=Select_priv where @hadCreateRoutinePriv = 0;
 
309
 
 
310
#
 
311
# Add max_user_connections resource limit
 
312
#
 
313
ALTER TABLE user ADD max_user_connections int(11) unsigned DEFAULT '0' NOT NULL AFTER max_connections;
 
314
 
 
315
#
 
316
# user.Create_user_priv
 
317
#
 
318
 
 
319
SET @hadCreateUserPriv:=0;
 
320
SELECT @hadCreateUserPriv:=1 FROM user WHERE Create_user_priv LIKE '%';
 
321
 
 
322
ALTER TABLE user ADD Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
323
ALTER TABLE user MODIFY Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
324
UPDATE user LEFT JOIN db USING (Host,User) SET Create_user_priv='Y'
 
325
  WHERE @hadCreateUserPriv = 0 AND
 
326
        (user.Grant_priv = 'Y' OR db.Grant_priv = 'Y');
 
327
 
 
328
#
 
329
# procs_priv
 
330
#
 
331
 
 
332
ALTER TABLE procs_priv
 
333
  ENGINE=MyISAM,
 
334
  CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
 
335
 
 
336
ALTER TABLE procs_priv
 
337
  MODIFY Proc_priv set('Execute','Alter Routine','Grant')
 
338
    COLLATE utf8_general_ci DEFAULT '' NOT NULL;
 
339
 
 
340
ALTER IGNORE TABLE procs_priv
 
341
  MODIFY Routine_name char(64)
 
342
    COLLATE utf8_general_ci DEFAULT '' NOT NULL;
 
343
 
 
344
ALTER TABLE procs_priv
 
345
  ADD Routine_type enum('FUNCTION','PROCEDURE')
 
346
    COLLATE utf8_general_ci NOT NULL AFTER Routine_name;
 
347
 
 
348
ALTER TABLE procs_priv
 
349
  MODIFY Timestamp timestamp(14) AFTER Proc_priv;
 
350
 
 
351
#
 
352
# proc
 
353
#
 
354
 
 
355
# Correct the name fields to not binary, and expand sql_data_access
 
356
ALTER TABLE proc MODIFY name char(64) DEFAULT '' NOT NULL,
 
357
                 MODIFY specific_name char(64) DEFAULT '' NOT NULL,
 
358
                 MODIFY sql_data_access
 
359
                        enum('CONTAINS_SQL',
 
360
                             'NO_SQL',
 
361
                             'READS_SQL_DATA',
 
362
                             'MODIFIES_SQL_DATA'
 
363
                            ) DEFAULT 'CONTAINS_SQL' NOT NULL,
 
364
                 MODIFY body longblob NOT NULL,
 
365
                 MODIFY returns longblob NOT NULL,
 
366
                 MODIFY sql_mode
 
367
                        set('REAL_AS_FLOAT',
 
368
                            'PIPES_AS_CONCAT',
 
369
                            'ANSI_QUOTES',
 
370
                            'IGNORE_SPACE',
 
371
                            'NOT_USED',
 
372
                            'ONLY_FULL_GROUP_BY',
 
373
                            'NO_UNSIGNED_SUBTRACTION',
 
374
                            'NO_DIR_IN_CREATE',
 
375
                            'POSTGRESQL',
 
376
                            'ORACLE',
 
377
                            'MSSQL',
 
378
                            'DB2',
 
379
                            'MAXDB',
 
380
                            'NO_KEY_OPTIONS',
 
381
                            'NO_TABLE_OPTIONS',
 
382
                            'NO_FIELD_OPTIONS',
 
383
                            'MYSQL323',
 
384
                            'MYSQL40',
 
385
                            'ANSI',
 
386
                            'NO_AUTO_VALUE_ON_ZERO',
 
387
                            'NO_BACKSLASH_ESCAPES',
 
388
                            'STRICT_TRANS_TABLES',
 
389
                            'STRICT_ALL_TABLES',
 
390
                            'NO_ZERO_IN_DATE',
 
391
                            'NO_ZERO_DATE',
 
392
                            'INVALID_DATES',
 
393
                            'ERROR_FOR_DIVISION_BY_ZERO',
 
394
                            'TRADITIONAL',
 
395
                            'NO_AUTO_CREATE_USER',
 
396
                            'HIGH_NOT_PRECEDENCE',
 
397
                            'NO_ENGINE_SUBSTITUTION',
 
398
                            'PAD_CHAR_TO_FULL_LENGTH'
 
399
                            ) DEFAULT '' NOT NULL,
 
400
                 DEFAULT CHARACTER SET utf8;
 
401
 
 
402
# Correct the character set and collation
 
403
ALTER TABLE proc CONVERT TO CHARACTER SET utf8;
 
404
# Reset some fields after the conversion
 
405
ALTER TABLE proc  MODIFY db
 
406
                         char(64) collate utf8_bin DEFAULT '' NOT NULL,
 
407
                  MODIFY definer
 
408
                         char(77) collate utf8_bin DEFAULT '' NOT NULL,
 
409
                  MODIFY comment
 
410
                         char(64) collate utf8_bin DEFAULT '' NOT NULL;
 
411
 
 
412
ALTER TABLE proc ADD character_set_client
 
413
                     char(32) collate utf8_bin DEFAULT NULL
 
414
                     AFTER comment;
 
415
ALTER TABLE proc MODIFY character_set_client
 
416
                        char(32) collate utf8_bin DEFAULT NULL;
 
417
 
 
418
SELECT CASE WHEN COUNT(*) > 0 THEN 
 
419
CONCAT ("WARNING: NULL values of the 'character_set_client' column ('mysql.proc' table) have been updated with a default value (", @@character_set_client, "). Please verify if necessary.")
 
420
ELSE NULL 
 
421
END 
 
422
AS value FROM proc WHERE character_set_client IS NULL;
 
423
 
 
424
UPDATE proc SET character_set_client = @@character_set_client 
 
425
                     WHERE character_set_client IS NULL;
 
426
 
 
427
ALTER TABLE proc ADD collation_connection
 
428
                     char(32) collate utf8_bin DEFAULT NULL
 
429
                     AFTER character_set_client;
 
430
ALTER TABLE proc MODIFY collation_connection
 
431
                        char(32) collate utf8_bin DEFAULT NULL;
 
432
 
 
433
SELECT CASE WHEN COUNT(*) > 0 THEN 
 
434
CONCAT ("WARNING: NULL values of the 'collation_connection' column ('mysql.proc' table) have been updated with a default value (", @@collation_connection, "). Please verify if necessary.")
 
435
ELSE NULL 
 
436
END 
 
437
AS value FROM proc WHERE collation_connection IS NULL;
 
438
 
 
439
UPDATE proc SET collation_connection = @@collation_connection
 
440
                     WHERE collation_connection IS NULL;
 
441
 
 
442
ALTER TABLE proc ADD db_collation
 
443
                     char(32) collate utf8_bin DEFAULT NULL
 
444
                     AFTER collation_connection;
 
445
ALTER TABLE proc MODIFY db_collation
 
446
                        char(32) collate utf8_bin DEFAULT NULL;
 
447
 
 
448
SELECT CASE WHEN COUNT(*) > 0 THEN 
 
449
CONCAT ("WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been updated with default values. Please verify if necessary.")
 
450
ELSE NULL
 
451
END
 
452
AS value FROM proc WHERE db_collation IS NULL;
 
453
 
 
454
UPDATE proc AS p SET db_collation  = 
 
455
                     ( SELECT DEFAULT_COLLATION_NAME 
 
456
                       FROM INFORMATION_SCHEMA.SCHEMATA 
 
457
                       WHERE SCHEMA_NAME = p.db)
 
458
                     WHERE db_collation IS NULL;
 
459
 
 
460
ALTER TABLE proc ADD body_utf8 longblob DEFAULT NULL
 
461
                     AFTER db_collation;
 
462
ALTER TABLE proc MODIFY body_utf8 longblob DEFAULT NULL;
 
463
 
 
464
 
 
465
#
 
466
# EVENT privilege
 
467
#
 
468
SET @hadEventPriv := 0;
 
469
SELECT @hadEventPriv :=1 FROM user WHERE Event_priv LIKE '%';
 
470
 
 
471
ALTER TABLE user add Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL AFTER Create_user_priv;
 
472
ALTER TABLE user MODIFY Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL AFTER Create_user_priv;
 
473
 
 
474
UPDATE user SET Event_priv=Super_priv WHERE @hadEventPriv = 0;
 
475
 
 
476
ALTER TABLE db add Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL;
 
477
ALTER TABLE db MODIFY Event_priv enum('N','Y') character set utf8 DEFAULT 'N' NOT NULL;
 
478
 
 
479
#
 
480
# EVENT table
 
481
#
 
482
ALTER TABLE event DROP PRIMARY KEY;
 
483
ALTER TABLE event ADD PRIMARY KEY(db, name);
 
484
# Add sql_mode column just in case.
 
485
ALTER TABLE event ADD sql_mode set ('NOT_USED') AFTER on_completion;
 
486
# Update list of sql_mode values.
 
487
ALTER TABLE event MODIFY sql_mode
 
488
                        set('REAL_AS_FLOAT',
 
489
                            'PIPES_AS_CONCAT',
 
490
                            'ANSI_QUOTES',
 
491
                            'IGNORE_SPACE',
 
492
                            'NOT_USED',
 
493
                            'ONLY_FULL_GROUP_BY',
 
494
                            'NO_UNSIGNED_SUBTRACTION',
 
495
                            'NO_DIR_IN_CREATE',
 
496
                            'POSTGRESQL',
 
497
                            'ORACLE',
 
498
                            'MSSQL',
 
499
                            'DB2',
 
500
                            'MAXDB',
 
501
                            'NO_KEY_OPTIONS',
 
502
                            'NO_TABLE_OPTIONS',
 
503
                            'NO_FIELD_OPTIONS',
 
504
                            'MYSQL323',
 
505
                            'MYSQL40',
 
506
                            'ANSI',
 
507
                            'NO_AUTO_VALUE_ON_ZERO',
 
508
                            'NO_BACKSLASH_ESCAPES',
 
509
                            'STRICT_TRANS_TABLES',
 
510
                            'STRICT_ALL_TABLES',
 
511
                            'NO_ZERO_IN_DATE',
 
512
                            'NO_ZERO_DATE',
 
513
                            'INVALID_DATES',
 
514
                            'ERROR_FOR_DIVISION_BY_ZERO',
 
515
                            'TRADITIONAL',
 
516
                            'NO_AUTO_CREATE_USER',
 
517
                            'HIGH_NOT_PRECEDENCE',
 
518
                            'NO_ENGINE_SUBSTITUTION',
 
519
                            'PAD_CHAR_TO_FULL_LENGTH'
 
520
                            ) DEFAULT '' NOT NULL AFTER on_completion;
 
521
ALTER TABLE event MODIFY name char(64) CHARACTER SET utf8 NOT NULL default '';
 
522
 
 
523
ALTER TABLE event MODIFY COLUMN originator INT UNSIGNED NOT NULL;
 
524
ALTER TABLE event ADD COLUMN originator INT UNSIGNED NOT NULL AFTER comment;
 
525
 
 
526
ALTER TABLE event MODIFY COLUMN status ENUM('ENABLED','DISABLED','SLAVESIDE_DISABLED') NOT NULL default 'ENABLED';
 
527
 
 
528
ALTER TABLE event ADD COLUMN time_zone char(64) CHARACTER SET latin1
 
529
        NOT NULL DEFAULT 'SYSTEM' AFTER originator;
 
530
 
 
531
ALTER TABLE event ADD character_set_client
 
532
                      char(32) collate utf8_bin DEFAULT NULL
 
533
                      AFTER time_zone;
 
534
ALTER TABLE event MODIFY character_set_client
 
535
                         char(32) collate utf8_bin DEFAULT NULL;
 
536
 
 
537
ALTER TABLE event ADD collation_connection
 
538
                      char(32) collate utf8_bin DEFAULT NULL
 
539
                      AFTER character_set_client;
 
540
ALTER TABLE event MODIFY collation_connection
 
541
                         char(32) collate utf8_bin DEFAULT NULL;
 
542
 
 
543
ALTER TABLE event ADD db_collation
 
544
                      char(32) collate utf8_bin DEFAULT NULL
 
545
                      AFTER collation_connection;
 
546
ALTER TABLE event MODIFY db_collation
 
547
                         char(32) collate utf8_bin DEFAULT NULL;
 
548
 
 
549
ALTER TABLE event ADD body_utf8 longblob DEFAULT NULL
 
550
                      AFTER db_collation;
 
551
ALTER TABLE event MODIFY body_utf8 longblob DEFAULT NULL;
 
552
 
 
553
 
 
554
#
 
555
# TRIGGER privilege
 
556
#
 
557
 
 
558
SET @hadTriggerPriv := 0;
 
559
SELECT @hadTriggerPriv :=1 FROM user WHERE Trigger_priv LIKE '%';
 
560
 
 
561
ALTER TABLE user ADD Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Event_priv;
 
562
ALTER TABLE user MODIFY Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Event_priv;
 
563
 
 
564
ALTER TABLE host ADD Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
 
565
ALTER TABLE host MODIFY Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
 
566
 
 
567
ALTER TABLE db ADD Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
 
568
ALTER TABLE db MODIFY Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
 
569
 
 
570
ALTER TABLE tables_priv MODIFY Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') COLLATE utf8_general_ci DEFAULT '' NOT NULL;
 
571
 
 
572
UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0;
 
573
 
 
574
# Activate the new, possible modified privilege tables
 
575
# This should not be needed, but gives us some extra testing that the above
 
576
# changes was correct
 
577
 
 
578
flush privileges;