347 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			347 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
--source include/not_embedded.inc
 | 
						|
 | 
						|
SET sql_mode=ORACLE;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # MDEV-10577 sql_mode=ORACLE: %TYPE in variable declarations
 | 
						|
--echo #
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Initiation:
 | 
						|
--echo # - creating database db1
 | 
						|
--echo # - creating user user1 with access rights to db1
 | 
						|
--echo #
 | 
						|
 | 
						|
CREATE DATABASE db1;
 | 
						|
CREATE TABLE db1.t1 (a INT, b VARCHAR(10));
 | 
						|
 | 
						|
CREATE USER user1;
 | 
						|
 | 
						|
GRANT ALL PRIVILEGES ON test.* TO user1;
 | 
						|
 | 
						|
connect (conn1,localhost,user1,,test);
 | 
						|
SET sql_mode=ORACLE;
 | 
						|
 | 
						|
SELECT database();
 | 
						|
SELECT user();
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Making sure that user1 does not have privileges to db1.t1
 | 
						|
--echo #
 | 
						|
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
SHOW CREATE TABLE db1.t1;
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
SHOW FIELDS IN db1.t1;
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Trigger: using %TYPE with a table we don't have access to
 | 
						|
--echo #
 | 
						|
CREATE TABLE test.t1 (a INT, b INT);
 | 
						|
INSERT INTO test.t1 (a,b) VALUES (10,20);
 | 
						|
SELECT * FROM t1;
 | 
						|
DELIMITER $$;
 | 
						|
CREATE TRIGGER test.tr1 BEFORE INSERT ON test.t1 FOR EACH ROW
 | 
						|
BEGIN
 | 
						|
  DECLARE b db1.t1.b%TYPE := 20;
 | 
						|
  BEGIN
 | 
						|
    :NEW.b := 10;
 | 
						|
  END;
 | 
						|
END
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
INSERT INTO t1 (a) VALUES (10);
 | 
						|
SELECT * FROM t1;
 | 
						|
DROP TRIGGER tr1;
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Stored procedure: Using %TYPE for with a table that we don't have access to
 | 
						|
--echo # DEFINER user1, SQL SECURITY DEFAULT
 | 
						|
--echo #
 | 
						|
 | 
						|
DELIMITER $$;
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
AS
 | 
						|
  a db1.t1.a%TYPE := 10;
 | 
						|
BEGIN
 | 
						|
  SELECT a;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
CALL p1;
 | 
						|
DROP PROCEDURE p1;
 | 
						|
 | 
						|
DELIMITER $$;
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
AS
 | 
						|
  a db1.t1%ROWTYPE;
 | 
						|
BEGIN
 | 
						|
  SELECT a.a;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
CALL p1;
 | 
						|
DROP PROCEDURE p1;
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Stored procedure: Using %TYPE for with a table that we don't have access to
 | 
						|
--echo # DEFINER root, SQL SECURITY INVOKER
 | 
						|
--echo #
 | 
						|
 | 
						|
connection default;
 | 
						|
DELIMITER $$;
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
SQL SECURITY INVOKER
 | 
						|
AS
 | 
						|
  a db1.t1.a%TYPE := 10;
 | 
						|
BEGIN
 | 
						|
  SELECT a;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
connection conn1;
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
CALL p1;
 | 
						|
DROP PROCEDURE p1;
 | 
						|
 | 
						|
 | 
						|
connection default;
 | 
						|
DELIMITER $$;
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
SQL SECURITY INVOKER
 | 
						|
AS
 | 
						|
  a db1.t1%ROWTYPE;
 | 
						|
BEGIN
 | 
						|
  SELECT a.a;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
connection conn1;
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
CALL p1;
 | 
						|
DROP PROCEDURE p1;
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Stored procedure: Using %TYPE for with a table that we don't have access to
 | 
						|
--echo # DEFINER root, SQL SECURITY DEFINER
 | 
						|
--echo #
 | 
						|
 | 
						|
connection default;
 | 
						|
DELIMITER $$;
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
SQL SECURITY DEFINER
 | 
						|
AS
 | 
						|
  a db1.t1.a%TYPE := 10;
 | 
						|
BEGIN
 | 
						|
  SELECT a;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
connection conn1;
 | 
						|
CALL p1;
 | 
						|
DROP PROCEDURE p1;
 | 
						|
 | 
						|
connection default;
 | 
						|
DELIMITER $$;
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
SQL SECURITY DEFINER
 | 
						|
AS
 | 
						|
  a db1.t1%ROWTYPE;
 | 
						|
BEGIN
 | 
						|
  a.a:= 10;
 | 
						|
  SELECT a.a;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
connection conn1;
 | 
						|
CALL p1;
 | 
						|
DROP PROCEDURE p1;
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Stored function: Using %TYPE for with a table that we don't have access to
 | 
						|
--echo # DEFINER user1, SQL SECURITY DEFAULT
 | 
						|
--echo #
 | 
						|
 | 
						|
CREATE TABLE t1 (a INT);
 | 
						|
DELIMITER $$;
 | 
						|
CREATE FUNCTION f1() RETURN INT
 | 
						|
AS
 | 
						|
  a db1.t1.a%TYPE:=0;
 | 
						|
BEGIN
 | 
						|
  RETURN OCTET_LENGTH(a);
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
SELECT f1();
 | 
						|
DROP FUNCTION f1;
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Stored function: Using %TYPE for with a table that we don't have access to
 | 
						|
--echo # DEFINER root, SQL SECURITY INVOKER
 | 
						|
--echo #
 | 
						|
 | 
						|
connection default;
 | 
						|
CREATE TABLE t1 (a INT);
 | 
						|
DELIMITER $$;
 | 
						|
CREATE FUNCTION f1() RETURN INT
 | 
						|
SQL SECURITY INVOKER
 | 
						|
AS
 | 
						|
  a db1.t1.a%TYPE:=0;
 | 
						|
BEGIN
 | 
						|
  RETURN OCTET_LENGTH(a);
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
connection conn1;
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
SELECT f1();
 | 
						|
DROP FUNCTION f1;
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Stored function: Using %TYPE for with a table that we don't have access to
 | 
						|
--echo # DEFINER root, SQL SECURITY DEFINER
 | 
						|
--echo #
 | 
						|
 | 
						|
connection default;
 | 
						|
CREATE TABLE t1 (a INT);
 | 
						|
DELIMITER $$;
 | 
						|
CREATE FUNCTION f1() RETURN INT
 | 
						|
SQL SECURITY DEFINER
 | 
						|
AS
 | 
						|
  a db1.t1.a%TYPE:=0;
 | 
						|
BEGIN
 | 
						|
  RETURN OCTET_LENGTH(a);
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
connection conn1;
 | 
						|
SELECT f1();
 | 
						|
DROP FUNCTION f1;
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
 | 
						|
connection default;
 | 
						|
# qc_sqlite: GRANT SELECT (a) ON db1.t1 TO user1;
 | 
						|
# qc_sqlite: Does not collect database/able names.
 | 
						|
connection conn1;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Making sure that user1 has access to db1.t1.a, but not to db1.t1.b
 | 
						|
--echo #
 | 
						|
 | 
						|
--error ER_TABLEACCESS_DENIED_ERROR
 | 
						|
SHOW CREATE TABLE db1.t1;
 | 
						|
SHOW FIELDS IN db1.t1;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Trigger: Per-column privileges
 | 
						|
--echo #
 | 
						|
CREATE TABLE test.t1 (a INT, b INT);
 | 
						|
INSERT INTO test.t1 (a,b) VALUES (10,20);
 | 
						|
SELECT * FROM t1;
 | 
						|
# %TYPE reference using a column we have access to
 | 
						|
DELIMITER $$;
 | 
						|
CREATE TRIGGER test.tr1 BEFORE INSERT ON test.t1 FOR EACH ROW
 | 
						|
BEGIN
 | 
						|
  DECLARE a db1.t1.a%TYPE := 20;
 | 
						|
  BEGIN
 | 
						|
    :NEW.b := 10;
 | 
						|
  END;
 | 
						|
END
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
INSERT INTO t1 (a) VALUES (10);
 | 
						|
SELECT * FROM t1;
 | 
						|
DROP TRIGGER tr1;
 | 
						|
# %TYPE reference using a column that we don't have access to
 | 
						|
DELIMITER $$;
 | 
						|
CREATE TRIGGER test.tr1 BEFORE INSERT ON test.t1 FOR EACH ROW
 | 
						|
BEGIN
 | 
						|
  DECLARE b db1.t1.b%TYPE := 20;
 | 
						|
  BEGIN
 | 
						|
    :NEW.b := 10;
 | 
						|
  END;
 | 
						|
END
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
--error ER_COLUMNACCESS_DENIED_ERROR
 | 
						|
INSERT INTO t1 (a) VALUES (10);
 | 
						|
SELECT * FROM t1;
 | 
						|
DROP TRIGGER tr1;
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Stored procedure: Per-column privileges
 | 
						|
--echo # DEFINER user1, SQL SECURITY DEFAULT
 | 
						|
--echo #
 | 
						|
 | 
						|
DELIMITER $$;
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
AS
 | 
						|
  a db1.t1.a%TYPE := 10;
 | 
						|
BEGIN
 | 
						|
  SELECT a;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
CALL p1;
 | 
						|
DROP PROCEDURE p1;
 | 
						|
 | 
						|
DELIMITER $$;
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
AS
 | 
						|
  b db1.t1.b%TYPE := 10;
 | 
						|
BEGIN
 | 
						|
  SELECT b;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
--error ER_COLUMNACCESS_DENIED_ERROR
 | 
						|
CALL p1;
 | 
						|
DROP PROCEDURE p1;
 | 
						|
 | 
						|
DELIMITER $$;
 | 
						|
CREATE PROCEDURE p1()
 | 
						|
AS
 | 
						|
  b db1.t1%ROWTYPE;
 | 
						|
BEGIN
 | 
						|
  b.b:=10;
 | 
						|
  SELECT b.b;
 | 
						|
END;
 | 
						|
$$
 | 
						|
DELIMITER ;$$
 | 
						|
--error ER_COLUMNACCESS_DENIED_ERROR
 | 
						|
CALL p1;
 | 
						|
DROP PROCEDURE p1;
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # Clean up
 | 
						|
--echo #
 | 
						|
disconnect conn1;
 | 
						|
connection default;
 | 
						|
 | 
						|
DROP USER user1;
 | 
						|
DROP DATABASE db1;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # End of MDEV-10577 sql_mode=ORACLE: %TYPE in variable declarations
 | 
						|
--echo #
 |