1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-20 10:24:14 +03:00
Files
mariadb/mysql-test/t/grant_explain_non_select.test
Monty 9cba6c5aa3 Updated mtr files to support different compiled in options
This allows one to run the test suite even if any of the following
options are changed:
- character-set-server
- collation-server
- join-cache-level
- log-basename
- max-allowed-packet
- optimizer-switch
- query-cache-size and query-cache-type
- skip-name-resolve
- table-definition-cache
- table-open-cache
- Some innodb options
etc

Changes:
- Don't print out the value of system variables as one can't depend on
  them to being constants.
- Don't set global variables to 'default' as the default may not
  be the same as the test was started with if there was an additional
  option file. Instead save original value and reset it at end of test.
- Test that depends on the latin1 character set should include
  default_charset.inc or set the character set to latin1
- Test that depends on the original optimizer switch, should include
  default_optimizer_switch.inc
- Test that depends on the value of a specific system variable should
  set it in the test (like optimizer_use_condition_selectivity)
- Split subselect3.test into subselect3.test and subselect3.inc to
  make it easier to set and reset system variables.
- Added .opt files for test that required specfic options that could
  be changed by external configuration files.
- Fixed result files in rockdsb & tokudb that had not been updated for
  a while.
2019-09-01 19:17:35 +03:00

266 lines
7.5 KiB
Plaintext

#
# Privilege-specific tests for WL#4897: Add EXPLAIN INSERT/UPDATE/DELETE
#
# Grant tests not performed with embedded server
-- source include/not_embedded.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--source include/default_optimizer_switch.inc
set GLOBAL sql_mode="";
set LOCAL sql_mode="";
CREATE DATABASE privtest_db;
CREATE TABLE privtest_db.t1 (a INT);
CREATE TABLE privtest_db.t2 (a INT);
INSERT INTO privtest_db.t2 VALUES (1), (2), (3);
GRANT USAGE ON *.* TO 'privtest'@'localhost';
GRANT SELECT ON privtest_db.t2 TO 'privtest'@'localhost';
connect(con1,localhost,privtest,,);
connection con1;
--source include/default_optimizer_switch.inc
USE privtest_db;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN INSERT INTO t1 VALUES (10);
--error ER_TABLEACCESS_DENIED_ERROR
INSERT INTO t1 VALUES (10);
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN INSERT INTO t1 SELECT * FROM t2;
--error ER_TABLEACCESS_DENIED_ERROR
INSERT INTO t1 SELECT * FROM t2;
connection default;
GRANT INSERT ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
EXPLAIN INSERT INTO t1 VALUES (10);
INSERT INTO t1 VALUES (10);
EXPLAIN INSERT INTO t1 SELECT * FROM t2;
INSERT INTO t1 SELECT * FROM t2;
connection default;
REVOKE ALL PRIVILEGES ON privtest_db.t1 FROM 'privtest'@'localhost';
connection con1;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN REPLACE INTO t1 VALUES (10);
--error ER_TABLEACCESS_DENIED_ERROR
REPLACE INTO t1 VALUES (10);
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN REPLACE INTO t1 SELECT * FROM t2;
--error ER_TABLEACCESS_DENIED_ERROR
REPLACE INTO t1 SELECT * FROM t2;
connection default;
GRANT INSERT ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN REPLACE INTO t1 VALUES (10);
--error ER_TABLEACCESS_DENIED_ERROR
REPLACE INTO t1 VALUES (10);
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN REPLACE INTO t1 SELECT * FROM t2;
--error ER_TABLEACCESS_DENIED_ERROR
REPLACE INTO t1 SELECT * FROM t2;
connection default;
REVOKE INSERT ON privtest_db.t1 FROM 'privtest'@'localhost';
GRANT DELETE ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN REPLACE INTO t1 VALUES (10);
--error ER_TABLEACCESS_DENIED_ERROR
REPLACE INTO t1 VALUES (10);
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN REPLACE INTO t1 SELECT * FROM t2;
--error ER_TABLEACCESS_DENIED_ERROR
REPLACE INTO t1 SELECT * FROM t2;
connection default;
GRANT INSERT, DELETE ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
EXPLAIN REPLACE INTO t1 VALUES (10);
REPLACE INTO t1 VALUES (10);
EXPLAIN REPLACE INTO t1 SELECT * FROM t2;
REPLACE INTO t1 SELECT * FROM t2;
connection default;
REVOKE ALL PRIVILEGES ON privtest_db.t1 FROM 'privtest'@'localhost';
connection con1;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN UPDATE t1 SET a = a + 1;
--error ER_TABLEACCESS_DENIED_ERROR
UPDATE t1 SET a = a + 1;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN UPDATE t1, t2 SET t1.a = t1.a + 1 WHERE t1.a = t2.a;
--error ER_TABLEACCESS_DENIED_ERROR
UPDATE t1, t2 SET t1.a = t1.a + 1 WHERE t1.a = t2.a;
connection default;
GRANT UPDATE ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
--error ER_COLUMNACCESS_DENIED_ERROR
EXPLAIN UPDATE t1 SET a = a + 1;
--error ER_COLUMNACCESS_DENIED_ERROR
UPDATE t1 SET a = a + 1;
--error ER_COLUMNACCESS_DENIED_ERROR
EXPLAIN UPDATE t1, t2 SET t1.a = t1.a + 1 WHERE t1.a = t2.a;
--error ER_COLUMNACCESS_DENIED_ERROR
UPDATE t1, t2 SET t1.a = t1.a + 1 WHERE t1.a = t2.a;
connection default;
REVOKE UPDATE ON privtest_db.t1 FROM 'privtest'@'localhost';
GRANT SELECT ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN UPDATE t1 SET a = a + 1;
--error ER_TABLEACCESS_DENIED_ERROR
UPDATE t1 SET a = a + 1;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN UPDATE t1, t2 SET t1.a = t1.a + 1 WHERE t1.a = t2.a;
--error ER_TABLEACCESS_DENIED_ERROR
UPDATE t1, t2 SET t1.a = t1.a + 1 WHERE t1.a = t2.a;
connection default;
GRANT UPDATE, SELECT ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
EXPLAIN UPDATE t1 SET a = a + 1;
UPDATE t1 SET a = a + 1;
EXPLAIN UPDATE t1, t2 SET t1.a = t1.a + 1 WHERE t1.a = t2.a;
UPDATE t1, t2 SET t1.a = t1.a + 1 WHERE t1.a = t2.a;
connection default;
REVOKE ALL PRIVILEGES ON privtest_db.t1 FROM 'privtest'@'localhost';
connection con1;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN DELETE FROM t1 WHERE a = 10;
--error ER_TABLEACCESS_DENIED_ERROR
DELETE FROM t1 WHERE a = 10;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN DELETE FROM t1 USING t1, t2 WHERE t1.a = t2.a;
--error ER_TABLEACCESS_DENIED_ERROR
DELETE FROM t1 USING t1, t2 WHERE t1.a = t2.a;
connection default;
GRANT DELETE ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
--error ER_COLUMNACCESS_DENIED_ERROR
EXPLAIN DELETE FROM t1 WHERE a = 10;
--error ER_COLUMNACCESS_DENIED_ERROR
DELETE FROM t1 WHERE a = 10;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN DELETE FROM t1 USING t1, t2 WHERE t1.a = t2.a;
--error ER_TABLEACCESS_DENIED_ERROR
DELETE FROM t1 USING t1, t2 WHERE t1.a = t2.a;
connection default;
REVOKE ALL PRIVILEGES ON privtest_db.t1 FROM 'privtest'@'localhost';
GRANT SELECT ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN DELETE FROM t1 WHERE a = 10;
--error ER_TABLEACCESS_DENIED_ERROR
DELETE FROM t1 WHERE a = 10;
--error ER_TABLEACCESS_DENIED_ERROR
EXPLAIN DELETE FROM t1 USING t1, t2 WHERE t1.a = t2.a;
--error ER_TABLEACCESS_DENIED_ERROR
DELETE FROM t1 USING t1, t2 WHERE t1.a = t2.a;
connection default;
REVOKE ALL PRIVILEGES ON privtest_db.t1 FROM 'privtest'@'localhost';
GRANT DELETE, SELECT ON privtest_db.t1 TO 'privtest'@'localhost';
connection con1;
EXPLAIN DELETE FROM t1 WHERE a = 10;
DELETE FROM t1 WHERE a = 10;
EXPLAIN DELETE FROM t1 USING t1, t2 WHERE t1.a = t2.a;
DELETE FROM t1 USING t1, t2 WHERE t1.a = t2.a;
# Views
connection default;
REVOKE ALL PRIVILEGES ON privtest_db.t1 FROM 'privtest'@'localhost';
CREATE VIEW privtest_db.v1 (a) AS SELECT a FROM privtest_db.t1;
GRANT SELECT, INSERT, UPDATE, DELETE ON privtest_db.v1 TO 'privtest'@'localhost';
connection con1;
--error ER_VIEW_NO_EXPLAIN
EXPLAIN SELECT * FROM v1;
SELECT * FROM v1;
--error ER_VIEW_NO_EXPLAIN
EXPLAIN INSERT INTO v1 VALUES (10);
INSERT INTO v1 VALUES (10);
--error ER_VIEW_NO_EXPLAIN
EXPLAIN INSERT INTO v1 SELECT * FROM t2;
INSERT INTO v1 SELECT * FROM t2;
--error ER_VIEW_NO_EXPLAIN
EXPLAIN REPLACE INTO v1 VALUES (10);
REPLACE INTO v1 VALUES (10);
--error ER_VIEW_NO_EXPLAIN
EXPLAIN REPLACE INTO v1 SELECT * FROM t2;
REPLACE INTO v1 SELECT * FROM t2;
--error ER_VIEW_NO_EXPLAIN
EXPLAIN UPDATE v1 SET a = a + 1;
UPDATE v1 SET a = a + 1;
--error ER_VIEW_NO_EXPLAIN
EXPLAIN UPDATE v1, t2 SET v1.a = v1.a + 1 WHERE v1.a = t2.a;
UPDATE v1, t2 SET v1.a = v1.a + 1 WHERE v1.a = t2.a;
--error ER_VIEW_NO_EXPLAIN
EXPLAIN DELETE FROM v1 WHERE a = 10;
DELETE FROM v1 WHERE a = 10;
--error ER_VIEW_NO_EXPLAIN
EXPLAIN DELETE FROM v1 USING v1, t2 WHERE v1.a = t2.a;
DELETE FROM v1 USING v1, t2 WHERE v1.a = t2.a;
connection default;
disconnect con1;
DROP USER 'privtest'@localhost;
USE test;
DROP DATABASE privtest_db;
set GLOBAL sql_mode=default;
set LOCAL sql_mode=default;
# Wait till we reached the initial number of concurrent sessions
--source include/wait_until_count_sessions.inc