~hexmode/+junk/main

« back to all changes in this revision

Viewing changes to install-files/bin/mysql/mysql5.0.45/share/mysql_system_tables_fix.sql

  • Committer: Mark A. Hershberger
  • Date: 2008-01-05 19:38:56 UTC
  • Revision ID: hershberger@spawn-xp-20080105193856-6rnzgwa4nehue3qj
initial commit

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
 
 
45
ALTER TABLE tables_priv
 
46
  ADD KEY Grantor (Grantor);
 
47
 
 
48
ALTER TABLE tables_priv
 
49
  MODIFY Host char(60) NOT NULL default '',
 
50
  MODIFY Db char(64) NOT NULL default '',
 
51
  MODIFY User char(16) NOT NULL default '',
 
52
  MODIFY Table_name char(64) NOT NULL default '',
 
53
  MODIFY Grantor char(77) NOT NULL default '',
 
54
  ENGINE=MyISAM,
 
55
  CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
 
56
 
 
57
ALTER TABLE tables_priv
 
58
  MODIFY Column_priv set('Select','Insert','Update','References')
 
59
    COLLATE utf8_general_ci DEFAULT '' NOT NULL,
 
60
  MODIFY Table_priv set('Select','Insert','Update','Delete','Create',
 
61
                        'Drop','Grant','References','Index','Alter',
 
62
                        'Create View','Show view')
 
63
    COLLATE utf8_general_ci DEFAULT '' NOT NULL,
 
64
  COMMENT='Table privileges';
 
65
 
 
66
#
 
67
# columns_priv
 
68
#
 
69
 
 
70
# Name change of Type -> Column_priv from MySQL 3.22.12
 
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') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,
 
135
ADD Lock_tables_priv enum('N','Y') COLLATE utf8_general_ci 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
# Detect whether we had Create_view_priv
 
220
#
 
221
SET @hadCreateViewPriv:=0;
 
222
SELECT @hadCreateViewPriv:=1 FROM user WHERE Create_view_priv LIKE '%';
 
223
 
 
224
#
 
225
# Create VIEWs privileges (v5.0)
 
226
#
 
227
ALTER TABLE db ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
 
228
ALTER TABLE db MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
 
229
 
 
230
ALTER TABLE host ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
 
231
ALTER TABLE host MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Lock_tables_priv;
 
232
 
 
233
ALTER TABLE user ADD Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv;
 
234
ALTER TABLE user MODIFY Create_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Repl_client_priv;
 
235
 
 
236
#
 
237
# Show VIEWs privileges (v5.0)
 
238
#
 
239
ALTER TABLE db ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
240
ALTER TABLE db MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
241
 
 
242
ALTER TABLE host ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
243
ALTER TABLE host MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
244
 
 
245
ALTER TABLE user ADD Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
246
ALTER TABLE user MODIFY Show_view_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_view_priv;
 
247
 
 
248
#
 
249
# Assign create/show view privileges to people who have create provileges
 
250
#
 
251
UPDATE user SET Create_view_priv=Create_priv, Show_view_priv=Create_priv where user<>"" AND @hadCreateViewPriv = 0;
 
252
 
 
253
#
 
254
#
 
255
#
 
256
SET @hadCreateRoutinePriv:=0;
 
257
SELECT @hadCreateRoutinePriv:=1 FROM user WHERE Create_routine_priv LIKE '%';
 
258
 
 
259
#
 
260
# Create PROCEDUREs privileges (v5.0)
 
261
#
 
262
ALTER TABLE db ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
263
ALTER TABLE db MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
264
 
 
265
ALTER TABLE host ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
266
ALTER TABLE host MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
267
 
 
268
ALTER TABLE user ADD Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
269
ALTER TABLE user MODIFY Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Show_view_priv;
 
270
 
 
271
#
 
272
# Alter PROCEDUREs privileges (v5.0)
 
273
#
 
274
ALTER TABLE db ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
275
ALTER TABLE db MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
276
 
 
277
ALTER TABLE host ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
278
ALTER TABLE host MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
279
 
 
280
ALTER TABLE user ADD Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
281
ALTER TABLE user MODIFY Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Create_routine_priv;
 
282
 
 
283
ALTER TABLE db ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
284
ALTER TABLE db MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
285
 
 
286
ALTER TABLE host ADD Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
287
ALTER TABLE host MODIFY Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
288
 
 
289
#
 
290
# Assign create/alter routine privileges to people who have create privileges
 
291
#
 
292
UPDATE user SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv where user<>"" AND @hadCreateRoutinePriv = 0;
 
293
UPDATE db SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv, Execute_priv=Select_priv where user<>"" AND @hadCreateRoutinePriv = 0;
 
294
UPDATE host SET Create_routine_priv=Create_priv, Alter_routine_priv=Alter_priv, Execute_priv=Select_priv where @hadCreateRoutinePriv = 0;
 
295
 
 
296
#
 
297
# Add max_user_connections resource limit
 
298
#
 
299
ALTER TABLE user ADD max_user_connections int(11) unsigned DEFAULT '0' NOT NULL AFTER max_connections;
 
300
 
 
301
#
 
302
# user.Create_user_priv
 
303
#
 
304
 
 
305
SET @hadCreateUserPriv:=0;
 
306
SELECT @hadCreateUserPriv:=1 FROM user WHERE Create_user_priv LIKE '%';
 
307
 
 
308
ALTER TABLE user ADD Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
309
ALTER TABLE user MODIFY Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL AFTER Alter_routine_priv;
 
310
UPDATE user LEFT JOIN db USING (Host,User) SET Create_user_priv='Y'
 
311
  WHERE @hadCreateUserPriv = 0 AND
 
312
        (user.Grant_priv = 'Y' OR db.Grant_priv = 'Y');
 
313
 
 
314
#
 
315
# procs_priv
 
316
#
 
317
 
 
318
ALTER TABLE procs_priv
 
319
  ENGINE=MyISAM,
 
320
  CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
 
321
 
 
322
ALTER TABLE procs_priv
 
323
  MODIFY Proc_priv set('Execute','Alter Routine','Grant')
 
324
    COLLATE utf8_general_ci DEFAULT '' NOT NULL;
 
325
 
 
326
ALTER TABLE procs_priv
 
327
  ADD Routine_type enum('FUNCTION','PROCEDURE')
 
328
    COLLATE utf8_general_ci NOT NULL AFTER Routine_name;
 
329
 
 
330
ALTER TABLE procs_priv
 
331
  MODIFY Timestamp timestamp(14) AFTER Proc_priv;
 
332
 
 
333
#
 
334
# proc
 
335
#
 
336
 
 
337
# Correct the name fields to not binary, and expand sql_data_access
 
338
ALTER TABLE proc MODIFY name char(64) DEFAULT '' NOT NULL,
 
339
                 MODIFY specific_name char(64) DEFAULT '' NOT NULL,
 
340
                 MODIFY sql_data_access
 
341
                        enum('CONTAINS_SQL',
 
342
                             'NO_SQL',
 
343
                             'READS_SQL_DATA',
 
344
                             'MODIFIES_SQL_DATA'
 
345
                            ) DEFAULT 'CONTAINS_SQL' NOT NULL,
 
346
                 MODIFY body longblob DEFAULT '' NOT NULL,
 
347
                 MODIFY sql_mode
 
348
                        set('REAL_AS_FLOAT',
 
349
                            'PIPES_AS_CONCAT',
 
350
                            'ANSI_QUOTES',
 
351
                            'IGNORE_SPACE',
 
352
                            'NOT_USED',
 
353
                            'ONLY_FULL_GROUP_BY',
 
354
                            'NO_UNSIGNED_SUBTRACTION',
 
355
                            'NO_DIR_IN_CREATE',
 
356
                            'POSTGRESQL',
 
357
                            'ORACLE',
 
358
                            'MSSQL',
 
359
                            'DB2',
 
360
                            'MAXDB',
 
361
                            'NO_KEY_OPTIONS',
 
362
                            'NO_TABLE_OPTIONS',
 
363
                            'NO_FIELD_OPTIONS',
 
364
                            'MYSQL323',
 
365
                            'MYSQL40',
 
366
                            'ANSI',
 
367
                            'NO_AUTO_VALUE_ON_ZERO',
 
368
                            'NO_BACKSLASH_ESCAPES',
 
369
                            'STRICT_TRANS_TABLES',
 
370
                            'STRICT_ALL_TABLES',
 
371
                            'NO_ZERO_IN_DATE',
 
372
                            'NO_ZERO_DATE',
 
373
                            'INVALID_DATES',
 
374
                            'ERROR_FOR_DIVISION_BY_ZERO',
 
375
                            'TRADITIONAL',
 
376
                            'NO_AUTO_CREATE_USER',
 
377
                            'HIGH_NOT_PRECEDENCE'
 
378
                            ) DEFAULT '' NOT NULL,
 
379
                 DEFAULT CHARACTER SET utf8;
 
380
 
 
381
# Correct the character set and collation
 
382
ALTER TABLE proc CONVERT TO CHARACTER SET utf8;
 
383
# Reset some fields after the conversion
 
384
ALTER TABLE proc  MODIFY db
 
385
                         char(64) collate utf8_bin DEFAULT '' NOT NULL,
 
386
                  MODIFY definer
 
387
                         char(77) collate utf8_bin DEFAULT '' NOT NULL,
 
388
                  MODIFY comment
 
389
                         char(64) collate utf8_bin DEFAULT '' NOT NULL;
 
390
 
 
391
# Activate the new, possible modified privilege tables
 
392
# This should not be needed, but gives us some extra testing that the above
 
393
# changes was correct
 
394
 
 
395
flush privileges;