mysql-cdc-ssl.td 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. # We test interesting combinations of server and client SSL configs
  10. # (part of the CREATE SOURCE statement).
  11. $ set-sql-timeout duration=1s
  12. > CREATE SECRET ssl_ca AS '${arg.ssl-ca}'
  13. > CREATE SECRET ssl_cert AS '${arg.ssl-client-cert}'
  14. > CREATE SECRET ssl_key AS '${arg.ssl-client-key}'
  15. > CREATE SECRET ssl_wrong_cert AS '${arg.ssl-wrong-client-cert}'
  16. > CREATE SECRET ssl_wrong_key AS '${arg.ssl-wrong-client-key}'
  17. $ mysql-connect name=mysql url=mysql://root@mysql password=${arg.mysql-root-password}
  18. # Bootstrap users and data
  19. $ mysql-execute name=mysql
  20. DROP DATABASE IF EXISTS public;
  21. CREATE DATABASE public;
  22. USE public;
  23. DROP USER IF EXISTS host;
  24. CREATE USER host;
  25. GRANT ALL ON *.* TO host;
  26. DROP USER IF EXISTS hostssl;
  27. CREATE USER hostssl;
  28. GRANT ALL ON *.* TO hostssl;
  29. DROP USER IF EXISTS hostnossl;
  30. CREATE USER hostnossl;
  31. GRANT ALL ON *.* TO hostnossl;
  32. DROP USER IF EXISTS certuser;
  33. CREATE USER certuser;
  34. GRANT ALL ON *.* TO certuser;
  35. DROP TABLE IF EXISTS numbers;
  36. CREATE TABLE numbers (number int PRIMARY KEY, is_prime bool, name text);
  37. INSERT INTO numbers VALUES (1, true, 'one');
  38. $ set-regex match=(\d{1,3}\.){3}\d{1,3} replacement=(HOST)
  39. # server: host, client: disable => OK
  40. > CREATE CONNECTION mysql_conn TO MYSQL (
  41. HOST mysql,
  42. USER host,
  43. SSL MODE disabled
  44. );
  45. > CREATE SOURCE "mz_source"
  46. FROM MYSQL CONNECTION mysql_conn
  47. FOR TABLES (public.numbers);
  48. > SELECT * FROM "numbers";
  49. 1 1 one
  50. $ mysql-execute name=mysql
  51. INSERT INTO numbers VALUES (2, true, 'two');
  52. > SELECT * FROM "numbers";
  53. 1 1 one
  54. 2 1 two
  55. > DROP SOURCE "mz_source" CASCADE;
  56. > DROP CONNECTION mysql_conn;
  57. $ mysql-execute name=mysql
  58. DELETE FROM numbers WHERE number = 2;
  59. # server: host, client: prefer => unsupported
  60. ! CREATE CONNECTION mysql_conn TO MYSQL (
  61. HOST mysql,
  62. USER host,
  63. SSL MODE prefer
  64. );
  65. contains: invalid CONNECTION: unknown SSL MODE "PREFER"
  66. # server: host, client: require => OK
  67. > CREATE CONNECTION mysql_conn TO MYSQL (
  68. HOST mysql,
  69. USER host,
  70. SSL MODE required
  71. );
  72. > CREATE SOURCE "mz_source"
  73. FROM MYSQL CONNECTION mysql_conn
  74. FOR TABLES (public.numbers);
  75. > SELECT * FROM "numbers";
  76. 1 1 one
  77. $ mysql-execute name=mysql
  78. INSERT INTO numbers VALUES (2, true, 'two');
  79. > SELECT * FROM "numbers";
  80. 1 1 one
  81. 2 1 two
  82. > DROP SOURCE "mz_source" CASCADE;
  83. > DROP CONNECTION mysql_conn;
  84. $ mysql-execute name=mysql
  85. DELETE FROM numbers WHERE number = 2;
  86. # server: hostssl, client: require => OK
  87. > CREATE CONNECTION mysql_conn TO MYSQL (
  88. HOST mysql,
  89. USER hostssl,
  90. SSL MODE required
  91. );
  92. > CREATE SOURCE "mz_source"
  93. FROM MYSQL CONNECTION mysql_conn
  94. FOR TABLES (public.numbers);
  95. > SELECT * FROM "numbers";
  96. 1 1 one
  97. $ mysql-execute name=mysql
  98. INSERT INTO numbers VALUES (2, true, 'two');
  99. > SELECT * FROM "numbers";
  100. 1 1 one
  101. 2 1 two
  102. > DROP SOURCE "mz_source" CASCADE;
  103. > DROP CONNECTION mysql_conn;
  104. $ mysql-execute name=mysql
  105. DELETE FROM numbers WHERE number = 2;
  106. # TODO: database-issues#7660 (error not handled properly)
  107. # # server: hostssl, client: verify-ca => ERROR
  108. # > CREATE CONNECTION mysql_conn TO MYSQL (
  109. # HOST mysql,
  110. # USER hostssl,
  111. # SSL MODE verify_ca
  112. # );
  113. # ! CREATE SOURCE "mz_source"
  114. # FROM MYSQL CONNECTION mysql_conn
  115. # FOR TABLES (public.numbers);
  116. # contains:self signed certificate in certificate chain
  117. # > DROP CONNECTION mysql_conn;
  118. # server: hostssl, client: verify-ca => OK
  119. > CREATE CONNECTION mysql_conn TO MYSQL (
  120. HOST mysql,
  121. USER hostssl,
  122. SSL MODE verify_ca,
  123. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  124. );
  125. > CREATE SOURCE "mz_source"
  126. FROM MYSQL CONNECTION mysql_conn
  127. FOR TABLES (public.numbers);
  128. > SELECT * FROM "numbers";
  129. 1 1 one
  130. $ mysql-execute name=mysql
  131. INSERT INTO numbers VALUES (2, true, 'two');
  132. > SELECT * FROM "numbers";
  133. 1 1 one
  134. 2 1 two
  135. > DROP SOURCE "mz_source" CASCADE;
  136. > DROP CONNECTION mysql_conn;
  137. $ mysql-execute name=mysql
  138. DELETE FROM numbers WHERE number = 2;
  139. # TODO: database-issues#7660 (error not handled properly)
  140. # # server: hostssl, client: verify-identity => ERROR
  141. # > CREATE CONNECTION mysql_conn TO MYSQL (
  142. # HOST mysql,
  143. # USER hostssl,
  144. # SSL MODE verify_identity
  145. # );
  146. # ! CREATE SOURCE "mz_source"
  147. # FROM MYSQL CONNECTION mysql_conn
  148. # FOR TABLES (public.numbers);
  149. # contains:self signed certificate in certificate chain
  150. # > DROP CONNECTION mysql_conn;
  151. # TODO: database-issues#7660
  152. # # server: hostssl, client: verify-identity => OK
  153. # > CREATE CONNECTION mysql_conn TO MYSQL (
  154. # HOST mysql,
  155. # USER hostssl,
  156. # SSL MODE verify_identity,
  157. # SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  158. # );
  159. # > CREATE SOURCE "mz_source"
  160. # FROM MYSQL CONNECTION mysql_conn
  161. # FOR TABLES (public.numbers);
  162. # > SELECT * FROM "numbers";
  163. # 1 1 one
  164. # $ mysql-execute name=mysql
  165. # INSERT INTO numbers VALUES (2, true, 'two');
  166. # > SELECT * FROM "numbers";
  167. # 1 1 one
  168. # 2 1 two
  169. # > DROP SOURCE "mz_source" CASCADE;
  170. # > DROP CONNECTION mysql_conn;
  171. # $ mysql-execute name=mysql
  172. # DELETE FROM numbers WHERE number = 2;
  173. # server: hostnossl, client: disable => OK
  174. > CREATE CONNECTION mysql_conn TO MYSQL (
  175. HOST mysql,
  176. USER hostnossl,
  177. SSL MODE disabled
  178. );
  179. > CREATE SOURCE "mz_source"
  180. FROM MYSQL CONNECTION mysql_conn
  181. FOR TABLES (public.numbers);
  182. > SELECT * FROM "numbers";
  183. 1 1 one
  184. $ mysql-execute name=mysql
  185. INSERT INTO numbers VALUES (2, true, 'two');
  186. > SELECT * FROM "numbers";
  187. 1 1 one
  188. 2 1 two
  189. > DROP SOURCE "mz_source" CASCADE;
  190. > DROP CONNECTION mysql_conn;
  191. $ mysql-execute name=mysql
  192. DELETE FROM numbers WHERE number = 2;
  193. # TODO: database-issues#7660 (error not handled properly)
  194. # # server: hostnossl, client: verify-ca => ERROR
  195. # > CREATE CONNECTION mysql_conn TO MYSQL (
  196. # HOST mysql,
  197. # USER hostnossl,
  198. # SSL MODE verify_ca
  199. # );
  200. # ! CREATE SOURCE "mz_source"
  201. # FROM MYSQL CONNECTION mysql_conn
  202. # FOR TABLES (public.numbers);
  203. # contains:self signed certificate in certificate chain
  204. # > DROP CONNECTION mysql_conn;
  205. # server: certuser, client: require => OK
  206. > CREATE CONNECTION mysql_conn TO MYSQL (
  207. HOST mysql,
  208. USER certuser,
  209. SSL MODE required,
  210. SSL CERTIFICATE SECRET ssl_cert,
  211. SSL KEY SECRET ssl_key,
  212. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  213. );
  214. > CREATE SOURCE "mz_source"
  215. FROM MYSQL CONNECTION mysql_conn
  216. FOR TABLES (public.numbers);
  217. > SELECT * FROM "numbers";
  218. 1 1 one
  219. $ mysql-execute name=mysql
  220. INSERT INTO numbers VALUES (2, true, 'two');
  221. > SELECT * FROM "numbers";
  222. 1 1 one
  223. 2 1 two
  224. > DROP SOURCE "mz_source" CASCADE;
  225. > DROP CONNECTION mysql_conn;
  226. $ mysql-execute name=mysql
  227. DELETE FROM numbers WHERE number = 2;
  228. # server: certuser, client: verify-ca => OK in MySQL
  229. > CREATE CONNECTION mysql_conn TO MYSQL (
  230. HOST mysql,
  231. USER certuser,
  232. SSL MODE verify_ca,
  233. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  234. );
  235. > CREATE SOURCE "mz_source"
  236. FROM MYSQL CONNECTION mysql_conn
  237. FOR TABLES (public.numbers);
  238. > SELECT * FROM "numbers";
  239. 1 1 one
  240. $ mysql-execute name=mysql
  241. INSERT INTO numbers VALUES (2, true, 'two');
  242. > SELECT * FROM "numbers";
  243. 1 1 one
  244. 2 1 two
  245. > DROP SOURCE "mz_source" CASCADE;
  246. > DROP CONNECTION mysql_conn;
  247. $ mysql-execute name=mysql
  248. DELETE FROM numbers WHERE number = 2;
  249. # TODO: database-issues#7660 (error not handled properly)
  250. # # server: certuser, client: verify-ca (wrong cert) => ERROR
  251. # > CREATE CONNECTION mysql_conn TO MYSQL (
  252. # HOST mysql,
  253. # USER certuser,
  254. # SSL MODE verify_ca,
  255. # SSL CERTIFICATE SECRET ssl_wrong_cert,
  256. # SSL KEY SECRET ssl_wrong_key,
  257. # SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  258. # );
  259. # ! CREATE SOURCE "mz_source"
  260. # FROM MYSQL CONNECTION mysql_conn
  261. # contains:db error: FATAL: certificate authentication failed for user "certuser"
  262. # > DROP CONNECTION mysql_conn;
  263. # server: certuser, client: verify-ca => OK
  264. > CREATE CONNECTION mysql_conn TO MYSQL (
  265. HOST mysql,
  266. USER certuser,
  267. SSL MODE verify_ca,
  268. SSL CERTIFICATE SECRET ssl_cert,
  269. SSL KEY SECRET ssl_key,
  270. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  271. );
  272. > CREATE SOURCE "mz_source"
  273. FROM MYSQL CONNECTION mysql_conn
  274. FOR TABLES (public.numbers);
  275. > SELECT * FROM "numbers";
  276. 1 1 one
  277. $ mysql-execute name=mysql
  278. INSERT INTO numbers VALUES (2, true, 'two');
  279. > SELECT * FROM "numbers";
  280. 1 1 one
  281. 2 1 two
  282. > DROP SOURCE "mz_source" CASCADE;
  283. > DROP CONNECTION mysql_conn;
  284. $ mysql-execute name=mysql
  285. DELETE FROM numbers WHERE number = 2;
  286. # TODO: database-issues#7660 (error not handled properly)
  287. # # server: certuser, client: verify-identity => OK
  288. # > CREATE CONNECTION mysql_conn TO MYSQL (
  289. # HOST mysql,
  290. # USER certuser,
  291. # SSL MODE verify_identity,
  292. # SSL CERTIFICATE SECRET ssl_cert,
  293. # SSL KEY SECRET ssl_key,
  294. # SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  295. # );
  296. # > CREATE SOURCE "mz_source"
  297. # FROM MYSQL CONNECTION mysql_conn
  298. # FOR TABLES (public.numbers);
  299. # > SELECT * FROM "numbers";
  300. # 1 1 one
  301. # $ mysql-execute name=mysql
  302. # INSERT INTO numbers VALUES (2, true, 'two');
  303. # > SELECT * FROM "numbers";
  304. # 1 1 one
  305. # 2 1 two
  306. # > DROP SOURCE "mz_source" CASCADE;
  307. # > DROP CONNECTION mysql_conn;
  308. # $ mysql-execute name=mysql
  309. # DELETE FROM numbers WHERE number = 2;
  310. # missing sslcert
  311. ! CREATE CONNECTION mysql_conn TO MYSQL (
  312. HOST mysql,
  313. USER certuser,
  314. SSL MODE verify_full,
  315. SSL CERTIFICATE SECRET noexist,
  316. SSL KEY SECRET ssl_key,
  317. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  318. );
  319. contains:unknown catalog item 'noexist'
  320. # missing sslkey
  321. ! CREATE CONNECTION mysql_conn TO MYSQL (
  322. HOST mysql,
  323. USER certuser,
  324. SSL MODE verify_full,
  325. SSL CERTIFICATE SECRET ssl_cert,
  326. SSL KEY SECRET noexist,
  327. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  328. );
  329. contains:unknown catalog item 'noexist'
  330. # missing sslrootcert
  331. ! CREATE CONNECTION mysql_conn TO MYSQL (
  332. HOST mysql,
  333. USER certuser,
  334. SSL MODE verify_full,
  335. SSL CERTIFICATE SECRET ssl_cert,
  336. SSL KEY SECRET ssl_key,
  337. SSL CERTIFICATE AUTHORITY SECRET noexist
  338. );
  339. contains:unknown catalog item 'noexist'
  340. # require both sslcert and sslkey
  341. ! CREATE CONNECTION mysql_conn TO MYSQL (
  342. HOST mysql,
  343. USER certuser,
  344. SSL MODE verify_full,
  345. SSL CERTIFICATE SECRET ssl_cert
  346. );
  347. contains:invalid CONNECTION: both SSL KEY and SSL CERTIFICATE are required
  348. ! CREATE CONNECTION mysql_conn TO MYSQL (
  349. HOST mysql,
  350. USER certuser,
  351. SSL MODE verify_full,
  352. SSL KEY SECRET ssl_cert
  353. );
  354. contains:invalid CONNECTION: both SSL KEY and SSL CERTIFICATE are required