mirror of
https://github.com/MariaDB/server.git
synced 2025-05-16 03:24:47 +03:00
151 lines
5.0 KiB
Plaintext
151 lines
5.0 KiB
Plaintext
#
|
|
# MDEV-14474: Create INFORMATION_SCHEMA.CHECK_CONSTRAINTS
|
|
#
|
|
CREATE user boo1;
|
|
GRANT select,create,alter,drop on foo.* to boo1;
|
|
SHOW GRANTS for boo1;
|
|
Grants for boo1@%
|
|
GRANT USAGE ON *.* TO `boo1`@`%`
|
|
GRANT SELECT, CREATE, DROP, ALTER ON `foo`.* TO `boo1`@`%`
|
|
CREATE user boo2;
|
|
create database foo;
|
|
CONNECT con1,localhost, boo1,, foo;
|
|
SET check_constraint_checks=1;
|
|
CREATE TABLE t0
|
|
(
|
|
t int, check (t>32) # table constraint
|
|
) ENGINE=myisam;
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def foo t0 CONSTRAINT_1 `t` > 32
|
|
ALTER TABLE t0
|
|
ADD CONSTRAINT CHK_t0_t CHECK(t<100);
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def foo t0 CHK_t0_t `t` < 100
|
|
def foo t0 CONSTRAINT_1 `t` > 32
|
|
ALTER TABLE t0
|
|
DROP CONSTRAINT CHK_t0_t;
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def foo t0 CONSTRAINT_1 `t` > 32
|
|
ALTER TABLE t0
|
|
ADD CONSTRAINT CHECK(t<50);
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def foo t0 CONSTRAINT_1 `t` > 32
|
|
def foo t0 CONSTRAINT_2 `t` < 50
|
|
CREATE TABLE t1
|
|
( t int CHECK(t>2), # field constraint
|
|
tt int,
|
|
CONSTRAINT CHECK (tt > 32), CONSTRAINT CHECK (tt <50),# autogenerated names table constraints
|
|
CONSTRAINT CHK_tt CHECK(tt<100) # named table constraint
|
|
) ENGINE=InnoDB;
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def foo t0 CONSTRAINT_1 `t` > 32
|
|
def foo t0 CONSTRAINT_2 `t` < 50
|
|
def foo t1 CHK_tt `tt` < 100
|
|
def foo t1 CONSTRAINT_1 `tt` > 32
|
|
def foo t1 CONSTRAINT_2 `tt` < 50
|
|
def foo t1 t `t` > 2
|
|
ALTER TABLE t1
|
|
DROP CONSTRAINT CHK_tt;
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def foo t0 CONSTRAINT_1 `t` > 32
|
|
def foo t0 CONSTRAINT_2 `t` < 50
|
|
def foo t1 CONSTRAINT_1 `tt` > 32
|
|
def foo t1 CONSTRAINT_2 `tt` < 50
|
|
def foo t1 t `t` > 2
|
|
CREATE TABLE t2
|
|
(
|
|
name VARCHAR(30) CHECK(CHAR_LENGTH(name)>2), #field constraint
|
|
start_date DATE,
|
|
end_date DATE,
|
|
CONSTRAINT CHK_dates CHECK(start_date IS NULL) #table constraint
|
|
)ENGINE=Innodb;
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def foo t0 CONSTRAINT_1 `t` > 32
|
|
def foo t0 CONSTRAINT_2 `t` < 50
|
|
def foo t1 CONSTRAINT_1 `tt` > 32
|
|
def foo t1 CONSTRAINT_2 `tt` < 50
|
|
def foo t1 t `t` > 2
|
|
def foo t2 CHK_dates `start_date` is null
|
|
def foo t2 name char_length(`name`) > 2
|
|
ALTER TABLE t1
|
|
ADD CONSTRAINT CHK_new_ CHECK(t>tt);
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def foo t0 CONSTRAINT_1 `t` > 32
|
|
def foo t0 CONSTRAINT_2 `t` < 50
|
|
def foo t1 CHK_new_ `t` > `tt`
|
|
def foo t1 CONSTRAINT_1 `tt` > 32
|
|
def foo t1 CONSTRAINT_2 `tt` < 50
|
|
def foo t1 t `t` > 2
|
|
def foo t2 CHK_dates `start_date` is null
|
|
def foo t2 name char_length(`name`) > 2
|
|
CREATE TABLE t3
|
|
(
|
|
a int,
|
|
b int check (b>0), # field constraint named 'b'
|
|
CONSTRAINT b check (b>10), # table constraint
|
|
# `CHECK_CLAUSE` should allow more then `var(64)` constraints
|
|
CONSTRAINT b1 check (b<123456789012345678901234567890123456789012345678901234567890123456789)
|
|
) ENGINE=InnoDB;
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def foo t0 CONSTRAINT_1 `t` > 32
|
|
def foo t0 CONSTRAINT_2 `t` < 50
|
|
def foo t1 CHK_new_ `t` > `tt`
|
|
def foo t1 CONSTRAINT_1 `tt` > 32
|
|
def foo t1 CONSTRAINT_2 `tt` < 50
|
|
def foo t1 t `t` > 2
|
|
def foo t2 CHK_dates `start_date` is null
|
|
def foo t2 name char_length(`name`) > 2
|
|
def foo t3 b `b` > 0
|
|
def foo t3 b `b` > 10
|
|
def foo t3 b1 `b` < 123456789012345678901234567890123456789012345678901234567890123456789
|
|
disconnect con1;
|
|
CONNECT con2, localhost, boo2,, test;
|
|
SELECT * from information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
disconnect con2;
|
|
CONNECT con1, localhost, boo1,,foo;
|
|
DROP TABLE t0;
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
DROP TABLE t3;
|
|
DROP DATABASE foo;
|
|
disconnect con1;
|
|
connection default;
|
|
DROP USER boo1;
|
|
DROP USER boo2;
|
|
#
|
|
# MDEV-18440: Information_schema.check_constraints possible data leak
|
|
#
|
|
CREATE USER foo;
|
|
CREATE DATABASE db;
|
|
USE db;
|
|
CREATE TABLE t1 (a int, b int, CONSTRAINT CHECK (b > 0));
|
|
INSERT INTO t1 VALUES (1, 2), (2, 3);
|
|
GRANT SELECT (a) ON t1 TO foo;
|
|
SHOW GRANTS FOR foo;
|
|
Grants for foo@%
|
|
GRANT USAGE ON *.* TO `foo`@`%`
|
|
GRANT SELECT (a) ON `db`.`t1` TO `foo`@`%`
|
|
SELECT * FROM information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
def db t1 CONSTRAINT_1 `b` > 0
|
|
CONNECT con1,localhost, foo,, db;
|
|
SELECT a FROM t1;
|
|
a
|
|
1
|
|
2
|
|
SELECT * FROM information_schema.check_constraints;
|
|
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA TABLE_NAME CONSTRAINT_NAME CHECK_CLAUSE
|
|
connection default;
|
|
DROP USER foo;
|
|
DROP DATABASE db;
|