privilege-checks.td 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  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. # Test privilege checks of creating sinks. All other tests are implemented in SQLogicTests
  10. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  11. ALTER SYSTEM SET enable_connection_validation_syntax = true
  12. $ postgres-connect name=mz_system url=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  13. $ postgres-execute connection=mz_system
  14. ALTER SYSTEM SET enable_rbac_checks TO true;
  15. CREATE CONNECTION kafka_conn TO KAFKA (BROKER '${testdrive.kafka-addr}', SECURITY PROTOCOL PLAINTEXT);
  16. CREATE CONNECTION IF NOT EXISTS csr_conn TO CONFLUENT SCHEMA REGISTRY (URL '${testdrive.schema-registry-url}');
  17. CREATE TABLE t (a INT);
  18. REVOKE USAGE ON SCHEMA materialize.public FROM PUBLIC;
  19. REVOKE USAGE ON DATABASE materialize FROM PUBLIC;
  20. REVOKE USAGE ON CLUSTER quickstart FROM PUBLIC;
  21. REVOKE ALL PRIVILEGES ON SCHEMA materialize.public FROM materialize;
  22. REVOKE ALL PRIVILEGES ON DATABASE materialize FROM materialize;
  23. REVOKE ALL PRIVILEGES ON CLUSTER quickstart FROM materialize;
  24. REVOKE ALL PRIVILEGES ON SYSTEM FROM materialize;
  25. # CREATE CLUSTER
  26. ! CREATE CLUSTER c REPLICAS (r1 (SIZE '1'));
  27. contains:permission denied for SYSTEM
  28. $ postgres-execute connection=mz_system
  29. GRANT CREATECLUSTER ON SYSTEM TO materialize;
  30. > CREATE CLUSTER c REPLICAS (r1 (SIZE '1'));
  31. $ postgres-execute connection=mz_system
  32. REVOKE ALL PRIVILEGES ON SYSTEM FROM materialize;
  33. # CREATE SINK
  34. $ postgres-execute connection=mz_system
  35. CREATE CLUSTER sink_cluster REPLICAS (r1 (SIZE '1'));
  36. ! CREATE SINK s
  37. IN CLUSTER sink_cluster
  38. FROM t
  39. INTO KAFKA CONNECTION kafka_conn (TOPIC 'output-${testdrive.seed}')
  40. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  41. ENVELOPE DEBEZIUM
  42. contains:permission denied for SCHEMA "materialize.public"
  43. $ postgres-execute connection=mz_system
  44. GRANT USAGE ON SCHEMA materialize.public TO materialize;
  45. ! CREATE SINK s
  46. IN CLUSTER sink_cluster
  47. FROM t
  48. INTO KAFKA CONNECTION kafka_conn (TOPIC 'output-${testdrive.seed}')
  49. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  50. ENVELOPE DEBEZIUM
  51. contains:permission denied for CONNECTION "materialize.public.kafka_conn"
  52. $ postgres-execute connection=mz_system
  53. GRANT USAGE ON CONNECTION kafka_conn TO materialize;
  54. ! CREATE SINK s
  55. IN CLUSTER sink_cluster
  56. FROM t
  57. INTO KAFKA CONNECTION kafka_conn (TOPIC 'output-${testdrive.seed}')
  58. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  59. ENVELOPE DEBEZIUM
  60. contains:permission denied for CONNECTION "materialize.public.csr_conn"
  61. $ postgres-execute connection=mz_system
  62. GRANT USAGE ON CONNECTION csr_conn TO materialize;
  63. ! CREATE SINK s
  64. IN CLUSTER sink_cluster
  65. FROM t
  66. INTO KAFKA CONNECTION kafka_conn (TOPIC 'output-${testdrive.seed}')
  67. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  68. ENVELOPE DEBEZIUM
  69. contains:permission denied for SCHEMA "materialize.public"
  70. $ postgres-execute connection=mz_system
  71. GRANT CREATE ON SCHEMA materialize.public TO materialize;
  72. ! CREATE SINK s
  73. IN CLUSTER sink_cluster
  74. FROM t
  75. INTO KAFKA CONNECTION kafka_conn (TOPIC 'output-${testdrive.seed}')
  76. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  77. ENVELOPE DEBEZIUM
  78. contains:permission denied for TABLE "materialize.public.t"
  79. $ postgres-execute connection=mz_system
  80. GRANT SELECT ON TABLE t TO materialize;
  81. ! CREATE SINK s
  82. IN CLUSTER sink_cluster
  83. FROM t
  84. INTO KAFKA CONNECTION kafka_conn (TOPIC 'output-${testdrive.seed}')
  85. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  86. ENVELOPE DEBEZIUM
  87. contains:permission denied for CLUSTER "sink_cluster"
  88. $ postgres-execute connection=mz_system
  89. GRANT CREATE ON CLUSTER sink_cluster TO materialize;
  90. > CREATE SINK s
  91. IN CLUSTER sink_cluster
  92. FROM t
  93. INTO KAFKA CONNECTION kafka_conn (TOPIC 'output-${testdrive.seed}')
  94. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  95. ENVELOPE DEBEZIUM
  96. $ postgres-execute connection=mz_system
  97. REVOKE CREATE, USAGE ON SCHEMA materialize.public FROM materialize;
  98. REVOKE USAGE ON CONNECTION kafka_conn, csr_conn FROM materialize;
  99. REVOKE SELECT ON TABLE t FROM materialize;
  100. REVOKE CREATECLUSTER ON SYSTEM FROM materialize;
  101. REVOKE CREATE ON CLUSTER sink_cluster FROM materialize;
  102. DROP SINK s;
  103. DROP TABLE t;
  104. DROP CLUSTER sink_cluster;
  105. # CREATE CONNECTION
  106. $ postgres-execute connection=mz_system
  107. CREATE SECRET confluent_username AS 'materialize';
  108. CREATE SECRET confluent_password AS 'password';
  109. ! CREATE CONNECTION conn TO KAFKA (
  110. BROKER '${testdrive.kafka-addr}',
  111. SASL MECHANISMS = 'PLAIN',
  112. SASL USERNAME = SECRET confluent_username,
  113. SASL PASSWORD = SECRET confluent_password
  114. ) WITH (VALIDATE = false);
  115. contains:permission denied for SCHEMA "materialize.public"
  116. $ postgres-execute connection=mz_system
  117. GRANT USAGE ON SCHEMA materialize.public TO materialize;
  118. ! CREATE CONNECTION conn TO KAFKA (
  119. BROKER '${testdrive.kafka-addr}',
  120. SASL MECHANISMS = 'PLAIN',
  121. SASL USERNAME = SECRET confluent_username,
  122. SASL PASSWORD = SECRET confluent_password
  123. ) WITH (VALIDATE = false);
  124. contains:permission denied for SECRET "materialize.public.confluent_username"
  125. $ postgres-execute connection=mz_system
  126. GRANT USAGE ON SECRET confluent_username TO materialize;
  127. ! CREATE CONNECTION conn TO KAFKA (
  128. BROKER '${testdrive.kafka-addr}',
  129. SASL MECHANISMS = 'PLAIN',
  130. SASL USERNAME = SECRET confluent_username,
  131. SASL PASSWORD = SECRET confluent_password
  132. ) WITH (VALIDATE = false);
  133. contains:permission denied for SECRET "materialize.public.confluent_password"
  134. $ postgres-execute connection=mz_system
  135. GRANT USAGE ON SECRET confluent_password TO materialize;
  136. ! CREATE CONNECTION conn TO KAFKA (
  137. BROKER '${testdrive.kafka-addr}',
  138. SASL MECHANISMS = 'PLAIN',
  139. SASL USERNAME = SECRET confluent_username,
  140. SASL PASSWORD = SECRET confluent_password
  141. ) WITH (VALIDATE = false);
  142. contains:permission denied for SCHEMA "materialize.public"
  143. $ postgres-execute connection=mz_system
  144. GRANT CREATE ON SCHEMA materialize.public TO materialize;
  145. > CREATE CONNECTION conn TO KAFKA (
  146. BROKER '${testdrive.kafka-addr}',
  147. SASL MECHANISMS = 'PLAIN',
  148. SASL USERNAME = SECRET confluent_username,
  149. SASL PASSWORD = SECRET confluent_password
  150. ) WITH (VALIDATE = false);
  151. $ postgres-execute connection=mz_system
  152. REVOKE CREATE, USAGE ON SCHEMA materialize.public FROM materialize;
  153. REVOKE USAGE ON SECRET confluent_username, confluent_password FROM materialize;
  154. DROP CONNECTION conn;
  155. DROP SECRET confluent_username;
  156. DROP SECRET confluent_password;
  157. ## CREATE SOURCE
  158. $ kafka-create-topic topic=rbac partitions=1
  159. $ set int-schema={"type": "record", "name": "schema_int", "fields": [ {"name": "f1", "type": "int"} ] }
  160. $ kafka-ingest format=avro topic=rbac schema=${int-schema} timestamp=1
  161. {"f1": 123}
  162. $ postgres-execute connection=mz_system
  163. GRANT CREATECLUSTER ON SYSTEM TO materialize;
  164. > CREATE CLUSTER source_cluster REPLICAS (r1 (SIZE '1'));
  165. ! CREATE SOURCE s
  166. IN CLUSTER source_cluster
  167. FROM KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-rbac-${testdrive.seed}')
  168. contains:permission denied for SCHEMA "materialize.public"
  169. $ postgres-execute connection=mz_system
  170. GRANT USAGE ON SCHEMA materialize.public TO materialize;
  171. ! CREATE SOURCE s
  172. IN CLUSTER source_cluster
  173. FROM KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-rbac-${testdrive.seed}')
  174. contains:permission denied for CONNECTION "materialize.public.kafka_conn"
  175. $ postgres-execute connection=mz_system
  176. GRANT USAGE ON CONNECTION kafka_conn TO materialize;
  177. ! CREATE SOURCE s
  178. IN CLUSTER source_cluster
  179. FROM KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-rbac-${testdrive.seed}')
  180. contains:permission denied for SCHEMA "materialize.public"
  181. $ postgres-execute connection=mz_system
  182. GRANT CREATE ON SCHEMA materialize.public TO materialize;
  183. > CREATE SOURCE s
  184. IN CLUSTER source_cluster
  185. FROM KAFKA CONNECTION kafka_conn (TOPIC 'testdrive-rbac-${testdrive.seed}')
  186. ! CREATE TABLE s_tbl FROM SOURCE s (REFERENCE "testdrive-rbac-${testdrive.seed}")
  187. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  188. ENVELOPE NONE
  189. contains:permission denied for CONNECTION "materialize.public.csr_conn"
  190. $ postgres-execute connection=mz_system
  191. GRANT USAGE ON CONNECTION csr_conn TO materialize;
  192. > CREATE TABLE s_tbl FROM SOURCE s (REFERENCE "testdrive-rbac-${testdrive.seed}")
  193. FORMAT AVRO USING CONFLUENT SCHEMA REGISTRY CONNECTION csr_conn
  194. ENVELOPE NONE