Portability fixes
Added record_rnd_buffer Added --safe-user-create Fix for ALTER TABLE RENAME on windows Docs/manual.texi: Changelog and documentation of new features. More information about using threaded client libraries include/mysql_com.h: Added prototype for my_thread_init() include/mysqld_error.h: New error for --safe-create-user innobase/buf/buf0flu.c: Portability fix innobase/include/univ.i: Portability fix mysql-test/t/distinct.test: Test for distinct bug sql/mysql_priv.h: Added record_rnd_buffer sql/mysqld.cc: Added record_rnd_buffer sql/records.cc: Added record_rnd_buffer sql/share/czech/errmsg.txt: New error message for --safe-user-create sql/share/danish/errmsg.txt: New error message for --safe-user-create sql/share/dutch/errmsg.txt: New error message for --safe-user-create sql/share/english/errmsg.txt: New error message for --safe-user-create sql/share/estonian/errmsg.txt: New error message for --safe-user-create sql/share/french/errmsg.txt: New error message for --safe-user-create sql/share/german/errmsg.txt: New error message for --safe-user-create sql/share/greek/errmsg.txt: New error message for --safe-user-create sql/share/hungarian/errmsg.txt: New error message for --safe-user-create sql/share/italian/errmsg.txt: New error message for --safe-user-create sql/share/japanese/errmsg.txt: New error message for --safe-user-create sql/share/korean/errmsg.txt: New error message for --safe-user-create sql/share/norwegian-ny/errmsg.txt: New error message for --safe-user-create sql/share/norwegian/errmsg.txt: New error message for --safe-user-create sql/share/polish/errmsg.txt: New error message for --safe-user-create sql/share/portuguese/errmsg.txt: New error message for --safe-user-create sql/share/romanian/errmsg.txt: New error message for --safe-user-create sql/share/russian/errmsg.txt: New error message for --safe-user-create sql/share/slovak/errmsg.txt: New error message for --safe-user-create sql/share/spanish/errmsg.txt: New error message for --safe-user-create sql/share/swedish/errmsg.txt: New error message for --safe-user-create sql/sql_acl.cc: Checking of privileges for --safe-user-create sql/sql_acl.h: --safe-user-create sql/sql_base.cc: --safe-user-create sql/sql_parse.cc: --safe-user-create sql/sql_show.cc: --safe-user-create sql/sql_table.cc: Fix for ALTER TABLE RENAME on windows
This commit is contained in:
parent
bffebc8e0b
commit
aa3c430675
161
Docs/manual.texi
161
Docs/manual.texi
@ -14522,15 +14522,10 @@ Skip some optimize stages. Implies @code{--skip-delay-key-write}.
|
||||
@item --safe-show-database
|
||||
Don't show databases for which the user doesn't have any privileges.
|
||||
|
||||
@item --secure
|
||||
IP numbers returned by the @code{gethostbyname()} system call are
|
||||
checked to make sure they resolve back to the original hostname. This
|
||||
makes it harder for someone on the outside to get access by pretending
|
||||
to be another host. This option also adds some sanity checks of
|
||||
hostnames. The option is turned off by default in @strong{MySQL} Version 3.21
|
||||
because sometimes it takes a long time to perform backward resolutions.
|
||||
@strong{MySQL} Version 3.22 caches hostnames (unless @code{--skip-host-cache}
|
||||
is used) and has this option enabled by default.
|
||||
@item --safe-user-create
|
||||
If this is enabled, a user can't create new users with the GRANT
|
||||
command, if the user doesn't have @code{INSERT} privilege to the
|
||||
@code{mysql.user} table or any column in this table.
|
||||
|
||||
@item --skip-concurrent-insert
|
||||
Turn off the ability to select and insert at the same time on @code{MyISAM}
|
||||
@ -15313,11 +15308,10 @@ by using @code{LOAD DATA} to load @file{/etc/passwd} into a table, which
|
||||
can then be read with @code{SELECT}.
|
||||
|
||||
@item
|
||||
If you don't trust your DNS, you should use IP numbers instead of hostnames
|
||||
in the grant tables. In principle, the @code{--secure} option to
|
||||
@code{mysqld} should make hostnames safe. In any case, you should be very
|
||||
careful about creating grant table entries using hostname values that
|
||||
contain wild cards!
|
||||
If you don't trust your DNS, you should use IP numbers instead of
|
||||
hostnames in the grant tables. In any case, you should be very careful
|
||||
about creating grant table entries using hostname values that contain
|
||||
wild cards!
|
||||
|
||||
@item
|
||||
If you want to restrict the number of connections for a single user, you
|
||||
@ -15325,21 +15319,31 @@ can do this by setting the @code{max_user_connections} variable in
|
||||
@code{mysqld}.
|
||||
@end itemize
|
||||
|
||||
|
||||
@node Privileges options, What Privileges, Security, Privilege system
|
||||
@subsection Startup Options for @code{mysqld} Concerning Security
|
||||
|
||||
The following @code{mysqld} options affect networking security:
|
||||
The following @code{mysqld} options affect security:
|
||||
|
||||
@table @code
|
||||
@item --secure
|
||||
IP numbers returned by the @code{gethostbyname()} system call are
|
||||
checked to make sure they resolve back to the original hostname. This
|
||||
makes it harder for someone on the outside to get access by pretending
|
||||
to be another host. This option also adds some sanity checks of
|
||||
hostnames. The option is turned off by default in @strong{MySQL} Version
|
||||
3.21 because sometimes it takes a long time to perform backward resolutions.
|
||||
@strong{MySQL} Version 3.22 caches hostnames and has this option enabled by
|
||||
default.
|
||||
@item --safe-show-database
|
||||
With this option,
|
||||
@code{SHOW DATABASES} returns only those databases for which the user has
|
||||
some kind of privilege.
|
||||
|
||||
@item @code{--safe-user-create}
|
||||
If this is enabled, an user can't create new users with the @code{GRANT}
|
||||
command, if the user doesn't have @code{INSERT} privilege to the
|
||||
@code{mysql.user} table. If you want to give a user access to just create
|
||||
new users with those privileges that the user has right to grant, you should
|
||||
give the user the following privilege:
|
||||
|
||||
@example
|
||||
GRANT INSERT(user) on mysql.user to 'user'@'hostname';
|
||||
@end example
|
||||
|
||||
This will ensure that the user can't change any privilege columns directly,
|
||||
but has to use the @code{GRANT} command to give privileges to other users.
|
||||
|
||||
@item --skip-grant-tables
|
||||
This option causes the server not to use the privilege system at all. This
|
||||
@ -15361,11 +15365,6 @@ support Unix sockets.
|
||||
With this option, the
|
||||
@code{SHOW DATABASES} statement doesn't return anything.
|
||||
|
||||
@item --safe-show-database
|
||||
With this option,
|
||||
@code{SHOW DATABASES} returns only those databases for which the user has
|
||||
some kind of privilege.
|
||||
|
||||
@end table
|
||||
|
||||
|
||||
@ -19812,6 +19811,11 @@ Each thread that does a sequential scan allocates a buffer of this
|
||||
size for each table it scans. If you do many sequential scans, you may
|
||||
want to increase this value.
|
||||
|
||||
@item @code{record_rnd_buffer}
|
||||
When reading rows in sorted order after a sort, the rows are read through this
|
||||
buffer to avoid a disk seeks. If not set, then it's set to the value of
|
||||
@code{record_buffer}.
|
||||
|
||||
@item @code{query_buffer_size}
|
||||
The initial allocation of the query buffer. If most of your queries are
|
||||
long (like when inserting blobs), you should increase this!
|
||||
@ -25946,6 +25950,7 @@ net_read_timeout current value: 30
|
||||
net_write_timeout current value: 60
|
||||
query_buffer_size current value: 0
|
||||
record_buffer current value: 131072
|
||||
record_rnd_buffer current value: 131072
|
||||
slow_launch_time current value: 2
|
||||
sort_buffer current value: 2097116
|
||||
table_cache current value: 64
|
||||
@ -26006,6 +26011,11 @@ shell> safe_mysqld -O key_buffer=512k -O sort_buffer=16k \
|
||||
-O table_cache=32 -O record_buffer=8k -O net_buffer=1K &
|
||||
@end example
|
||||
|
||||
If you are doing a @code{GROUP BY} or @code{ORDER BY} on files that are
|
||||
much bigger than your available memory you should increase the value of
|
||||
@code{record_rnd_buffer} to speed up the reading of rows after the sorting
|
||||
is done.
|
||||
|
||||
When you have installed @strong{MySQL}, the @file{support-files} directory will
|
||||
contain some different @code{my.cnf} example files, @file{my-huge.cnf},
|
||||
@file{my-large.cnf}, @file{my-medium.cnf}, and @file{my-small.cnf}, you can
|
||||
@ -26167,6 +26177,11 @@ common we may add general support for memory mapping.
|
||||
Each request doing a sequential scan over a table allocates a read buffer
|
||||
(variable @code{record_buffer}).
|
||||
|
||||
@item
|
||||
When reading rows in 'random' order (for example after a sort) a
|
||||
random-read buffer is allocated to avoid disk seeks.
|
||||
(variable @code{record_rnd_buffer}).
|
||||
|
||||
@item
|
||||
All joins are done in one pass, and most joins can be done without even
|
||||
using a temporary table. Most temporary tables are memory-based (HEAP)
|
||||
@ -27642,7 +27657,7 @@ significant decimal digits that will be stored for values, and
|
||||
@code{2} (@code{scale}) represents the number of digits that will be
|
||||
stored following the decimal point. In this case, therefore, the range
|
||||
of values that can be stored in the @code{salary} column is from
|
||||
@code{-9999999.99} to @code{9999999.99}. In ANSI/ISO SQL92, the syntax
|
||||
@code{-999999.99} to @code{9999999.99}. In ANSI/ISO SQL92, the syntax
|
||||
@code{DECIMAL(p)} is equivalent to @code{DECIMAL(p,0)}. Similarly, the
|
||||
syntax @code{DECIMAL} is equivalent to @code{DECIMAL(p,0)}, where the
|
||||
implementation is allowed to decide the value of @code{p}.
|
||||
@ -29145,6 +29160,15 @@ mysql> select INTERVAL(22, 23, 30, 44, 200);
|
||||
Normally, if any expression in a string comparison is case sensitive, the
|
||||
comparison is performed in case-sensitive fashion.
|
||||
|
||||
If you are comparing case sensitive string with any of the standard
|
||||
operators (@code{=}, @code{<>}..., but not @code{LIKE}) end space will
|
||||
be ignored.
|
||||
|
||||
@example
|
||||
mysql> select "a" ="A ";
|
||||
-> 1
|
||||
@end example
|
||||
|
||||
@table @code
|
||||
@findex LIKE
|
||||
@item expr LIKE pat [ESCAPE 'escape-char']
|
||||
@ -37893,12 +37917,16 @@ To make Access work:
|
||||
@itemize @bullet
|
||||
@item
|
||||
If you are using Access 2000, you should get and install the newest
|
||||
Microsoft MDAC (@code{Microsoft Data Access Components}) from
|
||||
@uref{http://www.microsoft.com/data}. This will fix the following bug
|
||||
in Access: when you export data to @strong{MySQL}, the table and column
|
||||
names aren't specified. Another way to around this bug is to upgrade to
|
||||
MyODBC Version 2.50.33 and @strong{MySQL} Version 3.23.x, which together
|
||||
provide a workaround for this bug!
|
||||
(version 2.6 or above) Microsoft MDAC (@code{Microsoft Data Access
|
||||
Components}) from @uref{http://www.microsoft.com/data}. This will fix
|
||||
the following bug in Access: when you export data to @strong{MySQL}, the
|
||||
table and column names aren't specified. Another way to around this bug
|
||||
is to upgrade to MyODBC Version 2.50.33 and @strong{MySQL} Version
|
||||
3.23.x, which together provide a workaround for this bug!
|
||||
|
||||
You should also get and apply the Microsoft Jet 4.0 Service Pack 5 (SP5)
|
||||
which can be found here
|
||||
@uref{http://support.microsoft.com/support/kb/articles/Q 239/1/14.ASP}.
|
||||
|
||||
Note that if you are using @strong{MySQL} Version 3.22, you must to apply the
|
||||
MDAC patch and use MyODBC 2.50.32 or 2.50.34 and above to go around
|
||||
@ -40033,7 +40061,7 @@ other APIs.
|
||||
* C API function overview:: C API Function Overview
|
||||
* C API functions:: C API Function Descriptions
|
||||
* C API problems::
|
||||
* Thread-safe clients::
|
||||
* Thread-safe clients:: How to Make a Thread-safe Client
|
||||
@end menu
|
||||
|
||||
The C API code is distributed with @strong{MySQL}. It is included in the
|
||||
@ -42834,6 +42862,34 @@ If you program with POSIX threads, you can use
|
||||
establish and release a mutex lock.
|
||||
@end itemize
|
||||
|
||||
You need to know the following if you have a thread that is calling
|
||||
MySQL functions, but that thread has not created the connection to the
|
||||
MySQL database:
|
||||
|
||||
When you call @code{mysql_init()} or @code{mysql_connect()}, MySQL will
|
||||
create a thread specific variable for the thread that is used by the
|
||||
debug library (among other things).
|
||||
|
||||
If you have in a thread call a MySQL function, before a thread has
|
||||
called @code{mysql_init()} or @code{mysql_connect()}, the thread will
|
||||
not have the necessary thread specific variables in place and you are
|
||||
likely to end up with a core dump sooner or later.
|
||||
|
||||
The get things to work smoothly you have to do the following:
|
||||
|
||||
@enumerate
|
||||
@item
|
||||
Call @code{my_init()} at the start of your program if it calls
|
||||
any other MySQL function before calling @code{mysql_real_connect()}.
|
||||
@item
|
||||
Call @code{my_thread_init()} in the thread handler before calling
|
||||
any MySQL function.
|
||||
@item
|
||||
In the thread, call @code{my_thread_end()} before calling
|
||||
@code{pthread_exit()}. This will free the memory used by MySQL thread
|
||||
specific variables.
|
||||
@end enumerate
|
||||
|
||||
You may get some errors because of undefined symbols when linking your
|
||||
client with @code{mysqlclient_r}. In most cases this is because you haven't
|
||||
included the thread libraries on the link/compile line.
|
||||
@ -45434,6 +45490,8 @@ Romanian error messages.
|
||||
Hungarian error messages.
|
||||
@item Roberto M. Serqueira
|
||||
Portugise error messages.
|
||||
@item Carsten H. Pedersen
|
||||
Danish error messages
|
||||
@item David Sacerdote @email{davids@@secnet.com}
|
||||
Ideas for secure checking of DNS hostnames.
|
||||
@item Wei-Jou Chen @email{jou@@nematic.ieo.nctu.edu.tw}
|
||||
@ -45672,7 +45730,7 @@ users use this code as the rest of the code and because of this we are
|
||||
not yet 100% confident in this code.
|
||||
|
||||
@menu
|
||||
* News-3.23.41::
|
||||
* News-3.23.41:: Changes in release 3.23.41
|
||||
* News-3.23.40:: Changes in release 3.23.40
|
||||
* News-3.23.39:: Changes in release 3.23.39
|
||||
* News-3.23.38:: Changes in release 3.23.38
|
||||
@ -45721,8 +45779,35 @@ not yet 100% confident in this code.
|
||||
@appendixsubsec Changes in release 3.23.41
|
||||
@itemize @bullet
|
||||
@item
|
||||
InnoDB now supports < 4 GB rows. The former limit was 8000 bytes.
|
||||
@item
|
||||
The @code{doublewrite} file flush method is used in InnoDB.
|
||||
It reduces the need for Unix fsync calls to a fraction and
|
||||
improves performance on most Unix flavors.
|
||||
@item
|
||||
You can now use the InnoDB Monitor to print a lot of InnoDB state
|
||||
information, including locks, to the standard output; useful in
|
||||
performance tuning.
|
||||
@item
|
||||
Several bugs which could cause hangs in InnoDB have been fixed.
|
||||
@item
|
||||
Split @code{record_buffer} to @code{record_buffer} and
|
||||
@code{record_rnd_buffer}. To make things compatible to previous MySQL
|
||||
versions, if @code{record_rnd_buffer} is not set, then it takes the
|
||||
value of @code{record_buffer}.
|
||||
@item
|
||||
Fixed optimizing bug in @code{ORDER BY} where some @code{ORDER BY} parts
|
||||
where wrongly removed.
|
||||
@item
|
||||
Fixed overflow bug with @code{ALTER TABLE} and @code{MERGE} tables.
|
||||
@item
|
||||
Added prototypes for @code{my_thread_init()} and @code{my_thread_end()} to
|
||||
@file{mysql_com.h}
|
||||
@item
|
||||
Added option @code{--safe-user-create} to @code{mysqld}.
|
||||
@item
|
||||
Added options to the @code{--ansi} startup options to let the user
|
||||
decide which @code{ansi} options one to enable.
|
||||
@end itemize
|
||||
|
||||
@node News-3.23.40, News-3.23.39, News-3.23.41, News-3.23.x
|
||||
|
@ -218,17 +218,19 @@ my_bool check_scramble(const char *, const char *message,
|
||||
unsigned long *salt,my_bool old_ver);
|
||||
char *get_tty_password(char *opt_message);
|
||||
void hash_password(unsigned long *result, const char *password);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Some other useful functions */
|
||||
|
||||
void my_init(void);
|
||||
void load_defaults(const char *conf_file, const char **groups,
|
||||
int *argc, char ***argv);
|
||||
my_bool my_thread_init(void);
|
||||
void my_thread_end(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */
|
||||
|
||||
#ifdef __WIN__
|
||||
|
@ -211,4 +211,5 @@
|
||||
#define ER_DROP_DB_WITH_READ_LOCK 1208
|
||||
#define ER_CREATE_DB_WITH_READ_LOCK 1209
|
||||
#define ER_WRONG_ARGUMENTS 1210
|
||||
#define ER_ERROR_MESSAGES 211
|
||||
#define ER_NO_PERMISSON_TO_CREATE_USER 1211
|
||||
#define ER_ERROR_MESSAGES 212
|
||||
|
@ -10,6 +10,7 @@ Created 11/11/1995 Heikki Tuuri
|
||||
|
||||
#ifdef UNIV_NONINL
|
||||
#include "buf0flu.ic"
|
||||
#include "trx0sys.h"
|
||||
#endif
|
||||
|
||||
#include "ut0byte.h"
|
||||
|
@ -9,12 +9,10 @@ Created 1/20/1994 Heikki Tuuri
|
||||
#ifndef univ_i
|
||||
#define univ_i
|
||||
|
||||
#if (defined(_WIN32) || defined(_WIN64))
|
||||
#if (defined(_WIN32) || defined(_WIN64)) && !defined(MYSQL_SERVER)
|
||||
#define __WIN__
|
||||
|
||||
#ifndef MYSQL_SERVER
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
/* If you want to check for errors with compiler level -W4,
|
||||
comment out the above include of windows.h and let the following defines
|
||||
|
@ -198,3 +198,12 @@ insert into t2 values (1,1),(2,2),(3,3);
|
||||
select t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
|
||||
select distinct t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# Test problem with DISTINCT and HAVING
|
||||
#
|
||||
create table t1 (a int not null,b char(5), c text);
|
||||
insert into t1 (a) values (1),(2),(3),(4),(1),(2),(3),(4);
|
||||
select distinct a from t1 group by b,a having a > 2 order by a desc;
|
||||
select distinct a,c from t1 group by b,c,a having a > 2 order by a desc;
|
||||
drop table t1;
|
||||
|
@ -251,6 +251,7 @@ void kill_mysql(void);
|
||||
void close_connection(NET *net,uint errcode=0,bool lock=1);
|
||||
bool check_access(THD *thd,uint access,const char *db=0,uint *save_priv=0,
|
||||
bool no_grant=0);
|
||||
bool check_table_access(THD *thd,uint want_access,TABLE_LIST *tables);
|
||||
bool check_process_priv(THD *thd=0);
|
||||
|
||||
int generate_table(THD *thd, TABLE_LIST *table_list,
|
||||
@ -530,10 +531,10 @@ extern ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
|
||||
what_to_log,flush_time,
|
||||
max_tmp_tables,max_heap_table_size,query_buff_size,
|
||||
lower_case_table_names,thread_stack,thread_stack_min,
|
||||
binlog_cache_size, max_binlog_cache_size;
|
||||
binlog_cache_size, max_binlog_cache_size, record_rnd_cache_size;
|
||||
extern ulong specialflag, current_pid;
|
||||
extern bool low_priority_updates, using_update_log;
|
||||
extern bool opt_sql_bin_update, opt_safe_show_db, opt_warnings;
|
||||
extern bool low_priority_updates, using_update_log,opt_warnings;
|
||||
extern bool opt_sql_bin_update, opt_safe_show_db, opt_safe_user_create;
|
||||
extern char language[LIBLEN],reg_ext[FN_EXTLEN],blob_newline;
|
||||
extern const char **errmesg; /* Error messages */
|
||||
extern const char *default_tx_isolation_name;
|
||||
|
@ -213,7 +213,8 @@ static bool opt_log,opt_update_log,opt_bin_log,opt_slow_log,opt_noacl,
|
||||
opt_disable_networking=0, opt_bootstrap=0,opt_skip_show_db=0,
|
||||
opt_ansi_mode=0,opt_myisam_log=0,
|
||||
opt_large_files=sizeof(my_off_t) > 4;
|
||||
bool opt_sql_bin_update = 0, opt_log_slave_updates = 0, opt_safe_show_db=0;
|
||||
bool opt_sql_bin_update = 0, opt_log_slave_updates = 0, opt_safe_show_db=0,
|
||||
opt_safe_user_create=0;
|
||||
FILE *bootstrap_file=0;
|
||||
int segfaulted = 0; // ensure we do not enter SIGSEGV handler twice
|
||||
extern MASTER_INFO glob_mi;
|
||||
@ -261,7 +262,7 @@ ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size,
|
||||
query_buff_size, lower_case_table_names, mysqld_net_retry_count,
|
||||
net_interactive_timeout, slow_launch_time = 2L,
|
||||
net_read_timeout,net_write_timeout,slave_open_temp_tables=0,
|
||||
open_files_limit=0, max_binlog_size;
|
||||
open_files_limit=0, max_binlog_size, record_rnd_cache_size;
|
||||
ulong slave_net_timeout;
|
||||
ulong thread_cache_size=0, binlog_cache_size=0, max_binlog_cache_size=0;
|
||||
volatile ulong cached_thread_count=0;
|
||||
@ -1481,9 +1482,13 @@ static void open_log(MYSQL_LOG *log, const char *hostname,
|
||||
// get rid of extention if the log is binary to avoid problems
|
||||
if (type == LOG_BIN)
|
||||
{
|
||||
char* p = strrchr((char*) opt_name, FN_EXTCHAR);
|
||||
char *p = fn_ext(opt_name);
|
||||
if (p)
|
||||
*p = 0;
|
||||
{
|
||||
uint length=(uint) (p-opt_name);
|
||||
strmake(tmp,opt_name,min(length,FN_REFLEN));
|
||||
opt_name=tmp;
|
||||
}
|
||||
}
|
||||
log->open(opt_name,type);
|
||||
}
|
||||
@ -2471,7 +2476,8 @@ enum options {
|
||||
OPT_GEMINI_FLUSH_LOG, OPT_GEMINI_RECOVER,
|
||||
OPT_GEMINI_UNBUFFERED_IO, OPT_SKIP_SAFEMALLOC,
|
||||
OPT_SKIP_STACK_TRACE, OPT_SKIP_SYMLINKS,
|
||||
OPT_MAX_BINLOG_DUMP_EVENTS, OPT_SPORADIC_BINLOG_DUMP_FAIL
|
||||
OPT_MAX_BINLOG_DUMP_EVENTS, OPT_SPORADIC_BINLOG_DUMP_FAIL,
|
||||
OPT_SAFE_USER_CREATE
|
||||
};
|
||||
|
||||
static struct option long_options[] = {
|
||||
@ -2583,7 +2589,7 @@ static struct option long_options[] = {
|
||||
(int) OPT_REPLICATE_REWRITE_DB},
|
||||
{"safe-mode", no_argument, 0, (int) OPT_SAFE},
|
||||
{"safe-show-database", no_argument, 0, (int) OPT_SAFE_SHOW_DB},
|
||||
{"socket", required_argument, 0, (int) OPT_SOCKET},
|
||||
{"safe-user-create", no_argument, 0, (int) OPT_SAFE_USER_CREATE},
|
||||
{"server-id", required_argument, 0, (int) OPT_SERVER_ID},
|
||||
{"set-variable", required_argument, 0, 'O'},
|
||||
{"skip-bdb", no_argument, 0, (int) OPT_BDB_SKIP},
|
||||
@ -2603,6 +2609,7 @@ static struct option long_options[] = {
|
||||
{"skip-stack-trace", no_argument, 0, (int) OPT_SKIP_STACK_TRACE},
|
||||
{"skip-symlink", no_argument, 0, (int) OPT_SKIP_SYMLINKS},
|
||||
{"skip-thread-priority", no_argument, 0, (int) OPT_SKIP_PRIOR},
|
||||
{"socket", required_argument, 0, (int) OPT_SOCKET},
|
||||
{"sql-bin-update-same", no_argument, 0, (int) OPT_SQL_BIN_UPDATE_SAME},
|
||||
#include "sslopt-longopts.h"
|
||||
#ifdef __WIN__
|
||||
@ -2741,6 +2748,8 @@ CHANGEABLE_VAR changeable_vars[] = {
|
||||
0, MALLOC_OVERHEAD, (long) ~0, MALLOC_OVERHEAD, IO_SIZE },
|
||||
{ "record_buffer", (long*) &my_default_record_cache_size,
|
||||
128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE },
|
||||
{ "record_rnd_buffer", (long*) &record_rnd_cache_size,
|
||||
0, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE },
|
||||
{ "slave_net_timeout", (long*) &slave_net_timeout,
|
||||
SLAVE_NET_TIMEOUT, 1, 65535, 0, 1 },
|
||||
{ "slow_launch_time", (long*) &slow_launch_time,
|
||||
@ -2856,6 +2865,7 @@ struct show_var_st init_vars[]= {
|
||||
{"port", (char*) &mysql_port, SHOW_INT},
|
||||
{"protocol_version", (char*) &protocol_version, SHOW_INT},
|
||||
{"record_buffer", (char*) &my_default_record_cache_size,SHOW_LONG},
|
||||
{"record_rnd_buffer", (char*) &record_rnd_cache_size, SHOW_LONG},
|
||||
{"query_buffer_size", (char*) &query_buff_size, SHOW_LONG},
|
||||
{"safe_show_database", (char*) &opt_safe_show_db, SHOW_BOOL},
|
||||
{"server_id", (char*) &server_id, SHOW_LONG},
|
||||
@ -3030,6 +3040,8 @@ static void usage(void)
|
||||
--safe-mode Skip some optimize stages (for testing)\n\
|
||||
--safe-show-database Don't show databases for which the user has no\n\
|
||||
privileges\n\
|
||||
--safe-user-create Don't new users cretaion without privileges to the\n\
|
||||
mysql.user table\n\
|
||||
--skip-concurrent-insert\n\
|
||||
Don't use concurrent insert with MyISAM\n\
|
||||
--skip-delay-key-write\n\
|
||||
@ -3747,6 +3759,9 @@ static void get_options(int argc,char **argv)
|
||||
case OPT_SAFE_SHOW_DB:
|
||||
opt_safe_show_db=1;
|
||||
break;
|
||||
case OPT_SAFE_USER_CREATE:
|
||||
opt_safe_user_create=1;
|
||||
break;
|
||||
case OPT_SKIP_SAFEMALLOC:
|
||||
#ifdef SAFEMALLOC
|
||||
sf_malloc_quick=1;
|
||||
@ -3770,6 +3785,9 @@ static void get_options(int argc,char **argv)
|
||||
fix_paths();
|
||||
default_table_type_name=ha_table_typelib.type_names[default_table_type-1];
|
||||
default_tx_isolation_name=tx_isolation_typelib.type_names[default_tx_isolation];
|
||||
/* To be deleted in MySQL 4.0 */
|
||||
if (!record_rnd_cache_size)
|
||||
record_rnd_cache_size=my_default_record_cache_size;
|
||||
}
|
||||
|
||||
|
||||
|
@ -66,7 +66,7 @@ void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
|
||||
table->file->rnd_init(0);
|
||||
|
||||
if (! (specialflag & SPECIAL_SAFE_MODE) &&
|
||||
my_default_record_cache_size &&
|
||||
record_rnd_cache_size &&
|
||||
!table->file->fast_key_read() &&
|
||||
(table->db_stat & HA_READ_ONLY ||
|
||||
table->reginfo.lock_type <= TL_READ_NO_INSERT) &&
|
||||
@ -216,7 +216,7 @@ static int init_rr_cache(READ_RECORD *info)
|
||||
info->reclength=ALIGN_SIZE(info->struct_length);
|
||||
|
||||
info->error_offset=info->table->reclength;
|
||||
info->cache_records=my_default_record_cache_size/
|
||||
info->cache_records=record_rnd_cache_size/
|
||||
(info->reclength+info->struct_length);
|
||||
rec_cache_size=info->cache_records*info->reclength;
|
||||
info->rec_cache_size=info->cache_records*info->ref_length;
|
||||
|
@ -221,3 +221,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -2,29 +2,29 @@
|
||||
This file is public domain and comes with NO WARRANTY of any kind */
|
||||
|
||||
/* Knud Riishøjgård knudriis@post.tele.dk 99 &&
|
||||
Carsten H. Pedersen, carsten.pedersen@bitbybit.dk oct. 1999 */
|
||||
Carsten H. Pedersen, carsten.pedersen@bitbybit.dk oct. 1999 / aug. 2001. */
|
||||
|
||||
"hashchk",
|
||||
"isamchk",
|
||||
"NEJ",
|
||||
"JA",
|
||||
"Kan ikke oprette filen '%-.64s' (Fejlkode: %d)",
|
||||
"Kan ikke opprette tabellen '%-.64s' (Fejlkode: %d)",
|
||||
"Kan ikke oprette tabellen '%-.64s' (Fejlkode: %d)",
|
||||
"Kan ikke oprette databasen '%-.64s'. Fejl %d",
|
||||
"Kan ikke oprette databasen '%-.64s'. Databasen eksisterer",
|
||||
"Kan ikke slette (droppe) '%-.64s'. Databasen eksisterer ikke",
|
||||
"Fejl ved sletning (drop) af databasen (kan ikke slette '%-.64s', Fejl %d)",
|
||||
"Fejl ved sletting af database (kan ikke slette biblioteket '%-.64s', Fejl %d)",
|
||||
"Fejl ved sletting af database (kan ikke slette folderen '%-.64s', Fejl %d)",
|
||||
"Fejl ved sletning af '%-.64s' (Fejlkode: %d)",
|
||||
"Kan ikke læse posten i systembiblioteket",
|
||||
"Kan ikke læse posten i systemfolderen",
|
||||
"Kan ikke læse status af '%-.64s' (Fejlkode: %d)",
|
||||
"Kan ikke læse aktive bibliotek (Fejlkode: %d)",
|
||||
"Kan ikke læse aktive folder (Fejlkode: %d)",
|
||||
"Kan ikke låse fil (Fejlkode: %d)",
|
||||
"Kan ikke åbne fil: '%-.64s'. (Fejlkode: %d)",
|
||||
"Kan ikke finde fila: '%-.64s' (Fejlkode: %d)",
|
||||
"Kan ikke læse bibliotek '%-.64s' (Fejlkode: %d)",
|
||||
"Kan ikke skifte bibliotek til '%-.64s' (Fejlkode: %d)",
|
||||
"Posten erændret siden sidst læst '%-.64s'",
|
||||
"Kan ikke læse folder '%-.64s' (Fejlkode: %d)",
|
||||
"Kan ikke skifte folder til '%-.64s' (Fejlkode: %d)",
|
||||
"Posten er ændret siden sidste læsning '%-.64s'",
|
||||
"Ikke mere diskplads (%s). Venter på at få frigjort plads....",
|
||||
"Kan ikke skrive, flere ens nøgler i tabellen '%-.64s'",
|
||||
"Fejl ved lukning af '%-.64s' (Fejlkode: %d)",
|
||||
@ -32,10 +32,10 @@
|
||||
"Fejl ved omdøbning af '%-.64s' til '%-.64s' (Fejlkode: %d)",
|
||||
"Fejl ved skriving av filen '%-.64s' (Fejlkode: %d)",
|
||||
"'%-.64s' er låst mod opdateringer",
|
||||
"Sortering afbrutt",
|
||||
"Sortering afbrudt",
|
||||
"View '%-.64s' eksisterer ikke for '%-.64s'",
|
||||
"Modtog fejl %d fra tabel håndterer",
|
||||
"Tabel håndtereren for '%-.64s' har ikke denne mulighed",
|
||||
"Modtog fejl %d fra tabel håndteringen",
|
||||
"Denne mulighed eksisterer ikke for tabeltypen '%-.64s'",
|
||||
"Kan ikke finde posten i '%-.64s'",
|
||||
"Forkert indhold i: '%-.64s'",
|
||||
"Fejl i indeksfilen til tabellen '%-.64s', prøv at reparere den",
|
||||
@ -43,95 +43,95 @@
|
||||
"'%-.64s' er skrivebeskyttet",
|
||||
"Ikke mere hukommelse. Genstart serveren og prøv igen (mangler %d bytes)",
|
||||
"Ikke mere sorteringshukommelse. Øg sorteringshukommelse (sort buffer size) for serveren",
|
||||
"Uventet sluttning af fil (eof) ved læsning af filen '%-.64s' (Fejlkode: %d)",
|
||||
"For mange tilkoblinger (connections)",
|
||||
"Uventet afslutning på fil (eof) ved læsning af filen '%-.64s' (Fejlkode: %d)",
|
||||
"For mange forbindelser (connections)",
|
||||
"Udgået for tråde/hukommelse",
|
||||
"Kan ikke få værtsnavn for din adresse",
|
||||
"Forkert håndtryk (handshake)",
|
||||
"Adgang nægtet bruger: '%-.32s@%-.64s' til databasen '%-.64s'",
|
||||
"Adgang nægtet bruger: '%-.32s@%-.64s' (Bruger password: %s)",
|
||||
"Adgang nægtet bruger: '%-.32s@%-.64s' (Bruger adgangskode: %s)",
|
||||
"Ingen database valgt",
|
||||
"Ukendt kommando",
|
||||
"Kolonne '%-.64s' kan ikke være nul",
|
||||
"Kolonne '%-.64s' kan ikke være NULL",
|
||||
"Ukendt database '%-.64s'",
|
||||
"Tabellen '%-.64s' eksisterer allerede",
|
||||
"Tabellen '%-.64s' findes allerede",
|
||||
"Ukendt tabel '%-.64s'",
|
||||
"Felt: '%-.64s' i tabel %s er ikke entydigt",
|
||||
"Database nedkobling er i gang",
|
||||
"Database nedlukning er i gang",
|
||||
"Ukendt kolonne '%-.64s' i tabel %s",
|
||||
"Grugte '%-.64s' som ikke var i group by",
|
||||
"Brugte '%-.64s' som ikke var i group by",
|
||||
"Kan ikke gruppere på '%-.64s'",
|
||||
"Udtrykket har summer (sum) funktioner og kolonner i samme udtryk",
|
||||
"Kolonne tæller stemmer ikke med værditæller",
|
||||
"Identifikationen '%-.64s' er for lang",
|
||||
"Feltnavnet '%-.64s' eksisterer allerede",
|
||||
"Indeksnavnet '%-.64s' eksisterer allerede",
|
||||
"Kolonne tæller stemmer ikke med antallet af værdier",
|
||||
"Navnet '%-.64s' er for langt",
|
||||
"Feltnavnet '%-.64s' findes allerede",
|
||||
"Indeksnavnet '%-.64s' findes allerede",
|
||||
"Ens værdier '%-.64s' for indeks %d",
|
||||
"Forkert kolonnespecifikaton for felt '%-.64s'",
|
||||
"%s nær '%-.64s' på linje %d",
|
||||
"Forespørgsel var tom",
|
||||
"Ikke unikt tabel/alias: '%-.64s'",
|
||||
"Tabellen/aliaset: '%-.64s' er ikke unikt",
|
||||
"Ugyldig standardværdi for '%-.64s'",
|
||||
"Flere primærindekser specificeret",
|
||||
"For mange indekser specificeret. Maks %d indekser tillatt",
|
||||
"For mange indeksdele specificeret. Maks %d dele tillatt",
|
||||
"Specificeret indeks var for langt. Maks indekslængde er %d",
|
||||
"Indeks felt '%-.64s' eksiterer ikke i tabellen",
|
||||
"Blob felt '%-.64s' kan ikke bruges ved specifikation af indeks",
|
||||
"Flere primærnøgler specificeret",
|
||||
"For mange nøgler specificeret. Kun %d nøgler må bruges",
|
||||
"For mange nøgledele specificeret. Kun %d dele må bruges",
|
||||
"Specificeret nøgle var for lang. Maksimal nøglelængde er %d",
|
||||
"Nøglefeltet '%-.64s' eksisterer ikke i tabellen",
|
||||
"BLOB feltet '%-.64s' kan ikke bruges ved specifikation af indeks",
|
||||
"For stor feltlængde for kolonne '%-.64s' (maks = %d). Brug BLOB i stedet",
|
||||
"Der kan kun bruges eet AUTO-felt og det skal være indekseret",
|
||||
"%s: klar for tilslutninger\n",
|
||||
"Der kan kun specificeres eet AUTO_INCREMENT-felt, og det skal være indekseret",
|
||||
"%s: klar til tilslutninger\n",
|
||||
"%s: Normal nedlukning\n",
|
||||
"%s: Opdaget signal %d. Afslutter!!\n",
|
||||
"%s: Fangede signal %d. Afslutter!!\n",
|
||||
"%s: Server lukket\n",
|
||||
"%s: Forceret nedlukning af tråd: %ld bruger: '%-.64s'\n",
|
||||
"Kan ikke oprette IP socket",
|
||||
"Tabellen '%-.64s' har intet indeks som det der er brugt i CREATE INDEX. Genopret tabellen",
|
||||
"Tabellen '%-.64s' har ikke den nøgle, som blev brugt i CREATE INDEX. Genopret tabellen",
|
||||
"Felt adskiller er ikke som forventet, se dokumentationen",
|
||||
"Man kan ikke bruge faste feltlængder med BLOB. Brug i stedet 'fields terminated by'.",
|
||||
"Filen '%-.64s' skal være i database-biblioteket for at kunne læses af alle",
|
||||
"Filen '%-.64s' skal være i database-folderen og kunne læses af alle",
|
||||
"Filen '%-.64s' eksisterer allerede",
|
||||
"Poster: %ld Fjernet: %ld Sprunget over: %ld Advarsler: %ld",
|
||||
"Poster: %ld Ens: %ld",
|
||||
"Forkert indeksdel. Den anvendte indeksdel er ikke en streng eller den længden er større end indekslængden",
|
||||
"Forkert indeksdel. Den anvendte nøgledel er ikke en streng eller længden er større end nøglelængden",
|
||||
"Man kan ikke slette alle felter med ALTER TABLE. Brug DROP TABLE i stedet.",
|
||||
"Kan ikke DROP '%-.64s'. Undersøg om felt/indeks eksisterer.",
|
||||
"Kan ikke udføre DROP '%-.64s'. Undersøg om feltet/nøglen eksisterer.",
|
||||
"Poster: %ld Ens: %ld Advarsler: %ld",
|
||||
"INSERT TABLE '%-.64s' er ikke tilladt i FROM tabel liste",
|
||||
"Ukendt tråd id: %lu",
|
||||
"Du er ikke ejer av tråden %lu",
|
||||
"Du er ikke ejer af tråden %lu",
|
||||
"Ingen tabeller i brug",
|
||||
"For mange tekststrenge kolonne %s og SET",
|
||||
"Kan ikke lave unikt loggfilnavn %s.(1-999)\n",
|
||||
"For mange tekststrenge til specifikationen af SET i kolonne %-.64s",
|
||||
"Kan ikke lave unikt log-filnavn %s.(1-999)\n",
|
||||
"Tabellen '%-.64s' var låst med READ lås og kan ikke opdateres",
|
||||
"Tabellen '%-.64s' var ikke låst med LOCK TABLES",
|
||||
"Blob feltet '%-.64s' kan ikke have en standard værdi",
|
||||
"BLOB feltet '%-.64s' kan ikke have en standard værdi",
|
||||
"Ugyldigt database navn '%-.64s'",
|
||||
"Ugyldigt tabel navn '%-.64s'",
|
||||
"SELECT ville undersøge for mange poster og ville sannsynligvis tage meget lang tid. Undersøg WHERE delen og brug SET OPTION SQL_BIG_SELECTS=1 hvis SELECTen er korrekt"
|
||||
"SELECT ville undersøge for mange poster og ville sandsynligvis tage meget lang tid. Undersøg WHERE delen og brug SET OPTION SQL_BIG_SELECTS=1 hvis udtrykket er korrekt"
|
||||
"Ukendt fejl",
|
||||
"Ukendt procedure %s",
|
||||
"Forkert antal parametre til proceduren %s",
|
||||
"Forkert(e) parametre til proceduren %s",
|
||||
"Ukendt tabel '%-.64s' i %s",
|
||||
"Feltet '%-.64s' er anvendt to ganger",
|
||||
"Forkert brug af gruppe-funktion",
|
||||
"Tabellen '%-.64s' bruger et efternavn som ikke findes i denne MySQL version",
|
||||
"Feltet '%-.64s' er anvendt to gange",
|
||||
"Forkert brug af grupperings-funktion",
|
||||
"Tabellen '%-.64s' bruger et filtypenavn som ikke findes i denne MySQL version",
|
||||
"En tabel skal have mindst een kolonne",
|
||||
"Tabellen '%-.64s' er fuld",
|
||||
"Ukendt karaktersæt: '%-.64s'",
|
||||
"Ukendt tegnsæt: '%-.64s'",
|
||||
"For mange tabeller. MySQL kan kun bruge %d tabeller i et join",
|
||||
"For mange felter",
|
||||
"For store poster. Max post størrelse, unde BOLB's, er %d. Du må lave nogle felter til BLOB's",
|
||||
"For store poster. Max post størrelse, uden BLOB's, er %d. Du må lave nogle felter til BLOB's",
|
||||
"Thread stack brugt: Brugt: %ld af en %ld stak. Brug 'mysqld -O thread_stack=#' for at allokere en større stak om nødvendigt",
|
||||
"Krydsreferencer fundet i OUTER JOIN. Check dine ON conditions",
|
||||
"Kolonne '%-.32s' bruges som UNIQUE eller INDEX men er ikke defineret som NOT NULL",
|
||||
"Kan ikke læse funktionen '%-.64s'",
|
||||
"Kan ikke starte funktionen '%-.64s'; %-.80s",
|
||||
"Ingen sti tilladte for delt bibliotek",
|
||||
"Angivelse af sti ikke tilladt for delt bibliotek",
|
||||
"Funktionen '%-.64s' findes allerede",
|
||||
"Kan ikke åbne delt bibliotek '%-.64s' (errno: %d %s)",
|
||||
"Kan ikke finde funktionen '%-.64s' in bibliotek'",
|
||||
"Kan ikke finde funktionen '%-.64s' i bibliotek'",
|
||||
"Funktionen '%-.64s' er ikke defineret",
|
||||
"Værten er blokeret på grund af mange fejlforespørgsler. Lås op med 'mysqladmin flush-hosts'",
|
||||
"Værten '%-.64s' kan ikke tilkoble denne MySQL-server",
|
||||
@ -139,7 +139,7 @@
|
||||
"Du skal have tilladelse til at opdatere tabeller i MySQL databasen for at ændre andres adgangskoder",
|
||||
"Kan ikke finde nogen tilsvarende poster i bruger tabellen",
|
||||
"Poster fundet: %ld Ændret: %ld Advarsler: %ld",
|
||||
"Kan ikke danne en ny tråd (thread) (errno %d). Hvis computeren ikke er løbet tør for hukommelse, kan du se i brugervejledningen for en mulig operativ-system - afhængig fejl",
|
||||
"Kan ikke danne en ny tråd (fejl nr. %d). Hvis computeren ikke er løbet tør for hukommelse, kan du se i brugervejledningen for en mulig operativ-system - afhængig fejl",
|
||||
"Kolonne antallet stemmer ikke overens med antallet af værdier i post %ld",
|
||||
"Kan ikke genåbne tabel '%-.64s',
|
||||
"Forkert brug af nulværdi (NULL)",
|
||||
@ -171,47 +171,48 @@
|
||||
"Denne tabeltype understøtter ikke brug af AUTO_INCREMENT kolonner",
|
||||
"INSERT DELAYED kan ikke bruges med tabellen '%-.64s', fordi tabellen er låst med LOCK TABLES",
|
||||
"Forkert kolonnenavn '%-.100s'",
|
||||
"Den brugte tabel styrer kan ikke indeksere kolonnen '%-.64s'",
|
||||
"Den brugte tabeltype kan ikke indeksere kolonnen '%-.64s'",
|
||||
"Tabellerne i MERGE er ikke defineret ens",
|
||||
"Kan ikke skrive til tabellen '%-.64s' fordi det vil bryde CONSTRAINT regler",
|
||||
"BLOB column '%-.64s' used in key specification without a key length",
|
||||
"All parts of a PRIMARY KEY must be NOT NULL; If you need NULL in a key, use UNIQUE instead",
|
||||
"Result consisted of more than one row",
|
||||
"This table type requires a primary key",
|
||||
"This version of MySQL is not compiled with RAID support",
|
||||
"You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column",
|
||||
"Key '%-.64s' doesn't exist in table '%-.64s'",
|
||||
"Can't open table",
|
||||
"The handler for the table doesn't support check/repair",
|
||||
"You are not allowed to execute this command in a transaction",
|
||||
"Got error %d during COMMIT",
|
||||
"Got error %d during ROLLBACK",
|
||||
"Got error %d during FLUSH_LOGS",
|
||||
"Got error %d during CHECKPOINT",
|
||||
"Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: `%-.64s' (%-.64s)",
|
||||
"The handler for the table does not support binary table dump",
|
||||
"Binlog closed while trying to FLUSH MASTER",
|
||||
"Failed rebuilding the index of dumped table '%-.64s'",
|
||||
"Error from master: '%-.64s'",
|
||||
"Net error reading from master",
|
||||
"Net error writing to master",
|
||||
"Can't find FULLTEXT index matching the column list",
|
||||
"Can't execute the given command because you have active locked tables or an active transaction",
|
||||
"Unknown system variable '%-.64'",
|
||||
"Table '%-.64s' is marked as crashed and should be repaired",
|
||||
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
|
||||
"Warning: Some non-transactional changed tables couldn't be rolled back",
|
||||
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
|
||||
"This operation cannot be performed with a running slave, run SLAVE STOP first",
|
||||
"This operation requires a running slave, configure slave and do SLAVE START",
|
||||
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
|
||||
"Could not initialize master info structure, check permisions on master.info",
|
||||
"Could not create slave thread, check system resources",
|
||||
"User %-.64s has already more than 'max_user_connections' active connections",
|
||||
"You may only use constant expressions with SET",
|
||||
"Lock wait timeout exceeded",
|
||||
"The total number of locks exceeds the lock table size",
|
||||
"Update locks cannot be acquired during a READ UNCOMMITTED transaction",
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"BLOB kolonnen '%-.64s' brugt i nøglespecifikation uden nøglelængde",
|
||||
"Alle dele af en PRIMARY KEY skal være NOT NULL; Hvis du skal bruge NULL i nøglen, brug UNIQUE istedet",
|
||||
"Resultatet bestod af mere end een række",
|
||||
"Denne tabeltype kræver en primærnøgle",
|
||||
"Denne udgave af MySQL er ikke oversat med understøttelse af RAID",
|
||||
"Du bruger sikker opdaterings modus ('safe update mode') og du forsøgte at opdatere en tabel uden en WHERE klausul, der gør brug af et KEY felt",
|
||||
"Nøglen '%-.64s' eksisterer ikke i tabellen '%-.64s'",
|
||||
"Kan ikke åbne tabellen",
|
||||
"Denne tabeltype understøtter ikke CHECK/REPAIR",
|
||||
"Du må ikke bruge denne kommando i en transaktion",
|
||||
"Modtog fejl %d mens kommandoen COMMIT blev udført",
|
||||
"Modtog fejl %d mens kommandoen ROLLBACK blev udført",
|
||||
"Modtog fejl %d mens kommandoen FLUSH_LOGS blev udført",
|
||||
"Modtog fejl %d mens kommandoen CHECKPOINT blev udført",
|
||||
"Afbrød forbindelsen %ld til databasen '%-.64s' bruger: '%-.32s' vært: `%-.64s' (%-.64s)",
|
||||
"Denne tabeltype unserstøtter ikke binært tabeldump",
|
||||
"Binlog blev lukket mens kommandoen FLUSH MASTER blev udført",
|
||||
"Kunne ikke genopbygge indekset for den dumpede tabel '%-.64s'",
|
||||
"Fejl fra master: '%-.64s'",
|
||||
"Netværksfejl ved læsning fra master",
|
||||
"Netværksfejl ved skrivning til master",
|
||||
"Kan ikke finde en FULLTEXT nøgle som svarer til kolonne listen",
|
||||
"Kan ikke udføre den givne kommando fordi der findes aktive, låste tabeller eller fordi der udføres en transaktion",
|
||||
"Ukendt systemvariabel '%-.64'",
|
||||
"Tabellen '%-.64s' er markeret med fejl og bør repareres",
|
||||
"Tabellen '%-.64s' er markeret med fejl og sidste (automatiske?) REPAIR fejlede",
|
||||
"Advarsel: Visse data i tabeller der ikke understøtter transaktioner kunne ikke tilbagestilles",
|
||||
"Fler-udtryks transaktion krævede mere plads en 'max_binlog_cache_size' bytes. Forhøj værdien af denne variabel og prøv igen',
|
||||
"Denne handling kunne ikke udføres med kørende slave, brug først kommandoen SLAVE STOP",
|
||||
"Denne handling kræver en kørende slave. Konfigurer en slave og brug kommandoen SLAVE START",
|
||||
"Denne server er ikke konfigureret som slave. Ret in config-filen eller brug kommandoen CHANGE MASTER TO",
|
||||
"Kunne ikke initialisere master info-struktur. Check om rettigheder i master.info",
|
||||
"Kunne ikke danne en slave-tråd. Check systemressourcerne",
|
||||
"Brugeren %-.64s har allerede mere end 'max_user_connections' aktive forbindelser",
|
||||
"Du må kun bruge konstantudtryk med SET",
|
||||
"Lock wait timeout overskredet",
|
||||
"Det totale antal låse overstiger størrelsen på låse-tabellen",
|
||||
"Update lås kan ikke opnås under en READ UNCOMMITTED transaktion",
|
||||
"DROP DATABASE er ikke tilladt mens en tråd holder på globalt read lock",
|
||||
"CREATE DATABASE er ikke tilladt mens en tråd holder på globalt read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -212,3 +212,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -212,3 +212,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -216,3 +216,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -212,3 +212,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -215,3 +215,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -212,3 +212,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -214,3 +214,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -212,3 +212,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -214,3 +214,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -212,3 +212,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -214,3 +214,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -214,3 +214,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -216,3 +216,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -212,3 +212,4 @@
|
||||
"DROP DATABASE não permitido enquanto uma 'thread' está assegurando um travamento global de leitura",
|
||||
"CREATE DATABASE não permitido enquanto uma 'thread' está assegurando um travamento global de leitura",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -216,3 +216,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -215,3 +215,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -220,3 +220,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -213,3 +213,4 @@
|
||||
"DROP DATABASE no permitido mientras un thread está ejerciendo un bloqueo de lectura global",
|
||||
"CREATE DATABASE no permitido mientras un thread está ejerciendo un bloqueo de lectura global",
|
||||
"Wrong arguments to %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
@ -212,3 +212,4 @@
|
||||
"DROP DATABASE not allowed while thread is holding global read lock",
|
||||
"CREATE DATABASE not allowed while thread is holding global read lock",
|
||||
"Felaktiga argument till %s",
|
||||
"%-.32s@%-.64s is not allowed to create new users",
|
||||
|
103
sql/sql_acl.cc
103
sql/sql_acl.cc
@ -943,16 +943,41 @@ end:
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
|
||||
/* Return 1 if we are allowed to create new users */
|
||||
|
||||
static bool test_if_create_new_users(THD *thd)
|
||||
{
|
||||
bool create_new_users=1; // Assume that we are allowed to create new users
|
||||
if (opt_safe_user_create && !(thd->master_access & INSERT_ACL))
|
||||
{
|
||||
TABLE_LIST tl;
|
||||
uint db_access;
|
||||
bzero((char*) &tl,sizeof(tl));
|
||||
tl.db= (char*) "mysql";
|
||||
tl.real_name= (char*) "user";
|
||||
db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr,
|
||||
thd->priv_user, tl.db);
|
||||
if (!(db_access & INSERT_ACL))
|
||||
{
|
||||
if (check_grant(thd,INSERT_ACL,&tl,0,1))
|
||||
create_new_users=0;
|
||||
}
|
||||
}
|
||||
return create_new_users;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
** Handle GRANT commands
|
||||
****************************************************************************/
|
||||
|
||||
static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
||||
uint rights, char what)
|
||||
uint rights, char what, bool create_user)
|
||||
{
|
||||
int error = -1;
|
||||
uint i,j;
|
||||
bool ima=0;
|
||||
bool old_row_exists=0;
|
||||
char *password,empty_string[1];
|
||||
DBUG_ENTER("replace_user_table");
|
||||
|
||||
@ -971,14 +996,21 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
||||
(byte*) table->field[0]->ptr,0,
|
||||
HA_READ_KEY_EXACT))
|
||||
{
|
||||
if (what == 'N')
|
||||
if (!create_user)
|
||||
{
|
||||
my_printf_error(ER_NONEXISTING_GRANT,ER(ER_NONEXISTING_GRANT),
|
||||
MYF(0),combo.user.str,combo.host.str);
|
||||
THD *thd=current_thd;
|
||||
if (what == 'N')
|
||||
my_printf_error(ER_NONEXISTING_GRANT,ER(ER_NONEXISTING_GRANT),
|
||||
MYF(0),combo.user.str,combo.host.str);
|
||||
else
|
||||
my_printf_error(ER_NO_PERMISSON_TO_CREATE_USER,
|
||||
ER(ER_NO_PERMISSON_TO_CREATE_USER),
|
||||
MYF(0),thd->user,
|
||||
thd->host ? thd->host : thd->ip ? thd->ip: "");
|
||||
error= -1;
|
||||
goto end;
|
||||
}
|
||||
ima = 0; // no row; ima on Serbian means 'there is something'
|
||||
old_row_exists = 0;
|
||||
restore_record(table,2); // cp empty row from record[2]
|
||||
table->field[0]->store(combo.host.str,combo.host.length);
|
||||
table->field[1]->store(combo.user.str,combo.user.length);
|
||||
@ -986,7 +1018,7 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
||||
}
|
||||
else
|
||||
{
|
||||
ima = 1;
|
||||
old_row_exists = 1;
|
||||
store_record(table,1); // Save copy for update
|
||||
if (combo.password.str) // If password given
|
||||
table->field[2]->store(password,(uint) strlen(password));
|
||||
@ -1001,7 +1033,7 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
||||
}
|
||||
rights=get_access(table,3);
|
||||
|
||||
if (ima) // there is a row, therefore go to update, instead of insert
|
||||
if (old_row_exists)
|
||||
{
|
||||
/*
|
||||
We should NEVER delete from the user table, as a uses can still
|
||||
@ -1033,7 +1065,7 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
||||
acl_cache->clear(1); // Clear privilege cache
|
||||
if (!combo.password.str)
|
||||
password=0; // No password given on command
|
||||
if (ima)
|
||||
if (old_row_exists)
|
||||
acl_update_user(combo.user.str,combo.host.str,password,rights);
|
||||
else
|
||||
acl_insert_user(combo.user.str,combo.host.str,password,rights);
|
||||
@ -1052,7 +1084,7 @@ static int replace_db_table(TABLE *table, const char *db,
|
||||
uint rights, char what)
|
||||
{
|
||||
uint i,j,store_rights;
|
||||
bool ima=0;
|
||||
bool old_row_exists=0;
|
||||
int error;
|
||||
DBUG_ENTER("replace_db_table");
|
||||
|
||||
@ -1076,7 +1108,7 @@ static int replace_db_table(TABLE *table, const char *db,
|
||||
combo.user.str,combo.host.str);
|
||||
goto abort;
|
||||
}
|
||||
ima = 0; // no row
|
||||
old_row_exists = 0;
|
||||
restore_record(table,2); // cp empty row from record[2]
|
||||
table->field[0]->store(combo.host.str,combo.host.length);
|
||||
table->field[1]->store(db,(uint) strlen(db));
|
||||
@ -1084,7 +1116,7 @@ static int replace_db_table(TABLE *table, const char *db,
|
||||
}
|
||||
else
|
||||
{
|
||||
ima = 1;
|
||||
old_row_exists = 1;
|
||||
store_record(table,1);
|
||||
}
|
||||
|
||||
@ -1097,8 +1129,9 @@ static int replace_db_table(TABLE *table, const char *db,
|
||||
rights=get_access(table,3);
|
||||
rights=fix_rights_for_db(rights);
|
||||
|
||||
if (ima) // there is a row, therefore go update, else insert
|
||||
if (old_row_exists)
|
||||
{
|
||||
// update old existing row
|
||||
if (rights)
|
||||
{
|
||||
if ((error=table->file->update_row(table->record[1],table->record[0])))
|
||||
@ -1117,7 +1150,7 @@ static int replace_db_table(TABLE *table, const char *db,
|
||||
}
|
||||
|
||||
acl_cache->clear(1); // Clear privilege cache
|
||||
if (ima)
|
||||
if (old_row_exists)
|
||||
acl_update_db(combo.user.str,combo.host.str,db,rights);
|
||||
else
|
||||
acl_insert_db(combo.user.str,combo.host.str,db,rights);
|
||||
@ -1324,7 +1357,7 @@ static int replace_column_table(GRANT_TABLE *g_t,
|
||||
while ((xx=iter++))
|
||||
{
|
||||
uint privileges = xx->rights;
|
||||
bool ima=0;
|
||||
bool old_row_exists=0;
|
||||
key_restore(table,key,0,key_length);
|
||||
table->field[4]->store(xx->column.ptr(),xx->column.length());
|
||||
|
||||
@ -1339,7 +1372,7 @@ static int replace_column_table(GRANT_TABLE *g_t,
|
||||
result= -1; /* purecov: inspected */
|
||||
continue; /* purecov: inspected */
|
||||
}
|
||||
ima = 0;
|
||||
old_row_exists = 0;
|
||||
restore_record(table,2); // Get empty record
|
||||
key_restore(table,key,0,key_length);
|
||||
table->field[4]->store(xx->column.ptr(),xx->column.length());
|
||||
@ -1353,13 +1386,13 @@ static int replace_column_table(GRANT_TABLE *g_t,
|
||||
privileges = tmp & ~(privileges | rights);
|
||||
else
|
||||
privileges |= tmp;
|
||||
ima = 1;
|
||||
old_row_exists = 1;
|
||||
store_record(table,1); // copy original row
|
||||
}
|
||||
|
||||
table->field[6]->store((longlong) get_rights_for_column(privileges));
|
||||
|
||||
if (ima) // there is a row, therefore go update, else insert
|
||||
if (old_row_exists)
|
||||
{
|
||||
if (privileges)
|
||||
error=table->file->update_row(table->record[1],table->record[0]);
|
||||
@ -1465,7 +1498,7 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
|
||||
uint rights, uint kolone, bool revoke_grant)
|
||||
{
|
||||
char grantor[HOSTNAME_LENGTH+1+USERNAME_LENGTH];
|
||||
int ima = 1;
|
||||
int old_row_exists = 1;
|
||||
int error=0;
|
||||
uint store_table_rights,store_col_rights;
|
||||
DBUG_ENTER("replace_table_table");
|
||||
@ -1505,13 +1538,13 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
|
||||
table_name); /* purecov: deadcode */
|
||||
DBUG_RETURN(-1); /* purecov: deadcode */
|
||||
}
|
||||
ima = 0; // no row
|
||||
old_row_exists = 0;
|
||||
restore_record(table,1); // Get saved record
|
||||
}
|
||||
|
||||
store_table_rights=get_rights_for_table(rights);
|
||||
store_col_rights=get_rights_for_column(kolone);
|
||||
if (ima)
|
||||
if (old_row_exists)
|
||||
{
|
||||
uint j,k;
|
||||
store_record(table,1);
|
||||
@ -1536,7 +1569,7 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
|
||||
rights=fix_rights_for_table(store_table_rights);
|
||||
kolone=fix_rights_for_column(store_col_rights);
|
||||
|
||||
if (ima) // there is a row, therefore go update, else insert
|
||||
if (old_row_exists)
|
||||
{
|
||||
if (store_table_rights || store_col_rights)
|
||||
{
|
||||
@ -1668,10 +1701,12 @@ int mysql_table_grant (THD *thd, TABLE_LIST *table_list,
|
||||
continue;
|
||||
}
|
||||
/* Create user if needed */
|
||||
if ((replace_user_table(tables[0].table,
|
||||
if (replace_user_table(tables[0].table,
|
||||
*Str,
|
||||
0,
|
||||
revoke_grant ? 'N' : 'Y')))
|
||||
revoke_grant ? 'N' : 'Y',
|
||||
(revoke_grant ? 0 :
|
||||
test_if_create_new_users(thd))))
|
||||
{
|
||||
result= -1; // Remember error
|
||||
continue; // Add next user
|
||||
@ -1773,6 +1808,7 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights,
|
||||
List_iterator <LEX_USER> str_list (list);
|
||||
LEX_USER *Str;
|
||||
char what;
|
||||
bool create_new_users=0;
|
||||
TABLE_LIST tables[2];
|
||||
DBUG_ENTER("mysql_grant");
|
||||
|
||||
@ -1799,8 +1835,10 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights,
|
||||
DBUG_RETURN(-1); /* purecov: deadcode */
|
||||
}
|
||||
|
||||
// go through users in user_list
|
||||
if (!revoke_grant)
|
||||
create_new_users= test_if_create_new_users(thd);
|
||||
|
||||
// go through users in user_list
|
||||
pthread_mutex_lock(&LOCK_grant);
|
||||
VOID(pthread_mutex_lock(&acl_cache->lock));
|
||||
grant_version++;
|
||||
@ -1822,11 +1860,14 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights,
|
||||
}
|
||||
if ((replace_user_table(tables[0].table,
|
||||
*Str,
|
||||
(!db ? rights : 0), what)))
|
||||
result= -1;
|
||||
if (db && replace_db_table(tables[1].table, db, *Str, rights & DB_ACLS,
|
||||
what))
|
||||
(!db ? rights : 0), what, create_new_users)))
|
||||
result= -1;
|
||||
else
|
||||
{
|
||||
if (db && replace_db_table(tables[1].table, db, *Str, rights & DB_ACLS,
|
||||
what))
|
||||
result= -1;
|
||||
}
|
||||
}
|
||||
VOID(pthread_mutex_unlock(&acl_cache->lock));
|
||||
pthread_mutex_unlock(&LOCK_grant);
|
||||
@ -1978,7 +2019,7 @@ void grant_reload(void)
|
||||
****************************************************************************/
|
||||
|
||||
bool check_grant(THD *thd, uint want_access, TABLE_LIST *tables,
|
||||
uint show_table)
|
||||
uint show_table, bool no_errors)
|
||||
{
|
||||
TABLE_LIST *table;
|
||||
char *user = thd->priv_user;
|
||||
@ -2026,7 +2067,7 @@ bool check_grant(THD *thd, uint want_access, TABLE_LIST *tables,
|
||||
|
||||
err:
|
||||
pthread_mutex_unlock(&LOCK_grant);
|
||||
if (show_table != 1) // Not a silent skip of table
|
||||
if (!no_errors) // Not a silent skip of table
|
||||
{
|
||||
const char *command="";
|
||||
if (want_access & SELECT_ACL)
|
||||
|
@ -74,7 +74,7 @@ int grant_init(void);
|
||||
void grant_free(void);
|
||||
void grant_reload(void);
|
||||
bool check_grant(THD *thd, uint want_access, TABLE_LIST *tables,
|
||||
uint show_command=0);
|
||||
uint show_command=0, bool dont_print_error=0);
|
||||
bool check_grant_column (THD *thd,TABLE *table, const char *name,uint length,
|
||||
uint show_command=0);
|
||||
bool check_grant_all_columns(THD *thd, uint want_access, TABLE *table);
|
||||
|
@ -133,7 +133,7 @@ int list_open_tables(THD *thd,List<char> *tables, const char *db,
|
||||
table_list.db= (char*) db;
|
||||
table_list.real_name= entry->real_name;/*real name*/
|
||||
table_list.grant.privilege=col_access;
|
||||
if (check_grant(thd,TABLE_ACLS,&table_list,1))
|
||||
if (check_grant(thd,TABLE_ACLS,&table_list,1,1))
|
||||
continue;
|
||||
}
|
||||
/* need to check if he have't already listed it */
|
||||
|
@ -36,7 +36,6 @@ extern "C" int gethostname(char *name, int namelen);
|
||||
static int check_for_max_user_connections(const char *user, int u_length,
|
||||
const char *host);
|
||||
static void decrease_user_connections(const char *user, const char *host);
|
||||
static bool check_table_access(THD *thd,uint want_access, TABLE_LIST *tables);
|
||||
static bool check_db_used(THD *thd,TABLE_LIST *tables);
|
||||
static bool check_merge_table_access(THD *thd, char *db, TABLE_LIST *tables);
|
||||
static bool check_dup(THD *thd,const char *db,const char *name,
|
||||
@ -1956,7 +1955,7 @@ mysql_execute_command(void)
|
||||
else
|
||||
res = mysql_grant(thd, lex->db, lex->users_list, lex->grant,
|
||||
lex->sql_command == SQLCOM_REVOKE);
|
||||
if(!res)
|
||||
if (!res)
|
||||
{
|
||||
mysql_update_log.write(thd, thd->query,thd->query_length);
|
||||
if (mysql_bin_log.is_open())
|
||||
@ -2116,7 +2115,7 @@ bool check_process_priv(THD *thd)
|
||||
** in the table list for GRANT checking
|
||||
*/
|
||||
|
||||
static bool
|
||||
bool
|
||||
check_table_access(THD *thd,uint want_access,TABLE_LIST *tables)
|
||||
{
|
||||
uint found=0,found_access=0;
|
||||
|
@ -220,7 +220,7 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path,
|
||||
table_list.db= (char*) db;
|
||||
table_list.real_name=file->name;
|
||||
table_list.grant.privilege=col_access;
|
||||
if (check_grant(thd,TABLE_ACLS,&table_list,1))
|
||||
if (check_grant(thd,TABLE_ACLS,&table_list,1,1))
|
||||
continue;
|
||||
}
|
||||
if (files->push_back(thd->strdup(file->name)))
|
||||
|
@ -59,9 +59,9 @@ int mysql_rm_table(THD *thd,TABLE_LIST *tables, my_bool if_exists)
|
||||
VOID(pthread_mutex_lock(&LOCK_open));
|
||||
pthread_mutex_unlock(&thd->mysys_var->mutex);
|
||||
|
||||
if(global_read_lock)
|
||||
if (global_read_lock)
|
||||
{
|
||||
if(thd->global_read_lock)
|
||||
if (thd->global_read_lock)
|
||||
{
|
||||
my_error(ER_TABLE_NOT_LOCKED_FOR_WRITE,MYF(0),
|
||||
tables->real_name);
|
||||
@ -1126,7 +1126,12 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
||||
strmov(new_name_buff,new_name);
|
||||
fn_same(new_name_buff,table_name,3);
|
||||
#ifdef FN_LOWER_CASE
|
||||
if (!my_strcasecmp(new_name_buff,table_name))// Check if name changed
|
||||
if (lower_case_table_names)
|
||||
casedn_str(new_name);
|
||||
if ((lower_case_table_names &&
|
||||
!my_strcasecmp(new_name_buff,table_name)) ||
|
||||
(!lower_case_table_names &&
|
||||
!strcmp(new_name_buff,table_name)))
|
||||
#else
|
||||
if (!strcmp(new_name_buff,table_name)) // Check if name changed
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user