mysql-cdc-ssl.td 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  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. > CREATE TABLE numbers FROM SOURCE "mz_source" (REFERENCE 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. > CREATE TABLE numbers FROM SOURCE "mz_source" (REFERENCE 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. > CREATE TABLE numbers FROM SOURCE "mz_source" (REFERENCE 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. # contains:self signed certificate in certificate chain
  116. # > DROP CONNECTION mysql_conn;
  117. # server: hostssl, client: verify-ca => OK
  118. > CREATE CONNECTION mysql_conn TO MYSQL (
  119. HOST mysql,
  120. USER hostssl,
  121. SSL MODE verify_ca,
  122. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  123. );
  124. > CREATE SOURCE "mz_source"
  125. FROM MYSQL CONNECTION mysql_conn;
  126. > CREATE TABLE numbers FROM SOURCE "mz_source" (REFERENCE public.numbers);
  127. > SELECT * FROM "numbers";
  128. 1 1 one
  129. $ mysql-execute name=mysql
  130. INSERT INTO numbers VALUES (2, true, 'two');
  131. > SELECT * FROM "numbers";
  132. 1 1 one
  133. 2 1 two
  134. > DROP SOURCE "mz_source" CASCADE;
  135. > DROP CONNECTION mysql_conn;
  136. $ mysql-execute name=mysql
  137. DELETE FROM numbers WHERE number = 2;
  138. # TODO: database-issues#7660 (error not handled properly)
  139. # # server: hostssl, client: verify-identity => ERROR
  140. # > CREATE CONNECTION mysql_conn TO MYSQL (
  141. # HOST mysql,
  142. # USER hostssl,
  143. # SSL MODE verify_identity
  144. # );
  145. # ! CREATE SOURCE "mz_source"
  146. # FROM MYSQL CONNECTION mysql_conn;
  147. # contains:self signed certificate in certificate chain
  148. # > DROP CONNECTION mysql_conn;
  149. # TODO: database-issues#7660
  150. # # server: hostssl, client: verify-identity => OK
  151. # > CREATE CONNECTION mysql_conn TO MYSQL (
  152. # HOST mysql,
  153. # USER hostssl,
  154. # SSL MODE verify_identity,
  155. # SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  156. # );
  157. # > CREATE SOURCE "mz_source"
  158. # FROM MYSQL CONNECTION mysql_conn;
  159. # > SELECT * FROM "numbers";
  160. # 1 1 one
  161. # $ mysql-execute name=mysql
  162. # INSERT INTO numbers VALUES (2, true, 'two');
  163. # > SELECT * FROM "numbers";
  164. # 1 1 one
  165. # 2 1 two
  166. # > DROP SOURCE "mz_source" CASCADE;
  167. # > DROP CONNECTION mysql_conn;
  168. # $ mysql-execute name=mysql
  169. # DELETE FROM numbers WHERE number = 2;
  170. # server: hostnossl, client: disable => OK
  171. > CREATE CONNECTION mysql_conn TO MYSQL (
  172. HOST mysql,
  173. USER hostnossl,
  174. SSL MODE disabled
  175. );
  176. > CREATE SOURCE "mz_source"
  177. FROM MYSQL CONNECTION mysql_conn;
  178. > CREATE TABLE numbers FROM SOURCE "mz_source" (REFERENCE public.numbers);
  179. > SELECT * FROM "numbers";
  180. 1 1 one
  181. $ mysql-execute name=mysql
  182. INSERT INTO numbers VALUES (2, true, 'two');
  183. > SELECT * FROM "numbers";
  184. 1 1 one
  185. 2 1 two
  186. > DROP SOURCE "mz_source" CASCADE;
  187. > DROP CONNECTION mysql_conn;
  188. $ mysql-execute name=mysql
  189. DELETE FROM numbers WHERE number = 2;
  190. # TODO: database-issues#7660 (error not handled properly)
  191. # # server: hostnossl, client: verify-ca => ERROR
  192. # > CREATE CONNECTION mysql_conn TO MYSQL (
  193. # HOST mysql,
  194. # USER hostnossl,
  195. # SSL MODE verify_ca
  196. # );
  197. # ! CREATE SOURCE "mz_source"
  198. # FROM MYSQL CONNECTION mysql_conn;
  199. # contains:self signed certificate in certificate chain
  200. # > DROP CONNECTION mysql_conn;
  201. # server: certuser, client: require => OK
  202. > CREATE CONNECTION mysql_conn TO MYSQL (
  203. HOST mysql,
  204. USER certuser,
  205. SSL MODE required,
  206. SSL CERTIFICATE SECRET ssl_cert,
  207. SSL KEY SECRET ssl_key,
  208. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  209. );
  210. > CREATE SOURCE "mz_source"
  211. FROM MYSQL CONNECTION mysql_conn;
  212. > CREATE TABLE numbers FROM SOURCE "mz_source" (REFERENCE public.numbers);
  213. > SELECT * FROM "numbers";
  214. 1 1 one
  215. $ mysql-execute name=mysql
  216. INSERT INTO numbers VALUES (2, true, 'two');
  217. > SELECT * FROM "numbers";
  218. 1 1 one
  219. 2 1 two
  220. > DROP SOURCE "mz_source" CASCADE;
  221. > DROP CONNECTION mysql_conn;
  222. $ mysql-execute name=mysql
  223. DELETE FROM numbers WHERE number = 2;
  224. # server: certuser, client: verify-ca => OK in MySQL
  225. > CREATE CONNECTION mysql_conn TO MYSQL (
  226. HOST mysql,
  227. USER certuser,
  228. SSL MODE verify_ca,
  229. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  230. );
  231. > CREATE SOURCE "mz_source"
  232. FROM MYSQL CONNECTION mysql_conn;
  233. > CREATE TABLE numbers FROM SOURCE "mz_source" (REFERENCE public.numbers);
  234. > SELECT * FROM "numbers";
  235. 1 1 one
  236. $ mysql-execute name=mysql
  237. INSERT INTO numbers VALUES (2, true, 'two');
  238. > SELECT * FROM "numbers";
  239. 1 1 one
  240. 2 1 two
  241. > DROP SOURCE "mz_source" CASCADE;
  242. > DROP CONNECTION mysql_conn;
  243. $ mysql-execute name=mysql
  244. DELETE FROM numbers WHERE number = 2;
  245. # TODO: database-issues#7660 (error not handled properly)
  246. # # server: certuser, client: verify-ca (wrong cert) => ERROR
  247. # > CREATE CONNECTION mysql_conn TO MYSQL (
  248. # HOST mysql,
  249. # USER certuser,
  250. # SSL MODE verify_ca,
  251. # SSL CERTIFICATE SECRET ssl_wrong_cert,
  252. # SSL KEY SECRET ssl_wrong_key,
  253. # SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  254. # );
  255. # ! CREATE SOURCE "mz_source"
  256. # FROM MYSQL CONNECTION mysql_conn
  257. # contains:db error: FATAL: certificate authentication failed for user "certuser"
  258. # > DROP CONNECTION mysql_conn;
  259. # server: certuser, client: verify-ca => OK
  260. > CREATE CONNECTION mysql_conn TO MYSQL (
  261. HOST mysql,
  262. USER certuser,
  263. SSL MODE verify_ca,
  264. SSL CERTIFICATE SECRET ssl_cert,
  265. SSL KEY SECRET ssl_key,
  266. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  267. );
  268. > CREATE SOURCE "mz_source"
  269. FROM MYSQL CONNECTION mysql_conn;
  270. > CREATE TABLE numbers FROM SOURCE "mz_source" (REFERENCE public.numbers);
  271. > SELECT * FROM "numbers";
  272. 1 1 one
  273. $ mysql-execute name=mysql
  274. INSERT INTO numbers VALUES (2, true, 'two');
  275. > SELECT * FROM "numbers";
  276. 1 1 one
  277. 2 1 two
  278. > DROP SOURCE "mz_source" CASCADE;
  279. > DROP CONNECTION mysql_conn;
  280. $ mysql-execute name=mysql
  281. DELETE FROM numbers WHERE number = 2;
  282. # TODO: database-issues#7660 (error not handled properly)
  283. # # server: certuser, client: verify-identity => OK
  284. # > CREATE CONNECTION mysql_conn TO MYSQL (
  285. # HOST mysql,
  286. # USER certuser,
  287. # SSL MODE verify_identity,
  288. # SSL CERTIFICATE SECRET ssl_cert,
  289. # SSL KEY SECRET ssl_key,
  290. # SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  291. # );
  292. # > CREATE SOURCE "mz_source"
  293. # FROM MYSQL CONNECTION mysql_conn;
  294. # > CREATE TABLE numbers FROM SOURCE "mz_source" (REFERENCE public.numbers);
  295. # > SELECT * FROM "numbers";
  296. # 1 1 one
  297. # $ mysql-execute name=mysql
  298. # INSERT INTO numbers VALUES (2, true, 'two');
  299. # > SELECT * FROM "numbers";
  300. # 1 1 one
  301. # 2 1 two
  302. # > DROP SOURCE "mz_source" CASCADE;
  303. # > DROP CONNECTION mysql_conn;
  304. # $ mysql-execute name=mysql
  305. # DELETE FROM numbers WHERE number = 2;
  306. # missing sslcert
  307. ! CREATE CONNECTION mysql_conn TO MYSQL (
  308. HOST mysql,
  309. USER certuser,
  310. SSL MODE verify_full,
  311. SSL CERTIFICATE SECRET noexist,
  312. SSL KEY SECRET ssl_key,
  313. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  314. );
  315. contains:unknown catalog item 'noexist'
  316. # missing sslkey
  317. ! CREATE CONNECTION mysql_conn TO MYSQL (
  318. HOST mysql,
  319. USER certuser,
  320. SSL MODE verify_full,
  321. SSL CERTIFICATE SECRET ssl_cert,
  322. SSL KEY SECRET noexist,
  323. SSL CERTIFICATE AUTHORITY SECRET ssl_ca
  324. );
  325. contains:unknown catalog item 'noexist'
  326. # missing sslrootcert
  327. ! CREATE CONNECTION mysql_conn TO MYSQL (
  328. HOST mysql,
  329. USER certuser,
  330. SSL MODE verify_full,
  331. SSL CERTIFICATE SECRET ssl_cert,
  332. SSL KEY SECRET ssl_key,
  333. SSL CERTIFICATE AUTHORITY SECRET noexist
  334. );
  335. contains:unknown catalog item 'noexist'
  336. # require both sslcert and sslkey
  337. ! CREATE CONNECTION mysql_conn TO MYSQL (
  338. HOST mysql,
  339. USER certuser,
  340. SSL MODE verify_full,
  341. SSL CERTIFICATE SECRET ssl_cert
  342. );
  343. contains:invalid CONNECTION: both SSL KEY and SSL CERTIFICATE are required
  344. ! CREATE CONNECTION mysql_conn TO MYSQL (
  345. HOST mysql,
  346. USER certuser,
  347. SSL MODE verify_full,
  348. SSL KEY SECRET ssl_cert
  349. );
  350. contains:invalid CONNECTION: both SSL KEY and SSL CERTIFICATE are required