mirror of
https://github.com/MariaDB/server.git
synced 2026-04-17 13:55:32 +02:00
Merge 10.6 into 10.11
This commit is contained in:
commit
8fab129382
36 changed files with 594 additions and 512 deletions
|
|
@ -79,6 +79,7 @@ extern int (*dbug_sanity)(void);
|
|||
|
||||
#define DBUG_PRINT(keyword,arglist) \
|
||||
do if (_db_pargs_(__LINE__,keyword)) _db_doprnt_ arglist; while(0)
|
||||
#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2)
|
||||
|
||||
#ifdef HAVE_ATTRIBUTE_CLEANUP
|
||||
#define DBUG_ENTER(a) struct _db_stack_frame_ _db_stack_frame_ __attribute__((cleanup(_db_return_))); \
|
||||
|
|
@ -98,6 +99,7 @@ extern int (*dbug_sanity)(void);
|
|||
#define DBUG_RETURN(a1) return(a1)
|
||||
#define DBUG_VOID_RETURN return
|
||||
#define DBUG_PRINT(keyword,arglist) do{} while(0)
|
||||
#define DBUG_DUMP(keyword,a1,a2) do{} while(0)
|
||||
#endif
|
||||
|
||||
#define DBUG_EXECUTE(keyword,a1) \
|
||||
|
|
@ -115,7 +117,6 @@ extern int (*dbug_sanity)(void);
|
|||
#define DBUG_SET_INITIAL(a1) _db_set_init_ (a1)
|
||||
#define DBUG_PROCESS(a1) _db_process_(a1)
|
||||
#define DBUG_FILE _db_fp_()
|
||||
#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2)
|
||||
#define DBUG_END() _db_end_ ()
|
||||
#define DBUG_LOCK_FILE _db_lock_file_()
|
||||
#define DBUG_UNLOCK_FILE _db_unlock_file_()
|
||||
|
|
@ -234,7 +235,7 @@ void debug_sync_point(const char* lock_name, uint lock_timeout);
|
|||
one should #include <sstream>. We intentionally avoid including it here to save
|
||||
compilation time.
|
||||
*/
|
||||
# ifdef DBUG_OFF
|
||||
# if defined DBUG_OFF || !defined DBUG_TRACE
|
||||
# define DBUG_LOG(keyword, v) do {} while (0)
|
||||
# else
|
||||
# define DBUG_LOG(keyword, v) do { \
|
||||
|
|
|
|||
|
|
@ -121,3 +121,46 @@ connection default;
|
|||
DROP DATABASE meow;
|
||||
set local sql_mode=default;
|
||||
set global sql_mode=default;
|
||||
#
|
||||
# MDEV-37950: INSERT ... RETURNING exposes columns for which
|
||||
# the user lacks SELECT privilege
|
||||
#
|
||||
CREATE USER regular;
|
||||
GRANT INSERT ON *.* TO regular;
|
||||
GRANT DELETE ON *.* TO regular;
|
||||
CREATE DATABASE test1;
|
||||
DROP TABLE IF EXISTS test1.t_trigger_test1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test1.t_trigger_test1'
|
||||
CREATE TABLE test1.t_trigger_test1 (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(50),
|
||||
note VARCHAR(100)
|
||||
);
|
||||
CREATE TRIGGER test1.trg_before_insert
|
||||
BEFORE INSERT ON test1.t_trigger_test1
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.name = CONCAT('BEFORE_', NEW.name);
|
||||
END |
|
||||
INSERT INTO test1.t_trigger_test1 (name) VALUES ('Alice') RETURNING *;
|
||||
ERROR 42000: SELECT command denied to user 'regular'@'localhost' for column 'id' in table 't_trigger_test1'
|
||||
INSERT INTO test1.t_trigger_test1 (name) VALUES ('Alice') RETURNING id, name, note;
|
||||
ERROR 42000: SELECT command denied to user 'regular'@'localhost' for column 'id' in table 't_trigger_test1'
|
||||
# same for DELETE because delete with "WHERE" still requires to
|
||||
# read from the table, which basically means having select privileges
|
||||
DELETE FROM test1.t_trigger_test1 WHERE id=1;
|
||||
ERROR 42000: SELECT command denied to user 'regular'@'localhost' for column 'id' in table 't_trigger_test1'
|
||||
DELETE FROM test1.t_trigger_test1 WHERE id=1 RETURNING id;
|
||||
ERROR 42000: SELECT command denied to user 'regular'@'localhost' for column 'id' in table 't_trigger_test1'
|
||||
DELETE FROM test1.t_trigger_test1 WHERE id=1 RETURNING *;
|
||||
ERROR 42000: SELECT command denied to user 'regular'@'localhost' for column 'id' in table 't_trigger_test1'
|
||||
DELETE FROM test1.t_trigger_test1 RETURNING *;
|
||||
ERROR 42000: SELECT command denied to user 'regular'@'localhost' for column 'id' in table 't_trigger_test1'
|
||||
DELETE FROM test1.t_trigger_test1 RETURNING id;
|
||||
ERROR 42000: SELECT command denied to user 'regular'@'localhost' for column 'id' in table 't_trigger_test1'
|
||||
DELETE FROM test1.t_trigger_test1;
|
||||
DROP TRIGGER test1.trg_before_insert;
|
||||
DROP TABLE test1.t_trigger_test1;
|
||||
DROP USER regular;
|
||||
DROP DATABASE test1;
|
||||
|
|
|
|||
|
|
@ -158,3 +158,60 @@ DROP DATABASE meow;
|
|||
|
||||
set local sql_mode=default;
|
||||
set global sql_mode=default;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-37950: INSERT ... RETURNING exposes columns for which
|
||||
--echo # the user lacks SELECT privilege
|
||||
--echo #
|
||||
CREATE USER regular;
|
||||
GRANT INSERT ON *.* TO regular;
|
||||
GRANT DELETE ON *.* TO regular;
|
||||
|
||||
CREATE DATABASE test1;
|
||||
DROP TABLE IF EXISTS test1.t_trigger_test1;
|
||||
CREATE TABLE test1.t_trigger_test1 (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||
name VARCHAR(50),
|
||||
note VARCHAR(100)
|
||||
);
|
||||
DELIMITER |;
|
||||
CREATE TRIGGER test1.trg_before_insert
|
||||
BEFORE INSERT ON test1.t_trigger_test1
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
SET NEW.name = CONCAT('BEFORE_', NEW.name);
|
||||
END |
|
||||
DELIMITER ;|
|
||||
|
||||
change_user regular;
|
||||
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
INSERT INTO test1.t_trigger_test1 (name) VALUES ('Alice') RETURNING *;
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
INSERT INTO test1.t_trigger_test1 (name) VALUES ('Alice') RETURNING id, name, note;
|
||||
|
||||
--echo # same for DELETE because delete with "WHERE" still requires to
|
||||
--echo # read from the table, which basically means having select privileges
|
||||
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
DELETE FROM test1.t_trigger_test1 WHERE id=1;
|
||||
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
DELETE FROM test1.t_trigger_test1 WHERE id=1 RETURNING id;
|
||||
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
DELETE FROM test1.t_trigger_test1 WHERE id=1 RETURNING *;
|
||||
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
DELETE FROM test1.t_trigger_test1 RETURNING *;
|
||||
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
DELETE FROM test1.t_trigger_test1 RETURNING id;
|
||||
|
||||
DELETE FROM test1.t_trigger_test1;
|
||||
|
||||
change_user root;
|
||||
DROP TRIGGER test1.trg_before_insert;
|
||||
DROP TABLE test1.t_trigger_test1;
|
||||
DROP USER regular;
|
||||
DROP DATABASE test1;
|
||||
|
|
|
|||
|
|
@ -17283,8 +17283,7 @@ set f1 = f1;
|
|||
return f1;
|
||||
END//
|
||||
SELECT fn104('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0?\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0@\0\0\0\0\0\0@');
|
||||
fn104('\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0?\0\0\0\0\0\0?\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0@\0\0\0\0\0\0@')
|
||||
| ||||