mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge mysql.com:/home/stewart/Documents/MySQL/5.1/wl1359
into mysql.com:/home/stewart/Documents/MySQL/5.1/tmp_merge mysql-test/r/information_schema.result: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/handler.h: Auto merged sql/sql_show.cc: Auto merged
This commit is contained in:
@@ -11,8 +11,8 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3
|
|||||||
GRANT SELECT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
GRANT SELECT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
||||||
grant delete on mysqltest.* to mysqltest_1@localhost;
|
grant delete on mysqltest.* to mysqltest_1@localhost;
|
||||||
select * from mysql.user where user="mysqltest_1";
|
select * from mysql.user where user="mysqltest_1";
|
||||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
||||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N SPECIFIED EDH-RSA-DES-CBC3-SHA 0 0 0 0
|
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N N SPECIFIED EDH-RSA-DES-CBC3-SHA 0 0 0 0
|
||||||
show grants for mysqltest_1@localhost;
|
show grants for mysqltest_1@localhost;
|
||||||
Grants for mysqltest_1@localhost
|
Grants for mysqltest_1@localhost
|
||||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'
|
||||||
@@ -42,15 +42,15 @@ delete from mysql.user where user='mysqltest_1';
|
|||||||
flush privileges;
|
flush privileges;
|
||||||
grant usage on *.* to mysqltest_1@localhost with max_queries_per_hour 10;
|
grant usage on *.* to mysqltest_1@localhost with max_queries_per_hour 10;
|
||||||
select * from mysql.user where user="mysqltest_1";
|
select * from mysql.user where user="mysqltest_1";
|
||||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
||||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N 10 0 0 0
|
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N N 10 0 0 0
|
||||||
show grants for mysqltest_1@localhost;
|
show grants for mysqltest_1@localhost;
|
||||||
Grants for mysqltest_1@localhost
|
Grants for mysqltest_1@localhost
|
||||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10
|
||||||
grant usage on *.* to mysqltest_1@localhost with max_updates_per_hour 20 max_connections_per_hour 30;
|
grant usage on *.* to mysqltest_1@localhost with max_updates_per_hour 20 max_connections_per_hour 30;
|
||||||
select * from mysql.user where user="mysqltest_1";
|
select * from mysql.user where user="mysqltest_1";
|
||||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
|
||||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N 10 20 30 0
|
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N N N N N N N N 10 20 30 0
|
||||||
show grants for mysqltest_1@localhost;
|
show grants for mysqltest_1@localhost;
|
||||||
Grants for mysqltest_1@localhost
|
Grants for mysqltest_1@localhost
|
||||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 20 MAX_CONNECTIONS_PER_HOUR 30
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' WITH MAX_QUERIES_PER_HOUR 10 MAX_UPDATES_PER_HOUR 20 MAX_CONNECTIONS_PER_HOUR 30
|
||||||
@@ -85,7 +85,7 @@ revoke LOCK TABLES, ALTER on mysqltest.* from mysqltest_1@localhost;
|
|||||||
show grants for mysqltest_1@localhost;
|
show grants for mysqltest_1@localhost;
|
||||||
Grants for mysqltest_1@localhost
|
Grants for mysqltest_1@localhost
|
||||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
||||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT ON `mysqltest`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
|
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, CREATE TEMPORARY TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mysqltest`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
|
||||||
revoke all privileges on mysqltest.* from mysqltest_1@localhost;
|
revoke all privileges on mysqltest.* from mysqltest_1@localhost;
|
||||||
delete from mysql.user where user='mysqltest_1';
|
delete from mysql.user where user='mysqltest_1';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
@@ -465,6 +465,7 @@ Show databases Server Admin To see all databases with SHOW DATABASES
|
|||||||
Show view Tables To see views with SHOW CREATE VIEW
|
Show view Tables To see views with SHOW CREATE VIEW
|
||||||
Shutdown Server Admin To shut down the server
|
Shutdown Server Admin To shut down the server
|
||||||
Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
|
Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
|
||||||
|
Trigger Tables To use triggers
|
||||||
Update Tables To update existing rows
|
Update Tables To update existing rows
|
||||||
Usage Server Admin No privileges - allow connect only
|
Usage Server Admin No privileges - allow connect only
|
||||||
create database mysqltest;
|
create database mysqltest;
|
||||||
@@ -491,8 +492,8 @@ SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
|
|||||||
PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
|
PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
|
||||||
= '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
|
= '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
|
||||||
TABLE_SCHEMA TABLE_NAME PRIVILEGES
|
TABLE_SCHEMA TABLE_NAME PRIVILEGES
|
||||||
mysqltest dummytable ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, UPDATE
|
mysqltest dummytable ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
|
||||||
mysqltest dummyview ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, UPDATE
|
mysqltest dummyview ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
|
||||||
FLUSH PRIVILEGES;
|
FLUSH PRIVILEGES;
|
||||||
SHOW GRANTS FOR dummy@localhost;
|
SHOW GRANTS FOR dummy@localhost;
|
||||||
Grants for dummy@localhost
|
Grants for dummy@localhost
|
||||||
@@ -503,8 +504,8 @@ SELECT TABLE_SCHEMA, TABLE_NAME, GROUP_CONCAT(PRIVILEGE_TYPE ORDER BY
|
|||||||
PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
|
PRIVILEGE_TYPE SEPARATOR ', ') AS PRIVILEGES FROM TABLE_PRIVILEGES WHERE GRANTEE
|
||||||
= '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
|
= '\'dummy\'@\'localhost\'' GROUP BY TABLE_SCHEMA, TABLE_NAME;
|
||||||
TABLE_SCHEMA TABLE_NAME PRIVILEGES
|
TABLE_SCHEMA TABLE_NAME PRIVILEGES
|
||||||
mysqltest dummytable ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, UPDATE
|
mysqltest dummytable ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
|
||||||
mysqltest dummyview ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, UPDATE
|
mysqltest dummyview ALTER, CREATE, CREATE VIEW, DELETE, DROP, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, UPDATE
|
||||||
SHOW FIELDS FROM mysql.tables_priv;
|
SHOW FIELDS FROM mysql.tables_priv;
|
||||||
Field Type Null Key Default Extra
|
Field Type Null Key Default Extra
|
||||||
Host char(60) NO PRI
|
Host char(60) NO PRI
|
||||||
@@ -513,7 +514,7 @@ User char(16) NO PRI
|
|||||||
Table_name char(64) NO PRI
|
Table_name char(64) NO PRI
|
||||||
Grantor char(77) NO MUL
|
Grantor char(77) NO MUL
|
||||||
Timestamp timestamp YES CURRENT_TIMESTAMP
|
Timestamp timestamp YES CURRENT_TIMESTAMP
|
||||||
Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view') NO
|
Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') NO
|
||||||
Column_priv set('Select','Insert','Update','References') NO
|
Column_priv set('Select','Insert','Update','References') NO
|
||||||
use test;
|
use test;
|
||||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM dummy@localhost;
|
REVOKE ALL PRIVILEGES, GRANT OPTION FROM dummy@localhost;
|
||||||
@@ -594,7 +595,7 @@ delete from tables_priv where host = '' and user = 'mysqltest_1';
|
|||||||
flush privileges;
|
flush privileges;
|
||||||
set @user123="non-existent";
|
set @user123="non-existent";
|
||||||
select * from mysql.db where user=@user123;
|
select * from mysql.db where user=@user123;
|
||||||
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv
|
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv Trigger_priv
|
||||||
set names koi8r;
|
set names koi8r;
|
||||||
create database <20><>;
|
create database <20><>;
|
||||||
grant select on <20><>.* to root@localhost;
|
grant select on <20><>.* to root@localhost;
|
||||||
|
@@ -407,6 +407,7 @@ GRANTEE TABLE_CATALOG TABLE_SCHEMA PRIVILEGE_TYPE IS_GRANTABLE
|
|||||||
'mysqltest_1'@'localhost' NULL test CREATE ROUTINE YES
|
'mysqltest_1'@'localhost' NULL test CREATE ROUTINE YES
|
||||||
'mysqltest_1'@'localhost' NULL test ALTER ROUTINE YES
|
'mysqltest_1'@'localhost' NULL test ALTER ROUTINE YES
|
||||||
'mysqltest_1'@'localhost' NULL test EVENT YES
|
'mysqltest_1'@'localhost' NULL test EVENT YES
|
||||||
|
'mysqltest_1'@'localhost' NULL test TRIGGER YES
|
||||||
select * from information_schema.TABLE_PRIVILEGES where grantee like '%mysqltest_1%';
|
select * from information_schema.TABLE_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||||
'mysqltest_1'@'localhost' NULL test t1 SELECT NO
|
'mysqltest_1'@'localhost' NULL test t1 SELECT NO
|
||||||
|
@@ -6,8 +6,8 @@ Grants for mysqltest_1@localhost
|
|||||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
||||||
GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
||||||
select * from db where user = 'mysqltest_1';
|
select * from db where user = 'mysqltest_1';
|
||||||
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv
|
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv Trigger_priv
|
||||||
localhost mysqltest mysqltest_1 Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y
|
localhost mysqltest mysqltest_1 Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y
|
||||||
update db set db = 'MYSQLtest' where db = 'mysqltest' and user = 'mysqltest_1' and host = 'localhost';
|
update db set db = 'MYSQLtest' where db = 'mysqltest' and user = 'mysqltest_1' and host = 'localhost';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
show grants for mysqltest_1@localhost;
|
show grants for mysqltest_1@localhost;
|
||||||
@@ -15,8 +15,8 @@ Grants for mysqltest_1@localhost
|
|||||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
||||||
GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
GRANT ALL PRIVILEGES ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
||||||
select * from db where user = 'mysqltest_1';
|
select * from db where user = 'mysqltest_1';
|
||||||
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv
|
Host Db User Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Grant_priv References_priv Index_priv Alter_priv Create_tmp_table_priv Lock_tables_priv Create_view_priv Show_view_priv Create_routine_priv Alter_routine_priv Execute_priv Event_priv Trigger_priv
|
||||||
localhost MYSQLtest mysqltest_1 Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y
|
localhost MYSQLtest mysqltest_1 Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y
|
||||||
delete from db where db = 'MYSQLtest' and user = 'mysqltest_1' and host = 'localhost';
|
delete from db where db = 'MYSQLtest' and user = 'mysqltest_1' and host = 'localhost';
|
||||||
flush privileges;
|
flush privileges;
|
||||||
drop user mysqltest_1@localhost;
|
drop user mysqltest_1@localhost;
|
||||||
|
@@ -20,9 +20,6 @@ master-bin.000001 # Query # # use `mysqltest`; create table t1 (a int primary ke
|
|||||||
master-bin.000001 # Query # # use `test`; create table t2 (a int primary key) engine=ndb
|
master-bin.000001 # Query # # use `test`; create table t2 (a int primary key) engine=ndb
|
||||||
reset master;
|
reset master;
|
||||||
reset master;
|
reset master;
|
||||||
use mysqltest;
|
|
||||||
drop table test.t2;
|
|
||||||
create table t2 (a int primary key) engine=ndb;
|
|
||||||
alter table t2 add column (b int);
|
alter table t2 add column (b int);
|
||||||
show binlog events from 102;
|
show binlog events from 102;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
@@ -30,53 +27,36 @@ master-bin1.000001 # Query # # BEGIN
|
|||||||
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
||||||
master-bin1.000001 # Write_rows # #
|
master-bin1.000001 # Write_rows # #
|
||||||
master-bin1.000001 # Query # # COMMIT
|
master-bin1.000001 # Query # # COMMIT
|
||||||
master-bin1.000001 # Query # # use `mysqltest`; drop table test.t2
|
master-bin1.000001 # Query # # use `test`; alter table t2 add column (b int)
|
||||||
master-bin1.000001 # Query # # use `mysqltest`; create table t2 (a int primary key) engine=ndb
|
|
||||||
master-bin1.000001 # Query # # BEGIN
|
|
||||||
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
|
||||||
master-bin1.000001 # Write_rows # #
|
|
||||||
master-bin1.000001 # Query # # COMMIT
|
|
||||||
master-bin1.000001 # Query # # use `mysqltest`; alter table t2 add column (b int)
|
|
||||||
reset master;
|
reset master;
|
||||||
reset master;
|
reset master;
|
||||||
ALTER DATABASE mysqltest CHARACTER SET latin1;
|
ALTER DATABASE mysqltest CHARACTER SET latin1;
|
||||||
insert into t1 values (1);
|
drop table mysqltest.t1;
|
||||||
drop table t1;
|
|
||||||
show binlog events from 102;
|
show binlog events from 102;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin.000001 # Query # # ALTER DATABASE mysqltest CHARACTER SET latin1
|
master-bin.000001 # Query # # ALTER DATABASE mysqltest CHARACTER SET latin1
|
||||||
master-bin.000001 # Query # # BEGIN
|
master-bin.000001 # Query # # BEGIN
|
||||||
master-bin.000001 # Table_map # # cluster_replication.apply_status
|
master-bin.000001 # Table_map # # cluster_replication.apply_status
|
||||||
master-bin.000001 # Write_rows # #
|
master-bin.000001 # Write_rows # #
|
||||||
master-bin.000001 # Table_map # # mysqltest.t1
|
|
||||||
master-bin.000001 # Write_rows # #
|
|
||||||
master-bin.000001 # Query # # COMMIT
|
|
||||||
master-bin.000001 # Query # # BEGIN
|
|
||||||
master-bin.000001 # Table_map # # cluster_replication.apply_status
|
|
||||||
master-bin.000001 # Write_rows # #
|
|
||||||
master-bin.000001 # Query # # COMMIT
|
master-bin.000001 # Query # # COMMIT
|
||||||
master-bin.000001 # Query # # use `mysqltest`; drop table `t1`
|
master-bin.000001 # Query # # use `mysqltest`; drop table `t1`
|
||||||
reset master;
|
reset master;
|
||||||
reset master;
|
reset master;
|
||||||
|
use test;
|
||||||
insert into t2 values (1,2);
|
insert into t2 values (1,2);
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
use test;
|
|
||||||
create table t1 (a int primary key) engine=ndb;
|
create table t1 (a int primary key) engine=ndb;
|
||||||
use test;
|
|
||||||
show binlog events from 102;
|
show binlog events from 102;
|
||||||
Log_name Pos Event_type Server_id End_log_pos Info
|
Log_name Pos Event_type Server_id End_log_pos Info
|
||||||
master-bin1.000001 # Query # # BEGIN
|
master-bin1.000001 # Query # # BEGIN
|
||||||
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
||||||
master-bin1.000001 # Write_rows # #
|
master-bin1.000001 # Write_rows # #
|
||||||
master-bin1.000001 # Table_map # # mysqltest.t2
|
master-bin1.000001 # Table_map # # test.t2
|
||||||
master-bin1.000001 # Write_rows # #
|
|
||||||
master-bin1.000001 # Query # # COMMIT
|
|
||||||
master-bin1.000001 # Query # # BEGIN
|
|
||||||
master-bin1.000001 # Table_map # # cluster_replication.apply_status
|
|
||||||
master-bin1.000001 # Write_rows # #
|
master-bin1.000001 # Write_rows # #
|
||||||
master-bin1.000001 # Query # # COMMIT
|
master-bin1.000001 # Query # # COMMIT
|
||||||
master-bin1.000001 # Query # # drop database mysqltest
|
master-bin1.000001 # Query # # drop database mysqltest
|
||||||
master-bin1.000001 # Query # # use `test`; create table t1 (a int primary key) engine=ndb
|
master-bin1.000001 # Query # # use `test`; create table t1 (a int primary key) engine=ndb
|
||||||
|
drop table t2;
|
||||||
reset master;
|
reset master;
|
||||||
reset master;
|
reset master;
|
||||||
CREATE LOGFILE GROUP lg1
|
CREATE LOGFILE GROUP lg1
|
||||||
|
@@ -21,6 +21,14 @@ CREATE TABLE t1
|
|||||||
(pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL)
|
(pk1 INT NOT NULL PRIMARY KEY, b INT NOT NULL, c INT NOT NULL)
|
||||||
TABLESPACE ts1 STORAGE DISK
|
TABLESPACE ts1 STORAGE DISK
|
||||||
ENGINE=NDB;
|
ENGINE=NDB;
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`pk1` int(11) NOT NULL,
|
||||||
|
`b` int(11) NOT NULL,
|
||||||
|
`c` int(11) NOT NULL,
|
||||||
|
PRIMARY KEY (`pk1`)
|
||||||
|
) TABLESPACE ts1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
||||||
INSERT INTO t1 VALUES (0, 0, 0);
|
INSERT INTO t1 VALUES (0, 0, 0);
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
pk1 b c
|
pk1 b c
|
||||||
|
@@ -226,7 +226,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
`b` int(11) NOT NULL,
|
`b` int(11) NOT NULL,
|
||||||
`c` int(11) NOT NULL,
|
`c` int(11) NOT NULL,
|
||||||
PRIMARY KEY (`pk1`)
|
PRIMARY KEY (`pk1`)
|
||||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
) TABLESPACE table_space1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
||||||
ALTER TABLE test.t2 TABLESPACE table_space1 STORAGE DISK
|
ALTER TABLE test.t2 TABLESPACE table_space1 STORAGE DISK
|
||||||
ENGINE=NDB;
|
ENGINE=NDB;
|
||||||
SHOW CREATE TABLE test.t2;
|
SHOW CREATE TABLE test.t2;
|
||||||
@@ -236,7 +236,7 @@ t2 CREATE TABLE `t2` (
|
|||||||
`b2` int(11) NOT NULL,
|
`b2` int(11) NOT NULL,
|
||||||
`c2` int(11) NOT NULL,
|
`c2` int(11) NOT NULL,
|
||||||
PRIMARY KEY (`pk2`)
|
PRIMARY KEY (`pk2`)
|
||||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
) TABLESPACE table_space1 STORAGE DISK ENGINE=ndbcluster DEFAULT CHARSET=latin1 PARTITION BY KEY ()
|
||||||
ALTER TABLE test.t1 ENGINE=NDBCLUSTER;
|
ALTER TABLE test.t1 ENGINE=NDBCLUSTER;
|
||||||
SHOW CREATE TABLE test.t1;
|
SHOW CREATE TABLE test.t1;
|
||||||
Table Create Table
|
Table Create Table
|
||||||
|
@@ -533,13 +533,13 @@ SET @aux= "SELECT COUNT(*)
|
|||||||
prepare my_stmt from @aux;
|
prepare my_stmt from @aux;
|
||||||
execute my_stmt;
|
execute my_stmt;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
38
|
39
|
||||||
execute my_stmt;
|
execute my_stmt;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
38
|
39
|
||||||
execute my_stmt;
|
execute my_stmt;
|
||||||
COUNT(*)
|
COUNT(*)
|
||||||
38
|
39
|
||||||
deallocate prepare my_stmt;
|
deallocate prepare my_stmt;
|
||||||
drop procedure if exists p1|
|
drop procedure if exists p1|
|
||||||
drop table if exists t1|
|
drop table if exists t1|
|
||||||
|
@@ -2197,6 +2197,7 @@ Show databases Server Admin To see all databases with SHOW DATABASES
|
|||||||
Show view Tables To see views with SHOW CREATE VIEW
|
Show view Tables To see views with SHOW CREATE VIEW
|
||||||
Shutdown Server Admin To shut down the server
|
Shutdown Server Admin To shut down the server
|
||||||
Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
|
Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
|
||||||
|
Trigger Tables To use triggers
|
||||||
Update Tables To update existing rows
|
Update Tables To update existing rows
|
||||||
Usage Server Admin No privileges - allow connect only
|
Usage Server Admin No privileges - allow connect only
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
@@ -2250,6 +2251,7 @@ Show databases Server Admin To see all databases with SHOW DATABASES
|
|||||||
Show view Tables To see views with SHOW CREATE VIEW
|
Show view Tables To see views with SHOW CREATE VIEW
|
||||||
Shutdown Server Admin To shut down the server
|
Shutdown Server Admin To shut down the server
|
||||||
Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
|
Super Server Admin To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.
|
||||||
|
Trigger Tables To use triggers
|
||||||
Update Tables To update existing rows
|
Update Tables To update existing rows
|
||||||
Usage Server Admin No privileges - allow connect only
|
Usage Server Admin No privileges - allow connect only
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
|
@@ -7,8 +7,7 @@ DROP DATABASE IF EXISTS mysqltest_db1;
|
|||||||
CREATE DATABASE mysqltest_db1;
|
CREATE DATABASE mysqltest_db1;
|
||||||
CREATE USER mysqltest_dfn@localhost;
|
CREATE USER mysqltest_dfn@localhost;
|
||||||
CREATE USER mysqltest_inv@localhost;
|
CREATE USER mysqltest_inv@localhost;
|
||||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
GRANT CREATE, TRIGGER ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||||
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
|
||||||
|
|
||||||
---> connection: wl2818_definer_con
|
---> connection: wl2818_definer_con
|
||||||
CREATE TABLE t1(num_value INT);
|
CREATE TABLE t1(num_value INT);
|
||||||
|
@@ -7,12 +7,57 @@ DROP DATABASE IF EXISTS mysqltest_db1;
|
|||||||
CREATE DATABASE mysqltest_db1;
|
CREATE DATABASE mysqltest_db1;
|
||||||
CREATE USER mysqltest_dfn@localhost;
|
CREATE USER mysqltest_dfn@localhost;
|
||||||
CREATE USER mysqltest_inv@localhost;
|
CREATE USER mysqltest_inv@localhost;
|
||||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
|
||||||
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||||
|
|
||||||
---> connection: wl2818_definer_con
|
---> connection: wl2818_definer_con
|
||||||
CREATE TABLE t1(num_value INT);
|
CREATE TABLE t1(num_value INT);
|
||||||
CREATE TABLE t2(user_str TEXT);
|
CREATE TABLE t2(user_str TEXT);
|
||||||
|
|
||||||
|
---> connection: default
|
||||||
|
GRANT INSERT, DELETE ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||||
|
GRANT INSERT, DELETE 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;
|
||||||
|
DELETE FROM t1;
|
||||||
|
DELETE FROM t2;
|
||||||
|
|
||||||
|
---> connection: default
|
||||||
|
REVOKE SUPER ON *.* FROM mysqltest_dfn@localhost;
|
||||||
|
|
||||||
|
---> connection: wl2818_definer_con
|
||||||
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
INSERT INTO t2 VALUES(CURRENT_USER());
|
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||||
@@ -175,6 +220,17 @@ CREATE DEFINER='mysqltest_inv'@'localhost'
|
|||||||
TRIGGER trg1 BEFORE INSERT ON t1
|
TRIGGER trg1 BEFORE INSERT ON t1
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
SET @new_sum = 0;
|
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'
|
CREATE DEFINER='mysqltest_nonexs'@'localhost'
|
||||||
TRIGGER trg2 AFTER INSERT ON t1
|
TRIGGER trg2 AFTER INSERT ON t1
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
@@ -182,7 +238,6 @@ SET @new_sum = 0;
|
|||||||
Warnings:
|
Warnings:
|
||||||
Note 1449 There is no 'mysqltest_nonexs'@'localhost' registered
|
Note 1449 There is no 'mysqltest_nonexs'@'localhost' registered
|
||||||
INSERT INTO t1 VALUES(6);
|
INSERT INTO t1 VALUES(6);
|
||||||
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
|
||||||
SHOW TRIGGERS;
|
SHOW TRIGGERS;
|
||||||
Trigger Event Table Statement Timing Created sql_mode Definer
|
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||||
trg1 INSERT t1 SET @new_sum = 0 BEFORE NULL mysqltest_inv@localhost
|
trg1 INSERT t1 SET @new_sum = 0 BEFORE NULL mysqltest_inv@localhost
|
||||||
|
@@ -48,10 +48,6 @@ reset master;
|
|||||||
reset master;
|
reset master;
|
||||||
|
|
||||||
--connection server2
|
--connection server2
|
||||||
use mysqltest;
|
|
||||||
#alter table test.t2 rename t2;
|
|
||||||
drop table test.t2;
|
|
||||||
create table t2 (a int primary key) engine=ndb;
|
|
||||||
alter table t2 add column (b int);
|
alter table t2 add column (b int);
|
||||||
|
|
||||||
--connections server1
|
--connections server1
|
||||||
@@ -71,8 +67,7 @@ ALTER DATABASE mysqltest CHARACTER SET latin1;
|
|||||||
|
|
||||||
# drop table and drop should come after data events
|
# drop table and drop should come after data events
|
||||||
--connection server2
|
--connection server2
|
||||||
insert into t1 values (1);
|
drop table mysqltest.t1;
|
||||||
drop table t1;
|
|
||||||
|
|
||||||
--connection server1
|
--connection server1
|
||||||
--replace_column 2 # 4 # 5 #
|
--replace_column 2 # 4 # 5 #
|
||||||
@@ -86,16 +81,18 @@ reset master;
|
|||||||
reset master;
|
reset master;
|
||||||
|
|
||||||
--connection server1
|
--connection server1
|
||||||
|
use test;
|
||||||
insert into t2 values (1,2);
|
insert into t2 values (1,2);
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
use test;
|
|
||||||
create table t1 (a int primary key) engine=ndb;
|
create table t1 (a int primary key) engine=ndb;
|
||||||
|
|
||||||
--connection server2
|
--connection server2
|
||||||
use test;
|
|
||||||
--replace_column 2 # 4 # 5 #
|
--replace_column 2 # 4 # 5 #
|
||||||
--eval show binlog events from $binlog_start
|
--eval show binlog events from $binlog_start
|
||||||
|
|
||||||
|
--connection server2
|
||||||
|
drop table t2;
|
||||||
|
|
||||||
# logfile groups and table spaces
|
# logfile groups and table spaces
|
||||||
--connection server1
|
--connection server1
|
||||||
reset master;
|
reset master;
|
||||||
|
@@ -54,6 +54,8 @@ CREATE TABLE t1
|
|||||||
TABLESPACE ts1 STORAGE DISK
|
TABLESPACE ts1 STORAGE DISK
|
||||||
ENGINE=NDB;
|
ENGINE=NDB;
|
||||||
|
|
||||||
|
SHOW CREATE TABLE t1;
|
||||||
|
|
||||||
INSERT INTO t1 VALUES (0, 0, 0);
|
INSERT INTO t1 VALUES (0, 0, 0);
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
|
|
||||||
|
@@ -35,8 +35,7 @@ CREATE DATABASE mysqltest_db1;
|
|||||||
CREATE USER mysqltest_dfn@localhost;
|
CREATE USER mysqltest_dfn@localhost;
|
||||||
CREATE USER mysqltest_inv@localhost;
|
CREATE USER mysqltest_inv@localhost;
|
||||||
|
|
||||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
GRANT CREATE, TRIGGER ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||||
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Create a table and the first trigger.
|
# Create a table and the first trigger.
|
||||||
|
@@ -44,9 +44,124 @@ CREATE DATABASE mysqltest_db1;
|
|||||||
CREATE USER mysqltest_dfn@localhost;
|
CREATE USER mysqltest_dfn@localhost;
|
||||||
CREATE USER mysqltest_inv@localhost;
|
CREATE USER mysqltest_inv@localhost;
|
||||||
|
|
||||||
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
|
||||||
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
||||||
|
|
||||||
|
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||||
|
--connection wl2818_definer_con
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: wl2818_definer_con
|
||||||
|
|
||||||
|
CREATE TABLE t1(num_value INT);
|
||||||
|
CREATE TABLE t2(user_str TEXT);
|
||||||
|
|
||||||
|
--disconnect wl2818_definer_con
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: default
|
||||||
|
|
||||||
|
GRANT INSERT, DELETE ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||||
|
GRANT INSERT, DELETE ON mysqltest_db1.t2 TO mysqltest_dfn@localhost;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check that the user must have TRIGGER privilege to create a trigger.
|
||||||
|
#
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: default
|
||||||
|
|
||||||
|
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||||
|
|
||||||
|
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||||
|
--connection wl2818_definer_con
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: wl2818_definer_con
|
||||||
|
|
||||||
|
--error ER_TABLEACCESS_DENIED_ERROR
|
||||||
|
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||||
|
FOR EACH ROW
|
||||||
|
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||||
|
|
||||||
|
--disconnect wl2818_definer_con
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check that the user must have TRIGGER privilege to drop a trigger.
|
||||||
|
#
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: default
|
||||||
|
|
||||||
|
GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||||
|
|
||||||
|
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||||
|
--connection wl2818_definer_con
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: wl2818_definer_con
|
||||||
|
|
||||||
|
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||||
|
FOR EACH ROW
|
||||||
|
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||||
|
|
||||||
|
--disconnect wl2818_definer_con
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: default
|
||||||
|
|
||||||
|
REVOKE TRIGGER ON mysqltest_db1.t1 FROM mysqltest_dfn@localhost;
|
||||||
|
|
||||||
|
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||||
|
--connection wl2818_definer_con
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: wl2818_definer_con
|
||||||
|
|
||||||
|
--error ER_TABLEACCESS_DENIED_ERROR
|
||||||
|
DROP TRIGGER trg1;
|
||||||
|
|
||||||
|
--disconnect wl2818_definer_con
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check that the definer must have TRIGGER privilege to activate a trigger.
|
||||||
|
#
|
||||||
|
|
||||||
|
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||||
|
--connection wl2818_definer_con
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: wl2818_definer_con
|
||||||
|
|
||||||
|
--error ER_TABLEACCESS_DENIED_ERROR
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
|
||||||
|
--disconnect wl2818_definer_con
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: default
|
||||||
|
|
||||||
|
GRANT TRIGGER ON mysqltest_db1.t1 TO mysqltest_dfn@localhost;
|
||||||
|
|
||||||
|
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||||
|
--connection wl2818_definer_con
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: wl2818_definer_con
|
||||||
|
|
||||||
|
INSERT INTO t1 VALUES(0);
|
||||||
|
|
||||||
|
# Cleanup for further tests.
|
||||||
|
DROP TRIGGER trg1;
|
||||||
|
DELETE FROM t1;
|
||||||
|
DELETE FROM t2;
|
||||||
|
|
||||||
|
--disconnect wl2818_definer_con
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: default
|
||||||
|
|
||||||
|
REVOKE SUPER ON *.* FROM mysqltest_dfn@localhost;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Check that triggers are executed under the authorization of the definer:
|
# Check that triggers are executed under the authorization of the definer:
|
||||||
# - create two tables under "definer";
|
# - create two tables under "definer";
|
||||||
@@ -64,9 +179,6 @@ GRANT CREATE ON mysqltest_db1.* TO mysqltest_dfn@localhost;
|
|||||||
--echo
|
--echo
|
||||||
--echo ---> connection: wl2818_definer_con
|
--echo ---> connection: wl2818_definer_con
|
||||||
|
|
||||||
CREATE TABLE t1(num_value INT);
|
|
||||||
CREATE TABLE t2(user_str TEXT);
|
|
||||||
|
|
||||||
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
CREATE TRIGGER trg1 AFTER INSERT ON t1
|
||||||
FOR EACH ROW
|
FOR EACH ROW
|
||||||
INSERT INTO t2 VALUES(CURRENT_USER());
|
INSERT INTO t2 VALUES(CURRENT_USER());
|
||||||
@@ -362,10 +474,6 @@ DELETE FROM t1;
|
|||||||
#
|
#
|
||||||
# Check DEFINER clause of CREATE TRIGGER statement.
|
# Check DEFINER clause of CREATE TRIGGER statement.
|
||||||
#
|
#
|
||||||
# NOTE: there is no dedicated TRIGGER privilege for CREATE TRIGGER statement.
|
|
||||||
# SUPER privilege is used instead. I.e., if one invokes CREATE TRIGGER, it should
|
|
||||||
# have SUPER privilege, so this test is meaningless right now.
|
|
||||||
#
|
|
||||||
# - Check that SUPER privilege required to create a trigger with different
|
# - Check that SUPER privilege required to create a trigger with different
|
||||||
# definer:
|
# definer:
|
||||||
# - try to create a trigger with DEFINER="definer@localhost" under
|
# - try to create a trigger with DEFINER="definer@localhost" under
|
||||||
@@ -391,7 +499,26 @@ use mysqltest_db1;
|
|||||||
DROP TRIGGER trg1;
|
DROP TRIGGER trg1;
|
||||||
|
|
||||||
# Check that SUPER is required to specify different DEFINER.
|
# Check that SUPER is required to specify different DEFINER.
|
||||||
# NOTE: meaningless at the moment
|
|
||||||
|
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
||||||
|
CREATE DEFINER='mysqltest_inv'@'localhost'
|
||||||
|
TRIGGER trg1 BEFORE INSERT ON t1
|
||||||
|
FOR EACH ROW
|
||||||
|
SET @new_sum = 0;
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: default
|
||||||
|
|
||||||
|
use mysqltest_db1;
|
||||||
|
|
||||||
|
GRANT SUPER ON *.* TO mysqltest_dfn@localhost;
|
||||||
|
|
||||||
|
--disconnect wl2818_definer_con
|
||||||
|
--connect (wl2818_definer_con,localhost,mysqltest_dfn,,mysqltest_db1)
|
||||||
|
--connection wl2818_definer_con
|
||||||
|
--echo
|
||||||
|
--echo ---> connection: wl2818_definer_con
|
||||||
|
|
||||||
CREATE DEFINER='mysqltest_inv'@'localhost'
|
CREATE DEFINER='mysqltest_inv'@'localhost'
|
||||||
TRIGGER trg1 BEFORE INSERT ON t1
|
TRIGGER trg1 BEFORE INSERT ON t1
|
||||||
@@ -407,7 +534,10 @@ CREATE DEFINER='mysqltest_nonexs'@'localhost'
|
|||||||
|
|
||||||
# Check that trg2 will not be activated.
|
# Check that trg2 will not be activated.
|
||||||
|
|
||||||
--error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
# --error ER_SPECIFIC_ACCESS_DENIED_ERROR
|
||||||
|
#
|
||||||
|
# TODO: Due to the BUG#13198(SP executes if definer does not exist) the
|
||||||
|
# following statement does not fail as it should.
|
||||||
INSERT INTO t1 VALUES(6);
|
INSERT INTO t1 VALUES(6);
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@@ -75,14 +75,15 @@ then
|
|||||||
c_d="$c_d Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
c_d="$c_d Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
c_d="$c_d Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
c_d="$c_d Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
c_d="$c_d Event_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
c_d="$c_d Event_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
|
c_d="$c_d Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
|
c_d="$c_d PRIMARY KEY Host (Host,Db,User),"
|
||||||
c_d="$c_d KEY User (User)"
|
c_d="$c_d KEY User (User)"
|
||||||
c_d="$c_d ) engine=MyISAM"
|
c_d="$c_d ) engine=MyISAM"
|
||||||
c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
|
c_d="$c_d CHARACTER SET utf8 COLLATE utf8_bin"
|
||||||
c_d="$c_d comment='Database privileges';"
|
c_d="$c_d comment='Database privileges';"
|
||||||
|
|
||||||
i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y');
|
i_d="INSERT INTO db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y');
|
||||||
INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y');"
|
INSERT INTO db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y');"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test ! -f $mdata/host.frm
|
if test ! -f $mdata/host.frm
|
||||||
@@ -111,6 +112,7 @@ then
|
|||||||
c_h="$c_h Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
c_h="$c_h Create_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
c_h="$c_h Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
c_h="$c_h Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
c_h="$c_h Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
c_h="$c_h Execute_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
|
c_h="$c_h Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
c_h="$c_h PRIMARY KEY Host (Host,Db)"
|
c_h="$c_h PRIMARY KEY Host (Host,Db)"
|
||||||
c_h="$c_h ) engine=MyISAM"
|
c_h="$c_h ) engine=MyISAM"
|
||||||
c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
|
c_h="$c_h CHARACTER SET utf8 COLLATE utf8_bin"
|
||||||
@@ -154,6 +156,7 @@ then
|
|||||||
c_u="$c_u Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
c_u="$c_u Alter_routine_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
c_u="$c_u Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
c_u="$c_u Create_user_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
c_u="$c_u Event_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
c_u="$c_u Event_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
|
c_u="$c_u Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL,"
|
||||||
c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
c_u="$c_u ssl_type enum('','ANY','X509', 'SPECIFIED') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
||||||
c_u="$c_u ssl_cipher BLOB NOT NULL,"
|
c_u="$c_u ssl_cipher BLOB NOT NULL,"
|
||||||
c_u="$c_u x509_issuer BLOB NOT NULL,"
|
c_u="$c_u x509_issuer BLOB NOT NULL,"
|
||||||
@@ -169,22 +172,22 @@ then
|
|||||||
|
|
||||||
if test "$1" = "test"
|
if test "$1" = "test"
|
||||||
then
|
then
|
||||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||||
REPLACE INTO user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
REPLACE INTO user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||||
INSERT INTO user (host,user) values ('localhost','');
|
INSERT INTO user (host,user) values ('localhost','');
|
||||||
INSERT INTO user (host,user) values ('$hostname','');"
|
INSERT INTO user (host,user) values ('$hostname','');"
|
||||||
else
|
else
|
||||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);"
|
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);"
|
||||||
if test "$windows" = "0"
|
if test "$windows" = "0"
|
||||||
then
|
then
|
||||||
i_u="$i_u
|
i_u="$i_u
|
||||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||||
INSERT INTO user (host,user) values ('$hostname','');
|
INSERT INTO user (host,user) values ('$hostname','');
|
||||||
INSERT INTO user (host,user) values ('localhost','');"
|
INSERT INTO user (host,user) values ('localhost','');"
|
||||||
else
|
else
|
||||||
i_u="$i_u
|
i_u="$i_u
|
||||||
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);"
|
INSERT INTO user VALUES ('localhost','','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -234,7 +237,7 @@ then
|
|||||||
c_t="$c_t Table_name char(64) binary DEFAULT '' NOT NULL,"
|
c_t="$c_t Table_name char(64) binary DEFAULT '' NOT NULL,"
|
||||||
c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
|
c_t="$c_t Grantor char(77) DEFAULT '' NOT NULL,"
|
||||||
c_t="$c_t Timestamp timestamp,"
|
c_t="$c_t Timestamp timestamp,"
|
||||||
c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
c_t="$c_t Table_priv set('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter','Create View','Show view','Trigger') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
||||||
c_t="$c_t Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
c_t="$c_t Column_priv set('Select','Insert','Update','References') COLLATE utf8_general_ci DEFAULT '' NOT NULL,"
|
||||||
c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
|
c_t="$c_t PRIMARY KEY (Host,Db,User,Table_name),"
|
||||||
c_t="$c_t KEY Grantor (Grantor)"
|
c_t="$c_t KEY Grantor (Grantor)"
|
||||||
|
@@ -667,3 +667,12 @@ ALTER TABLE event ADD sql_mode
|
|||||||
'HIGH_NOT_PRECEDENCE'
|
'HIGH_NOT_PRECEDENCE'
|
||||||
) DEFAULT '' NOT NULL AFTER on_completion;
|
) DEFAULT '' NOT NULL AFTER on_completion;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- TRIGGER privilege
|
||||||
|
--
|
||||||
|
|
||||||
|
SET @hadTriggerPriv := 0;
|
||||||
|
SELECT @hadTriggerPriv :=1 FROM user WHERE Trigger_priv LIKE '%';
|
||||||
|
|
||||||
|
ALTER TABLE user add Trigger_priv enum('N','Y') COLLATE utf8_general_ci DEFAULT 'N' NOT NULL;
|
||||||
|
UPDATE user SET Trigger_priv=Super_priv WHERE @hadTriggerPriv = 0;
|
||||||
|
@@ -1042,7 +1042,8 @@ int ha_ndbcluster::get_metadata(const char *path)
|
|||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_share->state != NSS_ALTERED && cmp_frm(tab, pack_data, pack_length))
|
if (get_ndb_share_state(m_share) != NSS_ALTERED
|
||||||
|
&& cmp_frm(tab, pack_data, pack_length))
|
||||||
{
|
{
|
||||||
if (!invalidating_ndb_table)
|
if (!invalidating_ndb_table)
|
||||||
{
|
{
|
||||||
@@ -4435,7 +4436,7 @@ int ha_ndbcluster::create_handler_files(const char *file)
|
|||||||
NDBDICT *dict= ndb->getDictionary();
|
NDBDICT *dict= ndb->getDictionary();
|
||||||
if (!(tab= dict->getTable(m_tabname)))
|
if (!(tab= dict->getTable(m_tabname)))
|
||||||
DBUG_RETURN(0); // Must be a create, ignore since frm is saved in create
|
DBUG_RETURN(0); // Must be a create, ignore since frm is saved in create
|
||||||
DBUG_ASSERT(m_share->state == NSS_ALTERED);
|
DBUG_ASSERT(get_ndb_share_state(m_share) == NSS_ALTERED);
|
||||||
name= table->s->normalized_path.str;
|
name= table->s->normalized_path.str;
|
||||||
DBUG_PRINT("enter", ("m_tabname: %s, path: %s", m_tabname, name));
|
DBUG_PRINT("enter", ("m_tabname: %s, path: %s", m_tabname, name));
|
||||||
if (readfrm(name, &data, &length) ||
|
if (readfrm(name, &data, &length) ||
|
||||||
@@ -4454,7 +4455,7 @@ int ha_ndbcluster::create_handler_files(const char *file)
|
|||||||
my_free((char*)data, MYF(MY_ALLOW_ZERO_PTR));
|
my_free((char*)data, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
my_free((char*)pack_data, MYF(MY_ALLOW_ZERO_PTR));
|
my_free((char*)pack_data, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
}
|
}
|
||||||
m_share->state= NSS_INITIAL;
|
set_ndb_share_state(m_share, NSS_INITIAL);
|
||||||
free_share(&m_share); // Decrease ref_count
|
free_share(&m_share); // Decrease ref_count
|
||||||
|
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
@@ -4591,7 +4592,7 @@ int ha_ndbcluster::add_index(TABLE *table_arg,
|
|||||||
if (!error)
|
if (!error)
|
||||||
{
|
{
|
||||||
ndbcluster_get_share(m_share); // Increase ref_count
|
ndbcluster_get_share(m_share); // Increase ref_count
|
||||||
m_share->state= NSS_ALTERED;
|
set_ndb_share_state(m_share, NSS_ALTERED);
|
||||||
}
|
}
|
||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
@@ -4630,7 +4631,7 @@ int ha_ndbcluster::prepare_drop_index(TABLE *table_arg,
|
|||||||
Ndb *ndb= thd_ndb->ndb;
|
Ndb *ndb= thd_ndb->ndb;
|
||||||
renumber_indexes(ndb, table_arg);
|
renumber_indexes(ndb, table_arg);
|
||||||
ndbcluster_get_share(m_share); // Increase ref_count
|
ndbcluster_get_share(m_share); // Increase ref_count
|
||||||
m_share->state= NSS_ALTERED;
|
set_ndb_share_state(m_share, NSS_ALTERED);
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5281,7 +5282,7 @@ int ndbcluster_discover(THD* thd, const char *db, const char *name,
|
|||||||
dict->invalidateTable(name);
|
dict->invalidateTable(name);
|
||||||
strxnmov(key, FN_LEN-1, mysql_data_home, "/", db, "/", name, NullS);
|
strxnmov(key, FN_LEN-1, mysql_data_home, "/", db, "/", name, NullS);
|
||||||
NDB_SHARE *share= get_share(key, 0, false);
|
NDB_SHARE *share= get_share(key, 0, false);
|
||||||
if (share && share->state == NSS_ALTERED)
|
if (share && get_ndb_share_state(share) == NSS_ALTERED)
|
||||||
{
|
{
|
||||||
// Frm has been altered on disk, but not yet written to ndb
|
// Frm has been altered on disk, but not yet written to ndb
|
||||||
if (readfrm(key, &data, &len))
|
if (readfrm(key, &data, &len))
|
||||||
@@ -5533,7 +5534,7 @@ int ndbcluster_find_all_files(THD *thd)
|
|||||||
else if (cmp_frm(ndbtab, pack_data, pack_length))
|
else if (cmp_frm(ndbtab, pack_data, pack_length))
|
||||||
{
|
{
|
||||||
NDB_SHARE *share= get_share(key, 0, false);
|
NDB_SHARE *share= get_share(key, 0, false);
|
||||||
if (!share || share->state != NSS_ALTERED)
|
if (!share || get_ndb_share_state(share) != NSS_ALTERED)
|
||||||
{
|
{
|
||||||
discover= 1;
|
discover= 1;
|
||||||
sql_print_information("NDB: mismatch in frm for %s.%s, discovering...",
|
sql_print_information("NDB: mismatch in frm for %s.%s, discovering...",
|
||||||
@@ -8907,28 +8908,40 @@ ha_ndbcluster::generate_scan_filter(Ndb_cond_stack *ndb_cond_stack,
|
|||||||
/*
|
/*
|
||||||
get table space info for SHOW CREATE TABLE
|
get table space info for SHOW CREATE TABLE
|
||||||
*/
|
*/
|
||||||
char* ha_ndbcluster::get_tablespace_create_info()
|
char* ha_ndbcluster::get_tablespace_name()
|
||||||
{
|
{
|
||||||
const char tablespace_key[]= " TABLESPACE ";
|
|
||||||
const char storage_key[]= " STORAGE DISK";
|
|
||||||
char* str= 0;
|
|
||||||
|
|
||||||
Ndb *ndb= get_ndb();
|
Ndb *ndb= get_ndb();
|
||||||
NDBDICT *ndbdict= ndb->getDictionary();
|
NDBDICT *ndbdict= ndb->getDictionary();
|
||||||
|
NdbError ndberr;
|
||||||
|
Uint32 id;
|
||||||
ndb->setDatabaseName(m_dbname);
|
ndb->setDatabaseName(m_dbname);
|
||||||
const NDBTAB *ndbtab= ndbdict->getTable(m_tabname);
|
const NDBTAB *ndbtab= ndbdict->getTable(m_tabname);
|
||||||
if (ndbtab == 0)
|
if (ndbtab == 0)
|
||||||
|
{
|
||||||
|
ndberr= ndbdict->getNdbError();
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
if (!ndbtab->getTablespace(&id))
|
||||||
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
// TODO retrieve table space name if there is one
|
{
|
||||||
|
NdbDictionary::Tablespace ts= ndbdict->getTablespace(id);
|
||||||
|
ndberr= ndbdict->getNdbError();
|
||||||
|
if(ndberr.classification != ndberror_cl_none)
|
||||||
|
goto err;
|
||||||
|
return (my_strdup(ts.getName(), MYF(0)));
|
||||||
|
}
|
||||||
|
err:
|
||||||
|
if (ndberr.status == NdbError::TemporaryError)
|
||||||
|
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
|
ER_GET_TEMPORARY_ERRMSG, ER(ER_GET_TEMPORARY_ERRMSG),
|
||||||
|
ndberr.code, ndberr.message, "NDB");
|
||||||
|
else
|
||||||
|
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
|
ER_GET_ERRMSG, ER(ER_GET_ERRMSG),
|
||||||
|
ndberr.code, ndberr.message, "NDB");
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
const char *tablespace_name= "<name>";
|
|
||||||
|
|
||||||
uint len= sizeof(tablespace_key) + strlen(tablespace_name) + sizeof(storage_key);
|
|
||||||
str= my_malloc(len, MYF(0));
|
|
||||||
strxnmov(str, len, tablespace_key, tablespace_name, storage_key, NullS);
|
|
||||||
return(str);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -9526,7 +9539,7 @@ int ndbcluster_alter_tablespace(THD* thd, st_alter_tablespace *info)
|
|||||||
DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
|
DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_NDB_BINLOG
|
||||||
if (is_tablespace)
|
if (is_tablespace)
|
||||||
ndbcluster_log_schema_op(thd, 0,
|
ndbcluster_log_schema_op(thd, 0,
|
||||||
thd->query, thd->query_length,
|
thd->query, thd->query_length,
|
||||||
@@ -9539,7 +9552,7 @@ int ndbcluster_alter_tablespace(THD* thd, st_alter_tablespace *info)
|
|||||||
"", info->logfile_group_name,
|
"", info->logfile_group_name,
|
||||||
0, 0,
|
0, 0,
|
||||||
SOT_LOGFILE_GROUP);
|
SOT_LOGFILE_GROUP);
|
||||||
|
#endif
|
||||||
DBUG_RETURN(FALSE);
|
DBUG_RETURN(FALSE);
|
||||||
|
|
||||||
ndberror:
|
ndberror:
|
||||||
|
@@ -118,6 +118,26 @@ typedef struct st_ndbcluster_share {
|
|||||||
#endif
|
#endif
|
||||||
} NDB_SHARE;
|
} NDB_SHARE;
|
||||||
|
|
||||||
|
inline
|
||||||
|
NDB_SHARE_STATE
|
||||||
|
get_ndb_share_state(NDB_SHARE *share)
|
||||||
|
{
|
||||||
|
NDB_SHARE_STATE state;
|
||||||
|
pthread_mutex_lock(&share->mutex);
|
||||||
|
state= share->state;
|
||||||
|
pthread_mutex_unlock(&share->mutex);
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
void
|
||||||
|
set_ndb_share_state(NDB_SHARE *share, NDB_SHARE_STATE state)
|
||||||
|
{
|
||||||
|
pthread_mutex_lock(&share->mutex);
|
||||||
|
share->state= state;
|
||||||
|
pthread_mutex_unlock(&share->mutex);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_NDB_BINLOG
|
#ifdef HAVE_NDB_BINLOG
|
||||||
/* NDB_SHARE.flags */
|
/* NDB_SHARE.flags */
|
||||||
#define NSF_HIDDEN_PK 1 /* table has hidden primary key */
|
#define NSF_HIDDEN_PK 1 /* table has hidden primary key */
|
||||||
@@ -701,7 +721,7 @@ private:
|
|||||||
uint set_up_partition_info(partition_info *part_info,
|
uint set_up_partition_info(partition_info *part_info,
|
||||||
TABLE *table,
|
TABLE *table,
|
||||||
void *tab);
|
void *tab);
|
||||||
char* get_tablespace_create_info();
|
char* get_tablespace_name();
|
||||||
int set_range_data(void *tab, partition_info* part_info);
|
int set_range_data(void *tab, partition_info* part_info);
|
||||||
int set_list_data(void *tab, partition_info* part_info);
|
int set_list_data(void *tab, partition_info* part_info);
|
||||||
int complemented_pk_read(const byte *old_data, byte *new_data,
|
int complemented_pk_read(const byte *old_data, byte *new_data,
|
||||||
|
@@ -1715,6 +1715,12 @@ int ndbcluster_create_binlog_setup(Ndb *ndb, const char *key,
|
|||||||
|
|
||||||
if (share)
|
if (share)
|
||||||
{
|
{
|
||||||
|
if (share->op || share->op_old)
|
||||||
|
{
|
||||||
|
my_errno= HA_ERR_TABLE_EXIST;
|
||||||
|
pthread_mutex_unlock(&ndbcluster_mutex);
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
handle_trailing_share(share);
|
handle_trailing_share(share);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1716,8 +1716,8 @@ public:
|
|||||||
{ return FALSE; }
|
{ return FALSE; }
|
||||||
virtual char* get_foreign_key_create_info()
|
virtual char* get_foreign_key_create_info()
|
||||||
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
||||||
virtual char* get_tablespace_create_info()
|
virtual char* get_tablespace_name()
|
||||||
{ return(NULL);} /* gets tablespace create string from handler */
|
{ return(NULL);} /* gets tablespace name from handler */
|
||||||
/* used in ALTER TABLE; 1 if changing storage engine is allowed */
|
/* used in ALTER TABLE; 1 if changing storage engine is allowed */
|
||||||
virtual bool can_switch_engines() { return 1; }
|
virtual bool can_switch_engines() { return 1; }
|
||||||
/* used in REPLACE; is > 0 if table is referred by a FOREIGN KEY */
|
/* used in REPLACE; is > 0 if table is referred by a FOREIGN KEY */
|
||||||
|
@@ -361,6 +361,12 @@ static my_bool acl_load(THD *thd, TABLE_LIST *tables)
|
|||||||
if (table->s->fields <= 37 && (user.access & CREATE_ACL))
|
if (table->s->fields <= 37 && (user.access & CREATE_ACL))
|
||||||
user.access|= EVENT_ACL;
|
user.access|= EVENT_ACL;
|
||||||
|
|
||||||
|
/*
|
||||||
|
if it is pre 5.1.6 privilege then map TRIGGER privilege on CREATE.
|
||||||
|
*/
|
||||||
|
if (table->s->fields <= 38 && (user.access & SUPER_ACL))
|
||||||
|
user.access|= TRIGGER_ACL;
|
||||||
|
|
||||||
user.sort= get_sort(2,user.host.hostname,user.user);
|
user.sort= get_sort(2,user.host.hostname,user.user);
|
||||||
user.hostname_length= (user.host.hostname ?
|
user.hostname_length= (user.host.hostname ?
|
||||||
(uint) strlen(user.host.hostname) : 0);
|
(uint) strlen(user.host.hostname) : 0);
|
||||||
@@ -4070,13 +4076,13 @@ static const char *command_array[]=
|
|||||||
"ALTER", "SHOW DATABASES", "SUPER", "CREATE TEMPORARY TABLES",
|
"ALTER", "SHOW DATABASES", "SUPER", "CREATE TEMPORARY TABLES",
|
||||||
"LOCK TABLES", "EXECUTE", "REPLICATION SLAVE", "REPLICATION CLIENT",
|
"LOCK TABLES", "EXECUTE", "REPLICATION SLAVE", "REPLICATION CLIENT",
|
||||||
"CREATE VIEW", "SHOW VIEW", "CREATE ROUTINE", "ALTER ROUTINE",
|
"CREATE VIEW", "SHOW VIEW", "CREATE ROUTINE", "ALTER ROUTINE",
|
||||||
"CREATE USER", "EVENT"
|
"CREATE USER", "EVENT", "TRIGGER"
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint command_lengths[]=
|
static uint command_lengths[]=
|
||||||
{
|
{
|
||||||
6, 6, 6, 6, 6, 4, 6, 8, 7, 4, 5, 10, 5, 5, 14, 5, 23, 11, 7, 17, 18, 11, 9,
|
6, 6, 6, 6, 6, 4, 6, 8, 7, 4, 5, 10, 5, 5, 14, 5, 23, 11, 7, 17, 18, 11, 9,
|
||||||
14, 13, 11, 5
|
14, 13, 11, 5, 7
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -43,6 +43,7 @@
|
|||||||
#define ALTER_PROC_ACL (1L << 24)
|
#define ALTER_PROC_ACL (1L << 24)
|
||||||
#define CREATE_USER_ACL (1L << 25)
|
#define CREATE_USER_ACL (1L << 25)
|
||||||
#define EVENT_ACL (1L << 26)
|
#define EVENT_ACL (1L << 26)
|
||||||
|
#define TRIGGER_ACL (1L << 27)
|
||||||
/*
|
/*
|
||||||
don't forget to update
|
don't forget to update
|
||||||
1. static struct show_privileges_st sys_privileges[]
|
1. static struct show_privileges_st sys_privileges[]
|
||||||
@@ -57,12 +58,12 @@
|
|||||||
(UPDATE_ACL | SELECT_ACL | INSERT_ACL | DELETE_ACL | CREATE_ACL | DROP_ACL | \
|
(UPDATE_ACL | SELECT_ACL | INSERT_ACL | DELETE_ACL | CREATE_ACL | DROP_ACL | \
|
||||||
GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_TMP_ACL | \
|
GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_TMP_ACL | \
|
||||||
LOCK_TABLES_ACL | EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | \
|
LOCK_TABLES_ACL | EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | \
|
||||||
CREATE_PROC_ACL | ALTER_PROC_ACL | EVENT_ACL)
|
CREATE_PROC_ACL | ALTER_PROC_ACL | EVENT_ACL | TRIGGER_ACL)
|
||||||
|
|
||||||
#define TABLE_ACLS \
|
#define TABLE_ACLS \
|
||||||
(SELECT_ACL | INSERT_ACL | UPDATE_ACL | DELETE_ACL | CREATE_ACL | DROP_ACL | \
|
(SELECT_ACL | INSERT_ACL | UPDATE_ACL | DELETE_ACL | CREATE_ACL | DROP_ACL | \
|
||||||
GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_VIEW_ACL | \
|
GRANT_ACL | REFERENCES_ACL | INDEX_ACL | ALTER_ACL | CREATE_VIEW_ACL | \
|
||||||
SHOW_VIEW_ACL)
|
SHOW_VIEW_ACL | TRIGGER_ACL)
|
||||||
|
|
||||||
#define COL_ACLS \
|
#define COL_ACLS \
|
||||||
(SELECT_ACL | INSERT_ACL | UPDATE_ACL | REFERENCES_ACL)
|
(SELECT_ACL | INSERT_ACL | UPDATE_ACL | REFERENCES_ACL)
|
||||||
@@ -79,7 +80,7 @@
|
|||||||
REFERENCES_ACL | INDEX_ACL | ALTER_ACL | SHOW_DB_ACL | SUPER_ACL | \
|
REFERENCES_ACL | INDEX_ACL | ALTER_ACL | SHOW_DB_ACL | SUPER_ACL | \
|
||||||
CREATE_TMP_ACL | LOCK_TABLES_ACL | REPL_SLAVE_ACL | REPL_CLIENT_ACL | \
|
CREATE_TMP_ACL | LOCK_TABLES_ACL | REPL_SLAVE_ACL | REPL_CLIENT_ACL | \
|
||||||
EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | CREATE_PROC_ACL | \
|
EXECUTE_ACL | CREATE_VIEW_ACL | SHOW_VIEW_ACL | CREATE_PROC_ACL | \
|
||||||
ALTER_PROC_ACL | CREATE_USER_ACL | EVENT_ACL)
|
ALTER_PROC_ACL | CREATE_USER_ACL | EVENT_ACL | TRIGGER_ACL)
|
||||||
|
|
||||||
#define DEFAULT_CREATE_PROC_ACLS \
|
#define DEFAULT_CREATE_PROC_ACLS \
|
||||||
(ALTER_PROC_ACL | EXECUTE_ACL)
|
(ALTER_PROC_ACL | EXECUTE_ACL)
|
||||||
@@ -97,7 +98,7 @@
|
|||||||
#define DB_CHUNK3 (CREATE_VIEW_ACL | SHOW_VIEW_ACL | \
|
#define DB_CHUNK3 (CREATE_VIEW_ACL | SHOW_VIEW_ACL | \
|
||||||
CREATE_PROC_ACL | ALTER_PROC_ACL )
|
CREATE_PROC_ACL | ALTER_PROC_ACL )
|
||||||
#define DB_CHUNK4 (EXECUTE_ACL)
|
#define DB_CHUNK4 (EXECUTE_ACL)
|
||||||
#define DB_CHUNK5 (EVENT_ACL)
|
#define DB_CHUNK5 (EVENT_ACL | TRIGGER_ACL)
|
||||||
|
|
||||||
#define fix_rights_for_db(A) (((A) & DB_CHUNK0) | \
|
#define fix_rights_for_db(A) (((A) & DB_CHUNK0) | \
|
||||||
(((A) << 4) & DB_CHUNK1) | \
|
(((A) << 4) & DB_CHUNK1) | \
|
||||||
@@ -114,12 +115,15 @@
|
|||||||
#define TBL_CHUNK0 DB_CHUNK0
|
#define TBL_CHUNK0 DB_CHUNK0
|
||||||
#define TBL_CHUNK1 DB_CHUNK1
|
#define TBL_CHUNK1 DB_CHUNK1
|
||||||
#define TBL_CHUNK2 (CREATE_VIEW_ACL | SHOW_VIEW_ACL)
|
#define TBL_CHUNK2 (CREATE_VIEW_ACL | SHOW_VIEW_ACL)
|
||||||
|
#define TBL_CHUNK3 TRIGGER_ACL
|
||||||
#define fix_rights_for_table(A) (((A) & TBL_CHUNK0) | \
|
#define fix_rights_for_table(A) (((A) & TBL_CHUNK0) | \
|
||||||
(((A) << 4) & TBL_CHUNK1) | \
|
(((A) << 4) & TBL_CHUNK1) | \
|
||||||
(((A) << 11) & TBL_CHUNK2))
|
(((A) << 11) & TBL_CHUNK2) | \
|
||||||
|
(((A) << 15) & TBL_CHUNK3))
|
||||||
#define get_rights_for_table(A) (((A) & TBL_CHUNK0) | \
|
#define get_rights_for_table(A) (((A) & TBL_CHUNK0) | \
|
||||||
(((A) & TBL_CHUNK1) >> 4) | \
|
(((A) & TBL_CHUNK1) >> 4) | \
|
||||||
(((A) & TBL_CHUNK2) >> 11))
|
(((A) & TBL_CHUNK2) >> 11) | \
|
||||||
|
(((A) & TBL_CHUNK3) >> 15))
|
||||||
#define fix_rights_for_column(A) (((A) & 7) | (((A) & ~7) << 8))
|
#define fix_rights_for_column(A) (((A) & 7) | (((A) & ~7) << 8))
|
||||||
#define get_rights_for_column(A) (((A) & 7) | ((A) >> 8))
|
#define get_rights_for_column(A) (((A) & 7) | ((A) >> 8))
|
||||||
#define fix_rights_for_procedure(A) ((((A) << 18) & EXECUTE_ACL) | \
|
#define fix_rights_for_procedure(A) ((((A) << 18) & EXECUTE_ACL) | \
|
||||||
|
@@ -264,6 +264,7 @@ static struct show_privileges_st sys_privileges[]=
|
|||||||
{"Show view","Tables","To see views with SHOW CREATE VIEW"},
|
{"Show view","Tables","To see views with SHOW CREATE VIEW"},
|
||||||
{"Shutdown","Server Admin", "To shut down the server"},
|
{"Shutdown","Server Admin", "To shut down the server"},
|
||||||
{"Super","Server Admin","To use KILL thread, SET GLOBAL, CHANGE MASTER, etc."},
|
{"Super","Server Admin","To use KILL thread, SET GLOBAL, CHANGE MASTER, etc."},
|
||||||
|
{"Trigger","Tables", "To use triggers"},
|
||||||
{"Update", "Tables", "To update existing rows"},
|
{"Update", "Tables", "To update existing rows"},
|
||||||
{"Usage","Server Admin","No privileges - allow connect only"},
|
{"Usage","Server Admin","No privileges - allow connect only"},
|
||||||
{NullS, NullS, NullS}
|
{NullS, NullS, NullS}
|
||||||
@@ -1137,9 +1138,11 @@ store_create_info(THD *thd, TABLE_LIST *table_list, String *packet,
|
|||||||
to the CREATE TABLE statement
|
to the CREATE TABLE statement
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((for_str= file->get_tablespace_create_info()))
|
if ((for_str= file->get_tablespace_name()))
|
||||||
{
|
{
|
||||||
|
packet->append(" TABLESPACE ");
|
||||||
packet->append(for_str, strlen(for_str));
|
packet->append(for_str, strlen(for_str));
|
||||||
|
packet->append(" STORAGE DISK");
|
||||||
my_free(for_str, MYF(0));
|
my_free(for_str, MYF(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -177,12 +177,20 @@ bool mysql_create_or_drop_trigger(THD *thd, TABLE_LIST *tables, bool create)
|
|||||||
DBUG_ASSERT(tables->next_global == 0);
|
DBUG_ASSERT(tables->next_global == 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
TODO: We should check if user has TRIGGER privilege for table here.
|
Check that the user has TRIGGER privilege on the subject table.
|
||||||
Now we just require SUPER privilege for creating/dropping because
|
|
||||||
we don't have proper privilege checking for triggers in place yet.
|
|
||||||
*/
|
*/
|
||||||
if (check_global_access(thd, SUPER_ACL))
|
{
|
||||||
|
bool err_status;
|
||||||
|
TABLE_LIST **save_query_tables_own_last= thd->lex->query_tables_own_last;
|
||||||
|
thd->lex->query_tables_own_last= 0;
|
||||||
|
|
||||||
|
err_status= check_table_access(thd, TRIGGER_ACL, tables, 0);
|
||||||
|
|
||||||
|
thd->lex->query_tables_own_last= save_query_tables_own_last;
|
||||||
|
|
||||||
|
if (err_status)
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
There is no DETERMINISTIC clause for triggers, so can't check it.
|
There is no DETERMINISTIC clause for triggers, so can't check it.
|
||||||
@@ -1151,24 +1159,10 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
|
|||||||
if (sp_change_security_context(thd, sp_trigger, &save_ctx))
|
if (sp_change_security_context(thd, sp_trigger, &save_ctx))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/*
|
|
||||||
NOTE: TRIGGER_ACL should be used below.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (check_global_access(thd, SUPER_ACL))
|
|
||||||
{
|
|
||||||
sp_restore_security_context(thd, save_ctx);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
If the trigger uses special variables (NEW/OLD), check that we have
|
|
||||||
SELECT and UPDATE privileges on the subject table.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (is_special_var_used(event, time_type))
|
|
||||||
{
|
{
|
||||||
TABLE_LIST table_list, **save_query_tables_own_last;
|
TABLE_LIST table_list, **save_query_tables_own_last;
|
||||||
|
ulong wanted_access = TRIGGER_ACL;
|
||||||
|
|
||||||
bzero((char *) &table_list, sizeof (table_list));
|
bzero((char *) &table_list, sizeof (table_list));
|
||||||
table_list.db= (char *) table->s->db.str;
|
table_list.db= (char *) table->s->db.str;
|
||||||
table_list.db_length= table->s->db.length;
|
table_list.db_length= table->s->db.length;
|
||||||
@@ -1179,8 +1173,16 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
|
|||||||
save_query_tables_own_last= thd->lex->query_tables_own_last;
|
save_query_tables_own_last= thd->lex->query_tables_own_last;
|
||||||
thd->lex->query_tables_own_last= 0;
|
thd->lex->query_tables_own_last= 0;
|
||||||
|
|
||||||
err_status= check_table_access(thd, SELECT_ACL | UPDATE_ACL,
|
/*
|
||||||
&table_list, 0);
|
If the trigger uses special variables (NEW/OLD), check that we have
|
||||||
|
SELECT and UPDATE privileges on the subject table.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (is_special_var_used(event, time_type))
|
||||||
|
wanted_access|= SELECT_ACL | UPDATE_ACL;
|
||||||
|
|
||||||
|
err_status= check_table_access(thd, wanted_access, &table_list, 0);
|
||||||
|
|
||||||
thd->lex->query_tables_own_last= save_query_tables_own_last;
|
thd->lex->query_tables_own_last= save_query_tables_own_last;
|
||||||
if (err_status)
|
if (err_status)
|
||||||
{
|
{
|
||||||
|
@@ -10237,6 +10237,7 @@ object_privilege:
|
|||||||
| ALTER ROUTINE_SYM { Lex->grant |= ALTER_PROC_ACL; }
|
| ALTER ROUTINE_SYM { Lex->grant |= ALTER_PROC_ACL; }
|
||||||
| CREATE USER { Lex->grant |= CREATE_USER_ACL; }
|
| CREATE USER { Lex->grant |= CREATE_USER_ACL; }
|
||||||
| EVENT_SYM { Lex->grant |= EVENT_ACL;}
|
| EVENT_SYM { Lex->grant |= EVENT_ACL;}
|
||||||
|
| TRIGGER_SYM { Lex->grant |= TRIGGER_ACL; }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
@@ -783,7 +783,7 @@ public:
|
|||||||
void setTablespace(const char * name);
|
void setTablespace(const char * name);
|
||||||
void setTablespace(const class Tablespace &);
|
void setTablespace(const class Tablespace &);
|
||||||
const char * getTablespace() const;
|
const char * getTablespace() const;
|
||||||
Uint32 getTablespaceId() const;
|
bool getTablespace(Uint32 *id= 0, Uint32 *version= 0) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get table object type
|
* Get table object type
|
||||||
@@ -1736,6 +1736,7 @@ public:
|
|||||||
int createTablespace(const Tablespace &);
|
int createTablespace(const Tablespace &);
|
||||||
int dropTablespace(const Tablespace&);
|
int dropTablespace(const Tablespace&);
|
||||||
Tablespace getTablespace(const char * name);
|
Tablespace getTablespace(const char * name);
|
||||||
|
Tablespace getTablespace(Uint32 tablespaceId);
|
||||||
|
|
||||||
int createDatafile(const Datafile &, bool overwrite_existing = false);
|
int createDatafile(const Datafile &, bool overwrite_existing = false);
|
||||||
int dropDatafile(const Datafile&);
|
int dropDatafile(const Datafile&);
|
||||||
|
@@ -181,7 +181,15 @@ Suma::execREAD_CONFIG_REQ(Signal* signal)
|
|||||||
c_subscriptionPool.setSize(noTables);
|
c_subscriptionPool.setSize(noTables);
|
||||||
c_syncPool.setSize(2);
|
c_syncPool.setSize(2);
|
||||||
c_dataBufferPool.setSize(noAttrs);
|
c_dataBufferPool.setSize(noAttrs);
|
||||||
c_gcp_pool.setSize(10);
|
|
||||||
|
// Calculate needed gcp pool as 10 records + the ones needed
|
||||||
|
// during a possible api timeout
|
||||||
|
Uint32 dbApiHbInterval, gcpInterval;
|
||||||
|
ndb_mgm_get_int_parameter(p, CFG_DB_API_HEARTBEAT_INTERVAL,
|
||||||
|
&dbApiHbInterval);
|
||||||
|
ndb_mgm_get_int_parameter(p, CFG_DB_GCP_INTERVAL,
|
||||||
|
&gcpInterval);
|
||||||
|
c_gcp_pool.setSize(10 + (4*dbApiHbInterval)/gcpInterval);
|
||||||
|
|
||||||
c_page_chunk_pool.setSize(50);
|
c_page_chunk_pool.setSize(50);
|
||||||
|
|
||||||
|
@@ -600,10 +600,16 @@ NdbDictionary::Table::createTableInDb(Ndb* pNdb, bool equalOk) const {
|
|||||||
return pNdb->getDictionary()->createTable(* this);
|
return pNdb->getDictionary()->createTable(* this);
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint32
|
bool
|
||||||
NdbDictionary::Table::getTablespaceId() const
|
NdbDictionary::Table::getTablespace(Uint32 *id, Uint32 *version) const
|
||||||
{
|
{
|
||||||
return m_impl.m_tablespace_id;
|
if (m_impl.m_tablespace_id == RNIL)
|
||||||
|
return false;
|
||||||
|
if (id)
|
||||||
|
*id= m_impl.m_tablespace_id;
|
||||||
|
if (version)
|
||||||
|
*version= m_impl.m_version;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1687,6 +1693,15 @@ NdbDictionary::Dictionary::getTablespace(const char * name){
|
|||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NdbDictionary::Tablespace
|
||||||
|
NdbDictionary::Dictionary::getTablespace(Uint32 tablespaceId){
|
||||||
|
NdbDictionary::Tablespace tmp;
|
||||||
|
m_impl.m_receiver.get_filegroup(NdbTablespaceImpl::getImpl(tmp),
|
||||||
|
NdbDictionary::Object::Tablespace,
|
||||||
|
tablespaceId);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
NdbDictionary::Dictionary::createDatafile(const Datafile & df, bool force){
|
NdbDictionary::Dictionary::createDatafile(const Datafile & df, bool force){
|
||||||
return m_impl.createDatafile(NdbDatafileImpl::getImpl(df), force);
|
return m_impl.createDatafile(NdbDatafileImpl::getImpl(df), force);
|
||||||
|
@@ -658,11 +658,11 @@ BackupRestore::table(const TableS & table){
|
|||||||
NdbDictionary::Table copy(*table.m_dictTable);
|
NdbDictionary::Table copy(*table.m_dictTable);
|
||||||
|
|
||||||
copy.setName(split[2].c_str());
|
copy.setName(split[2].c_str());
|
||||||
if (copy.getTablespaceId() != RNIL)
|
Uint32 id;
|
||||||
|
if (copy.getTablespace(&id))
|
||||||
{
|
{
|
||||||
Uint32 id = copy.getTablespaceId();
|
|
||||||
debug << "Connecting " << name << " to tablespace oldid: " << id << flush;
|
debug << "Connecting " << name << " to tablespace oldid: " << id << flush;
|
||||||
NdbDictionary::Tablespace* ts = m_tablespaces[copy.getTablespaceId()];
|
NdbDictionary::Tablespace* ts = m_tablespaces[id];
|
||||||
debug << " newid: " << ts->getObjectId() << endl;
|
debug << " newid: " << ts->getObjectId() << endl;
|
||||||
copy.setTablespace(* ts);
|
copy.setTablespace(* ts);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user