grant2.test
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:7k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. # Grant tests not performed with embedded server
  2. -- source include/not_embedded.inc
  3. SET NAMES binary;
  4. #
  5. # GRANT tests that require several connections
  6. # (usually it's GRANT, reconnect as another user, try something)
  7. #
  8. # prepare playground before tests
  9. --disable_warnings
  10. drop database if exists mysqltest;
  11. drop database if exists mysqltest_1;
  12. --enable_warnings
  13. delete from mysql.user where user like 'mysqltest_%';
  14. delete from mysql.db where user like 'mysqltest_%';
  15. delete from mysql.tables_priv where user like 'mysqltest_%';
  16. delete from mysql.columns_priv where user like 'mysqltest_%';
  17. flush privileges;
  18. #
  19. # wild_compare fun
  20. #
  21. grant all privileges on `my_%`.* to mysqltest_1@localhost with grant option;
  22. connect (user1,localhost,mysqltest_1,,);
  23. connection user1;
  24. select current_user();
  25. grant all privileges on `my_1`.* to mysqltest_2@localhost with grant option;
  26. --error 1044
  27. grant all privileges on `my_%`.* to mysqltest_3@localhost with grant option;
  28. disconnect user1;
  29. connection default;
  30. show grants for mysqltest_1@localhost;
  31. show grants for mysqltest_2@localhost;
  32. --error 1141
  33. show grants for mysqltest_3@localhost;
  34. delete from mysql.user where user like 'mysqltest_%';
  35. delete from mysql.db where user like 'mysqltest_%';
  36. flush privileges;
  37. #
  38. # wild_compare part two - acl_cache
  39. #
  40. create database mysqltest_1;
  41. grant all privileges on `mysqltest_1`.* to mysqltest_1@localhost with grant option;
  42. connect (user2,localhost,mysqltest_1,,);
  43. connection user2;
  44. select current_user();
  45. show databases;
  46. --error 1044
  47. grant all privileges on `mysqltest_1`.* to mysqltest_1@localhost with grant option;
  48. disconnect user2;
  49. connection default;
  50. show grants for mysqltest_1@localhost;
  51. delete from mysql.user where user like 'mysqltest_%';
  52. delete from mysql.db where user like 'mysqltest_%';
  53. drop database mysqltest_1;
  54. flush privileges;
  55. #
  56. # Bug #6173: One can circumvent missing UPDATE privilege if he has SELECT
  57. # and INSERT privilege for table with primary key
  58. #
  59. create database mysqltest;
  60. grant INSERT, SELECT on mysqltest.* to mysqltest_1@localhost;
  61. flush privileges;
  62. use mysqltest;
  63. create table t1 (id int primary key, data varchar(255));
  64. connect (mrbad, localhost, mysqltest_1,,mysqltest);
  65. connection mrbad;
  66. show grants for current_user();
  67. insert into t1 values (1, 'I can''t change it!');
  68. --error 1044
  69. update t1 set data='I can change it!' where id = 1;
  70. # This should not be allowed since it too require UPDATE privilege.
  71. --error 1044
  72. insert into t1 values (1, 'XXX') on duplicate key update data= 'I can change it!';
  73. select * from t1;
  74. disconnect mrbad;
  75. connection default;
  76. drop table t1;
  77. delete from mysql.user where user like 'mysqltest_%';
  78. delete from mysql.db where user like 'mysqltest_%';
  79. flush privileges;
  80. create table t1 (a int, b int);
  81. grant select (a) on t1 to mysqltest_1@localhost with grant option;
  82. connect (mrugly, localhost, mysqltest_1,,mysqltest);
  83. connection mrugly;
  84. --error 1143
  85. grant select (a,b) on t1 to mysqltest_2@localhost;
  86. --error 1142
  87. grant select on t1 to mysqltest_3@localhost;
  88. disconnect mrugly;
  89. connection default;
  90. drop table t1;
  91. delete from mysql.user where user like 'mysqltest_%';
  92. delete from mysql.db where user like 'mysqltest_%';
  93. delete from mysql.tables_priv where user like 'mysqltest_%';
  94. delete from mysql.columns_priv where user like 'mysqltest_%';
  95. flush privileges;
  96. drop database mysqltest;
  97. use test;
  98. # Bug #3309: Test IP addresses with netmask
  99. create database mysqltest_1;
  100. create table mysqltest_1.t1 (i int);
  101. insert into mysqltest_1.t1 values (1),(2),(3);
  102. GRANT ALL ON mysqltest_1.t1 TO mysqltest_1@'127.0.0.0/255.0.0.0';
  103. connect (n1,127.0.0.1,mysqltest_1,,mysqltest_1,$MASTER_MYPORT,$MASTER_MYSOCK);
  104. connection n1;
  105. show grants for current_user();
  106. select * from t1;
  107. disconnect n1;
  108. connection default;
  109. REVOKE ALL ON mysqltest_1.t1 FROM mysqltest_1@'127.0.0.0/255.0.0.0';
  110. delete from mysql.user where user like 'mysqltest_1';
  111. flush privileges;
  112. drop table mysqltest_1.t1;
  113. #
  114. # Bug #12302: 'SET PASSWORD = ...' didn't work if connecting hostname !=
  115. # hostname the current user is authenticated as. Note that a test for this
  116. # was also added to the test above.
  117. #
  118. grant all on mysqltest_1.* to mysqltest_1@'127.0.0.1';
  119. connect (b12302,127.0.0.1,mysqltest_1,,mysqltest_1,$MASTER_MYPORT,);
  120. connection b12302;
  121. select current_user();
  122. set password = password('changed');
  123. disconnect b12302;
  124. connection default;
  125. select host, length(password) from mysql.user where user like 'mysqltest_1';
  126. revoke all on mysqltest_1.* from mysqltest_1@'127.0.0.1';
  127. delete from mysql.user where user like 'mysqltest_1';
  128. flush privileges;
  129. grant all on mysqltest_1.* to mysqltest_1@'127.0.0.0/255.0.0.0';
  130. connect (b12302_2,127.0.0.1,mysqltest_1,,mysqltest_1,$MASTER_MYPORT,);
  131. connection b12302_2;
  132. select current_user();
  133. set password = password('changed');
  134. disconnect b12302_2;
  135. connection default;
  136. select host, length(password) from mysql.user where user like 'mysqltest_1';
  137. revoke all on mysqltest_1.* from mysqltest_1@'127.0.0.0/255.0.0.0';
  138. delete from mysql.user where user like 'mysqltest_1';
  139. flush privileges;
  140. drop database mysqltest_1;
  141. # But anonymous users can't change their password
  142. connect (n5,localhost,test,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
  143. connection n5;
  144. --error 1044
  145. set password = password("changed");
  146. disconnect n5;
  147. connection default;
  148. # Bug #12423 "Deadlock when doing FLUSH PRIVILEGES and GRANT in 
  149. # multi-threaded environment". We should be able to execute FLUSH
  150. # PRIVILEGES and SET PASSWORD simultaneously with other account
  151. # management commands (such as GRANT and REVOKE) without causing
  152. # deadlocks. To achieve this we should ensure that all account
  153. # management commands take table and internal locks in the same order.
  154. connect (con2root,localhost,root,,);
  155. connect (con3root,localhost,root,,);
  156. # Check that we can execute FLUSH PRIVILEGES and GRANT simultaneously
  157. # This will check that locks are taken in proper order during both
  158. # user/db-level and table/column-level privileges reloading.
  159. connection default;
  160. lock table mysql.user write;
  161. connection con2root;
  162. send flush privileges;
  163. connection con3root;
  164. send grant all on *.* to 'mysqltest_1'@'localhost';
  165. connection default;
  166. unlock tables;
  167. connection con2root;
  168. reap;
  169. connection con3root;
  170. reap;
  171. # Check for simultaneous SET PASSWORD and REVOKE.
  172. connection default;
  173. lock table mysql.user write;
  174. connection con2root;
  175. send set password for 'mysqltest_1'@'localhost' = password('');
  176. connection con3root;
  177. send revoke all on *.* from 'mysqltest_1'@'localhost';
  178. connection default;
  179. unlock tables;
  180. connection con2root;
  181. reap;
  182. connection con3root;
  183. reap;
  184. connection default;
  185. # Clean-up
  186. drop user 'mysqltest_1'@'localhost';
  187. disconnect con2root;
  188. disconnect con3root;
  189. # End of 4.1 tests