499 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			499 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | DELETE FROM mysql.user WHERE User LIKE 'mysqltest_%'; | ||
|  | DELETE FROM mysql.db WHERE User LIKE 'mysqltest_%'; | ||
|  | DELETE FROM mysql.tables_priv WHERE User LIKE 'mysqltest_%'; | ||
|  | DELETE FROM mysql.columns_priv WHERE User LIKE 'mysqltest_%'; | ||
|  | FLUSH PRIVILEGES; | ||
|  | DROP DATABASE IF EXISTS mysqltest_db1; | ||
|  | CREATE DATABASE mysqltest_db1; | ||
|  | CREATE USER mysqltest_dfn@localhost; | ||
|  | CREATE USER mysqltest_inv@localhost; | ||
|  | GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost; | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | CREATE TABLE t1(num_value INT); | ||
|  | CREATE TABLE t2(user_str TEXT); | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | GRANT INSERT, DROP ON mysqltest_db1.t1 TO mysqltest_dfn@localhost; | ||
|  | GRANT INSERT, DROP ON mysqltest_db1.t2 TO mysqltest_dfn@localhost; | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | GRANT SUPER ON *.* TO mysqltest_dfn@localhost; | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | CREATE TRIGGER trg1 AFTER INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | INSERT INTO t2 VALUES(CURRENT_USER()); | ||
|  | ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 't1' | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost; | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | CREATE TRIGGER trg1 AFTER INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | INSERT INTO t2 VALUES(CURRENT_USER()); | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | REVOKE TRIGGER ON mysqltest_db1.t1 FROM mysqltest_dfn@localhost; | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | DROP TRIGGER trg1; | ||
|  | ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 't1' | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | INSERT INTO t1 VALUES(0); | ||
|  | ERROR 42000: TRIGGER command denied to user 'mysqltest_dfn'@'localhost' for table 't1' | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost; | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | INSERT INTO t1 VALUES(0); | ||
|  | DROP TRIGGER trg1; | ||
|  | TRUNCATE TABLE t1; | ||
|  | TRUNCATE TABLE t2; | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | REVOKE SUPER ON *.* FROM mysqltest_dfn@localhost; | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | CREATE TRIGGER trg1 AFTER INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | INSERT INTO t2 VALUES(CURRENT_USER()); | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | GRANT ALL PRIVILEGES ON mysqltest_db1.t1 TO mysqltest_dfn@localhost; | ||
|  | GRANT ALL PRIVILEGES ON mysqltest_db1.t2 TO mysqltest_dfn@localhost; | ||
|  | GRANT ALL PRIVILEGES ON mysqltest_db1.t1 | ||
|  | TO 'mysqltest_inv'@localhost; | ||
|  | GRANT SELECT ON mysqltest_db1.t2 | ||
|  | TO 'mysqltest_inv'@localhost; | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | use mysqltest_db1; | ||
|  | INSERT INTO t1 VALUES(1); | ||
|  | SELECT * FROM t1; | ||
|  | num_value | ||
|  | 1 | ||
|  | SELECT * FROM t2; | ||
|  | user_str | ||
|  | mysqltest_dfn@localhost | ||
|  | 
 | ||
|  | ---> connection: wl2818_invoker_con | ||
|  | use mysqltest_db1; | ||
|  | INSERT INTO t1 VALUES(2); | ||
|  | SELECT * FROM t1; | ||
|  | num_value | ||
|  | 1 | ||
|  | 2 | ||
|  | SELECT * FROM t2; | ||
|  | user_str | ||
|  | mysqltest_dfn@localhost | ||
|  | mysqltest_dfn@localhost | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | use mysqltest_db1; | ||
|  | REVOKE INSERT ON mysqltest_db1.t2 FROM mysqltest_dfn@localhost; | ||
|  | 
 | ||
|  | ---> connection: wl2818_invoker_con | ||
|  | use mysqltest_db1; | ||
|  | INSERT INTO t1 VALUES(3); | ||
|  | ERROR 42000: INSERT command denied to user 'mysqltest_dfn'@'localhost' for table 't2' | ||
|  | SELECT * FROM t1; | ||
|  | num_value | ||
|  | 1 | ||
|  | 2 | ||
|  | 3 | ||
|  | SELECT * FROM t2; | ||
|  | user_str | ||
|  | mysqltest_dfn@localhost | ||
|  | mysqltest_dfn@localhost | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | use mysqltest_db1; | ||
|  | DROP TRIGGER trg1; | ||
|  | CREATE DEFINER='mysqltest_inv'@'localhost' | ||
|  |   TRIGGER trg1 BEFORE INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @new_sum = 0; | ||
|  | ERROR 42000: Access denied; you need the SUPER privilege for this operation | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | use mysqltest_db1; | ||
|  | GRANT SUPER ON *.* TO mysqltest_dfn@localhost; | ||
|  | 
 | ||
|  | ---> connection: wl2818_definer_con | ||
|  | CREATE DEFINER='mysqltest_inv'@'localhost' | ||
|  |   TRIGGER trg1 BEFORE INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @new_sum = 0; | ||
|  | CREATE DEFINER='mysqltest_nonexs'@'localhost' | ||
|  |   TRIGGER trg2 AFTER INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @new_sum = 0; | ||
|  | Warnings: | ||
|  | Note	1449	The user specified as a definer ('mysqltest_nonexs'@'localhost') does not exist | ||
|  | INSERT INTO t1 VALUES(6); | ||
|  | ERROR HY000: The user specified as a definer ('mysqltest_nonexs'@'localhost') does not exist | ||
|  | SHOW TRIGGERS; | ||
|  | Trigger	Event	Table	Statement	Timing	Created	sql_mode	Definer	character_set_client	collation_connection	Database Collation | ||
|  | trg1	INSERT	t1	SET @new_sum = 0	BEFORE	NULL		mysqltest_inv@localhost	latin1	latin1_swedish_ci	latin1_swedish_ci | ||
|  | trg2	INSERT	t1	SET @new_sum = 0	AFTER	NULL		mysqltest_nonexs@localhost	latin1	latin1_swedish_ci	latin1_swedish_ci | ||
|  | DROP TRIGGER trg1; | ||
|  | DROP TRIGGER trg2; | ||
|  | CREATE TRIGGER trg1 BEFORE INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @a = 1; | ||
|  | CREATE TRIGGER trg2 AFTER INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @a = 2; | ||
|  | CREATE TRIGGER trg3 BEFORE UPDATE ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @a = 3; | ||
|  | CREATE TRIGGER trg4 AFTER UPDATE ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @a = 4; | ||
|  | CREATE TRIGGER trg5 BEFORE DELETE ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @a = 5; | ||
|  | 
 | ||
|  | SELECT trigger_name, definer FROM INFORMATION_SCHEMA.TRIGGERS ORDER BY trigger_name; | ||
|  | trigger_name	definer | ||
|  | trg1	 | ||
|  | trg2	@ | ||
|  | trg3	@abc@def@@ | ||
|  | trg4	@hostname | ||
|  | trg5	@abcdef@@@hostname | ||
|  | Warnings: | ||
|  | Warning	1454	No definer attribute for trigger 'mysqltest_db1'.'trg1'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger. | ||
|  | 
 | ||
|  | SELECT * FROM INFORMATION_SCHEMA.TRIGGERS ORDER BY trigger_name; | ||
|  | TRIGGER_CATALOG	TRIGGER_SCHEMA	TRIGGER_NAME	EVENT_MANIPULATION	EVENT_OBJECT_CATALOG	EVENT_OBJECT_SCHEMA	EVENT_OBJECT_TABLE	ACTION_ORDER	ACTION_CONDITION	ACTION_STATEMENT	ACTION_ORIENTATION	ACTION_TIMING	ACTION_REFERENCE_OLD_TABLE	ACTION_REFERENCE_NEW_TABLE	ACTION_REFERENCE_OLD_ROW	ACTION_REFERENCE_NEW_ROW	CREATED	SQL_MODE	DEFINER	CHARACTER_SET_CLIENT	COLLATION_CONNECTION	DATABASE_COLLATION | ||
|  | NULL	mysqltest_db1	trg1	INSERT	NULL	mysqltest_db1	t1	0	NULL	SET @a = 1	ROW	BEFORE	NULL	NULL	OLD	NEW	NULL			latin1	latin1_swedish_ci	latin1_swedish_ci | ||
|  | NULL	mysqltest_db1	trg2	INSERT	NULL	mysqltest_db1	t1	0	NULL	SET @a = 2	ROW	AFTER	NULL	NULL	OLD	NEW	NULL		@	latin1	latin1_swedish_ci	latin1_swedish_ci | ||
|  | NULL	mysqltest_db1	trg3	UPDATE	NULL	mysqltest_db1	t1	0	NULL	SET @a = 3	ROW	BEFORE	NULL	NULL	OLD	NEW	NULL		@abc@def@@	latin1	latin1_swedish_ci	latin1_swedish_ci | ||
|  | NULL	mysqltest_db1	trg4	UPDATE	NULL	mysqltest_db1	t1	0	NULL	SET @a = 4	ROW	AFTER	NULL	NULL	OLD	NEW	NULL		@hostname	latin1	latin1_swedish_ci	latin1_swedish_ci | ||
|  | NULL	mysqltest_db1	trg5	DELETE	NULL	mysqltest_db1	t1	0	NULL	SET @a = 5	ROW	BEFORE	NULL	NULL	OLD	NEW	NULL		@abcdef@@@hostname	latin1	latin1_swedish_ci	latin1_swedish_ci | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | DROP USER mysqltest_dfn@localhost; | ||
|  | DROP USER mysqltest_inv@localhost; | ||
|  | DROP DATABASE mysqltest_db1; | ||
|  | DELETE FROM mysql.user WHERE User LIKE 'mysqltest_%'; | ||
|  | DELETE FROM mysql.db WHERE User LIKE 'mysqltest_%'; | ||
|  | DELETE FROM mysql.tables_priv WHERE User LIKE 'mysqltest_%'; | ||
|  | DELETE FROM mysql.columns_priv WHERE User LIKE 'mysqltest_%'; | ||
|  | FLUSH PRIVILEGES; | ||
|  | DROP DATABASE IF EXISTS mysqltest_db1; | ||
|  | CREATE DATABASE mysqltest_db1; | ||
|  | use mysqltest_db1; | ||
|  | CREATE TABLE t1(col CHAR(20)); | ||
|  | CREATE TABLE t2(col CHAR(20)); | ||
|  | CREATE TABLE t3(col CHAR(20)); | ||
|  | CREATE TABLE t4(col CHAR(20)); | ||
|  | CREATE USER mysqltest_u1@localhost; | ||
|  | REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_u1@localhost; | ||
|  | GRANT TRIGGER ON mysqltest_db1.* TO mysqltest_u1@localhost; | ||
|  | SET @mysqltest_var = NULL; | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | use mysqltest_db1; | ||
|  | GRANT DELETE ON mysqltest_db1.* TO mysqltest_u1@localhost; | ||
|  | SHOW GRANTS FOR mysqltest_u1@localhost; | ||
|  | Grants for mysqltest_u1@localhost | ||
|  | GRANT USAGE ON *.* TO 'mysqltest_u1'@'localhost' | ||
|  | GRANT DELETE, TRIGGER ON `mysqltest_db1`.* TO 'mysqltest_u1'@'localhost' | ||
|  | 
 | ||
|  | ---> connection: bug15166_u1_con | ||
|  | use mysqltest_db1; | ||
|  | CREATE TRIGGER t1_trg_after_delete AFTER DELETE ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @mysqltest_var = 'Hello, world!'; | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | use mysqltest_db1; | ||
|  | GRANT UPDATE ON mysqltest_db1.t1 TO mysqltest_u1@localhost; | ||
|  | GRANT UPDATE ON mysqltest_db1.t2 TO mysqltest_u1@localhost; | ||
|  | GRANT UPDATE(col) ON mysqltest_db1.t3 TO mysqltest_u1@localhost; | ||
|  | GRANT UPDATE(col) ON mysqltest_db1.t4 TO mysqltest_u1@localhost; | ||
|  | 
 | ||
|  | ---> connection: bug15166_u1_con | ||
|  | use mysqltest_db1; | ||
|  | CREATE TRIGGER t1_trg_err_1 BEFORE INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @mysqltest_var = NEW.col; | ||
|  | DROP TRIGGER t1_trg_err_1; | ||
|  | CREATE TRIGGER t1_trg_err_2 BEFORE DELETE ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @mysqltest_var = OLD.col; | ||
|  | DROP TRIGGER t1_trg_err_2; | ||
|  | CREATE TRIGGER t2_trg_before_insert BEFORE INSERT ON t2 | ||
|  | FOR EACH ROW | ||
|  | SET NEW.col = 't2_trg_before_insert'; | ||
|  | CREATE TRIGGER t3_trg_err_1 BEFORE INSERT ON t3 | ||
|  | FOR EACH ROW | ||
|  | SET @mysqltest_var = NEW.col; | ||
|  | DROP TRIGGER t3_trg_err_1; | ||
|  | CREATE TRIGGER t3_trg_err_2 BEFORE DELETE ON t3 | ||
|  | FOR EACH ROW | ||
|  | SET @mysqltest_var = OLD.col; | ||
|  | DROP TRIGGER t3_trg_err_2; | ||
|  | CREATE TRIGGER t4_trg_before_insert BEFORE INSERT ON t4 | ||
|  | FOR EACH ROW | ||
|  | SET NEW.col = 't4_trg_before_insert'; | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | use mysqltest_db1; | ||
|  | REVOKE UPDATE ON mysqltest_db1.t1 FROM mysqltest_u1@localhost; | ||
|  | REVOKE UPDATE ON mysqltest_db1.t2 FROM mysqltest_u1@localhost; | ||
|  | GRANT SELECT ON mysqltest_db1.t1 TO mysqltest_u1@localhost; | ||
|  | GRANT SELECT ON mysqltest_db1.t2 TO mysqltest_u1@localhost; | ||
|  | REVOKE UPDATE(col) ON mysqltest_db1.t3 FROM mysqltest_u1@localhost; | ||
|  | REVOKE UPDATE(col) ON mysqltest_db1.t4 FROM mysqltest_u1@localhost; | ||
|  | GRANT SELECT(col) on mysqltest_db1.t3 TO mysqltest_u1@localhost; | ||
|  | GRANT SELECT(col) on mysqltest_db1.t4 TO mysqltest_u1@localhost; | ||
|  | 
 | ||
|  | ---> connection: bug15166_u1_con | ||
|  | use mysqltest_db1; | ||
|  | CREATE TRIGGER t1_trg_after_insert AFTER INSERT ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @mysqltest_var = NEW.col; | ||
|  | CREATE TRIGGER t1_trg_after_update AFTER UPDATE ON t1 | ||
|  | FOR EACH ROW | ||
|  | SET @mysqltest_var = OLD.col; | ||
|  | CREATE TRIGGER t2_trg_err_1 BEFORE UPDATE ON t2 | ||
|  | FOR EACH ROW | ||
|  | SET NEW.col = 't2_trg_err_1'; | ||
|  | DROP TRIGGER t2_trg_err_1; | ||
|  | CREATE TRIGGER t2_trg_err_2 BEFORE UPDATE ON t2 | ||
|  | FOR EACH ROW | ||
|  | SET NEW.col = CONCAT(OLD.col, '(updated)'); | ||
|  | DROP TRIGGER t2_trg_err_2; | ||
|  | CREATE TRIGGER t3_trg_after_insert AFTER INSERT ON t3 | ||
|  | FOR EACH ROW | ||
|  | SET @mysqltest_var = NEW.col; | ||
|  | CREATE TRIGGER t3_trg_after_update AFTER UPDATE ON t3 | ||
|  | FOR EACH ROW | ||
|  | SET @mysqltest_var = OLD.col; | ||
|  | CREATE TRIGGER t4_trg_err_1 BEFORE UPDATE ON t4 | ||
|  | FOR EACH ROW | ||
|  | SET NEW.col = 't4_trg_err_1'; | ||
|  | DROP TRIGGER t4_trg_err_1; | ||
|  | CREATE TRIGGER t4_trg_err_2 BEFORE UPDATE ON t4 | ||
|  | FOR EACH ROW | ||
|  | SET NEW.col = CONCAT(OLD.col, '(updated)'); | ||
|  | DROP TRIGGER t4_trg_err_2; | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | use mysqltest_db1; | ||
|  | REVOKE SELECT ON mysqltest_db1.t1 FROM mysqltest_u1@localhost; | ||
|  | REVOKE SELECT ON mysqltest_db1.t2 FROM mysqltest_u1@localhost; | ||
|  | GRANT UPDATE ON mysqltest_db1.t1 TO mysqltest_u1@localhost; | ||
|  | GRANT UPDATE ON mysqltest_db1.t2 TO mysqltest_u1@localhost; | ||
|  | REVOKE SELECT(col) ON mysqltest_db1.t3 FROM mysqltest_u1@localhost; | ||
|  | REVOKE SELECT(col) ON mysqltest_db1.t4 FROM mysqltest_u1@localhost; | ||
|  | GRANT UPDATE(col) ON mysqltest_db1.t3 TO mysqltest_u1@localhost; | ||
|  | GRANT UPDATE(col) ON mysqltest_db1.t4 TO mysqltest_u1@localhost; | ||
|  | INSERT INTO t1 VALUES('line1'); | ||
|  | ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 't1' | ||
|  | SELECT * FROM t1; | ||
|  | col | ||
|  | line1 | ||
|  | SELECT @mysqltest_var; | ||
|  | @mysqltest_var | ||
|  | NULL | ||
|  | INSERT INTO t2 VALUES('line2'); | ||
|  | SELECT * FROM t2; | ||
|  | col | ||
|  | t2_trg_before_insert | ||
|  | INSERT INTO t3 VALUES('t3_line1'); | ||
|  | ERROR 42000: SELECT command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 't3' | ||
|  | SELECT * FROM t3; | ||
|  | col | ||
|  | t3_line1 | ||
|  | SELECT @mysqltest_var; | ||
|  | @mysqltest_var | ||
|  | NULL | ||
|  | INSERT INTO t4 VALUES('t4_line2'); | ||
|  | SELECT * FROM t4; | ||
|  | col | ||
|  | t4_trg_before_insert | ||
|  | 
 | ||
|  | ---> connection: default | ||
|  | use mysqltest_db1; | ||
|  | REVOKE UPDATE ON mysqltest_db1.t1 FROM mysqltest_u1@localhost; | ||
|  | REVOKE UPDATE ON mysqltest_db1.t2 FROM mysqltest_u1@localhost; | ||
|  | GRANT SELECT ON mysqltest_db1.t1 TO mysqltest_u1@localhost; | ||
|  | GRANT SELECT ON mysqltest_db1.t2 TO mysqltest_u1@localhost; | ||
|  | REVOKE UPDATE(col) ON mysqltest_db1.t3 FROM mysqltest_u1@localhost; | ||
|  | REVOKE UPDATE(col) ON mysqltest_db1.t4 FROM mysqltest_u1@localhost; | ||
|  | GRANT SELECT(col) ON mysqltest_db1.t3 TO mysqltest_u1@localhost; | ||
|  | GRANT SELECT(col) ON mysqltest_db1.t4 TO mysqltest_u1@localhost; | ||
|  | INSERT INTO t1 VALUES('line3'); | ||
|  | SELECT * FROM t1; | ||
|  | col | ||
|  | line1 | ||
|  | line3 | ||
|  | SELECT @mysqltest_var; | ||
|  | @mysqltest_var | ||
|  | line3 | ||
|  | INSERT INTO t2 VALUES('line4'); | ||
|  | ERROR 42000: UPDATE command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 't2' | ||
|  | SELECT * FROM t2; | ||
|  | col | ||
|  | t2_trg_before_insert | ||
|  | INSERT INTO t3 VALUES('t3_line2'); | ||
|  | SELECT * FROM t3; | ||
|  | col | ||
|  | t3_line1 | ||
|  | t3_line2 | ||
|  | SELECT @mysqltest_var; | ||
|  | @mysqltest_var | ||
|  | t3_line2 | ||
|  | INSERT INTO t4 VALUES('t4_line2'); | ||
|  | ERROR 42000: UPDATE command denied to user 'mysqltest_u1'@'localhost' for column 'col' in table 't4' | ||
|  | SELECT * FROM t4; | ||
|  | col | ||
|  | t4_trg_before_insert | ||
|  | DELETE FROM t1; | ||
|  | SELECT @mysqltest_var; | ||
|  | @mysqltest_var | ||
|  | Hello, world! | ||
|  | DROP USER mysqltest_u1@localhost; | ||
|  | DROP DATABASE mysqltest_db1; | ||
|  | DELETE FROM mysql.user WHERE User LIKE 'mysqltest_%'; | ||
|  | DELETE FROM mysql.db WHERE User LIKE 'mysqltest_%'; | ||
|  | DELETE FROM mysql.tables_priv WHERE User LIKE 'mysqltest_%'; | ||
|  | DELETE FROM mysql.columns_priv WHERE User LIKE 'mysqltest_%'; | ||
|  | FLUSH PRIVILEGES; | ||
|  | DROP DATABASE IF EXISTS mysqltest_db1; | ||
|  | CREATE DATABASE mysqltest_db1; | ||
|  | USE mysqltest_db1; | ||
|  | CREATE TABLE t1 (i1 INT); | ||
|  | CREATE TABLE t2 (i1 INT); | ||
|  | CREATE USER mysqltest_dfn@localhost; | ||
|  | CREATE USER mysqltest_inv@localhost; | ||
|  | GRANT EXECUTE, CREATE ROUTINE, TRIGGER ON *.* TO mysqltest_dfn@localhost; | ||
|  | GRANT INSERT ON mysqltest_db1.* TO mysqltest_inv@localhost; | ||
|  | CREATE PROCEDURE p1(OUT i INT) DETERMINISTIC NO SQL SET i = 3; | ||
|  | CREATE PROCEDURE p2(INOUT i INT) DETERMINISTIC NO SQL SET i = i * 5; | ||
|  | CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW | ||
|  | CALL p1(NEW.i1); | ||
|  | CREATE TRIGGER t2_bi BEFORE INSERT ON t2 FOR EACH ROW | ||
|  | CALL p2(NEW.i1); | ||
|  | INSERT INTO t1 VALUES (7); | ||
|  | ERROR 42000: UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't1' | ||
|  | INSERT INTO t2 VALUES (11); | ||
|  | ERROR 42000: SELECT,UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't2' | ||
|  | DROP TRIGGER t2_bi; | ||
|  | DROP TRIGGER t1_bi; | ||
|  | GRANT SELECT ON mysqltest_db1.* TO mysqltest_dfn@localhost; | ||
|  | CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW | ||
|  | CALL p1(NEW.i1); | ||
|  | CREATE TRIGGER t2_bi BEFORE INSERT ON t2 FOR EACH ROW | ||
|  | CALL p2(NEW.i1); | ||
|  | INSERT INTO t1 VALUES (13); | ||
|  | ERROR 42000: UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't1' | ||
|  | INSERT INTO t2 VALUES (17); | ||
|  | ERROR 42000: UPDATE command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't2' | ||
|  | REVOKE SELECT ON mysqltest_db1.* FROM mysqltest_dfn@localhost; | ||
|  | DROP TRIGGER t2_bi; | ||
|  | DROP TRIGGER t1_bi; | ||
|  | GRANT UPDATE ON mysqltest_db1.* TO mysqltest_dfn@localhost; | ||
|  | CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW | ||
|  | CALL p1(NEW.i1); | ||
|  | CREATE TRIGGER t2_bi BEFORE INSERT ON t2 FOR EACH ROW | ||
|  | CALL p2(NEW.i1); | ||
|  | INSERT INTO t1 VALUES (19); | ||
|  | INSERT INTO t2 VALUES (23); | ||
|  | ERROR 42000: SELECT command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't2' | ||
|  | REVOKE UPDATE ON mysqltest_db1.* FROM mysqltest_dfn@localhost; | ||
|  | DROP TRIGGER t2_bi; | ||
|  | DROP TRIGGER t1_bi; | ||
|  | GRANT SELECT, UPDATE ON mysqltest_db1.* TO mysqltest_dfn@localhost; | ||
|  | CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW | ||
|  | CALL p1(NEW.i1); | ||
|  | CREATE TRIGGER t2_bi BEFORE INSERT ON t2 FOR EACH ROW | ||
|  | CALL p2(NEW.i1); | ||
|  | INSERT INTO t1 VALUES (29); | ||
|  | INSERT INTO t2 VALUES (31); | ||
|  | REVOKE SELECT, UPDATE ON mysqltest_db1.* FROM mysqltest_dfn@localhost; | ||
|  | DROP TRIGGER t2_bi; | ||
|  | DROP TRIGGER t1_bi; | ||
|  | DROP PROCEDURE p2; | ||
|  | DROP PROCEDURE p1; | ||
|  | GRANT UPDATE ON mysqltest_db1.* TO mysqltest_dfn@localhost; | ||
|  | CREATE PROCEDURE p1(OUT i INT) DETERMINISTIC NO SQL SET i = 37; | ||
|  | CREATE TRIGGER t1_bi BEFORE INSERT ON t1 FOR EACH ROW | ||
|  | CALL p1(NEW.i1); | ||
|  | INSERT INTO t1 VALUES (41); | ||
|  | DROP PROCEDURE p1; | ||
|  | CREATE PROCEDURE p1(IN i INT) DETERMINISTIC NO SQL SET @v1 = i + 43; | ||
|  | INSERT INTO t1 VALUES (47); | ||
|  | ERROR 42000: SELECT command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't1' | ||
|  | DROP PROCEDURE p1; | ||
|  | CREATE PROCEDURE p1(INOUT i INT) DETERMINISTIC NO SQL SET i = i + 51; | ||
|  | INSERT INTO t1 VALUES (53); | ||
|  | ERROR 42000: SELECT command denied to user 'mysqltest_dfn'@'localhost' for column 'i1' in table 't1' | ||
|  | DROP PROCEDURE p1; | ||
|  | REVOKE UPDATE ON mysqltest_db1.* FROM mysqltest_dfn@localhost; | ||
|  | DROP TRIGGER t1_bi; | ||
|  | DROP USER mysqltest_inv@localhost; | ||
|  | DROP USER mysqltest_dfn@localhost; | ||
|  | DROP TABLE t2; | ||
|  | DROP TABLE t1; | ||
|  | DROP DATABASE mysqltest_db1; | ||
|  | USE test; | ||
|  | End of 5.0 tests. | ||
|  | drop table if exists t1; | ||
|  | create table t1 (i int); | ||
|  | connection: default | ||
|  | lock tables t1 write; | ||
|  | connection: flush | ||
|  | flush tables with read lock;; | ||
|  | connection: default | ||
|  | create trigger t1_bi before insert on t1 for each row begin end; | ||
|  | unlock tables; | ||
|  | connection: flush | ||
|  | unlock tables; | ||
|  | select * from t1; | ||
|  | i | ||
|  | drop table t1; | ||
|  | CREATE DATABASE db1; | ||
|  | CREATE TABLE db1.t1 (a char(30)) ENGINE=MEMORY; | ||
|  | CREATE TRIGGER db1.trg AFTER INSERT ON db1.t1 FOR EACH ROW | ||
|  | INSERT INTO db1.t1 VALUES('Some very sensitive data goes here'); | ||
|  | CREATE USER 'no_rights'@'localhost'; | ||
|  | REVOKE ALL ON *.* FROM 'no_rights'@'localhost'; | ||
|  | FLUSH PRIVILEGES; | ||
|  | SELECT trigger_name FROM INFORMATION_SCHEMA.TRIGGERS | ||
|  | WHERE trigger_schema = 'db1'; | ||
|  | trigger_name | ||
|  | SHOW CREATE TRIGGER db1.trg; | ||
|  | ERROR 42000: Access denied; you need the TRIGGER privilege for this operation | ||
|  | DROP USER 'no_rights'@'localhost'; | ||
|  | DROP DATABASE db1; | ||
|  | DROP DATABASE IF EXISTS mysqltest_db1; | ||
|  | CREATE DATABASE mysqltest_db1; | ||
|  | USE mysqltest_db1; | ||
|  | GRANT ALL ON mysqltest_db1.* TO mysqltest_u1@localhost; | ||
|  | CREATE TABLE t1 ( | ||
|  | a1 int, | ||
|  | a2 int | ||
|  | ); | ||
|  | INSERT INTO t1 VALUES (1, 20); | ||
|  | CREATE TRIGGER mysqltest_db1.upd_t1 | ||
|  | BEFORE UPDATE ON t1 FOR EACH ROW SET new.a2 = 200; | ||
|  | CREATE TABLE t2 ( | ||
|  | a1 int | ||
|  | ); | ||
|  | INSERT INTO t2 VALUES (2); | ||
|  | REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_u1@localhost; | ||
|  | UPDATE IGNORE t1, t2 SET t1.a1 = 2, t2.a1 = 3 WHERE t1.a1 = 1 AND t2.a1 = 2; | ||
|  | ERROR 42000: TRIGGER command denied to user 'mysqltest_u1'@'localhost' for table 't1' | ||
|  | DROP DATABASE mysqltest_db1; | ||
|  | DROP USER mysqltest_u1@localhost; | ||
|  | USE test; | ||
|  | End of 5.1 tests. |