privileges_pg.slt 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553
  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. # Loosely based on https://github.com/postgres/postgres/blob/master/src/test/regress/expected/privileges.out
  10. mode cockroach
  11. reset-server
  12. simple conn=mz_system,user=mz_system
  13. ALTER SYSTEM SET enable_rbac_checks TO true;
  14. ----
  15. COMPLETE 0
  16. simple conn=mz_system,user=mz_system
  17. CREATE ROLE regress_priv_user1;
  18. ----
  19. COMPLETE 0
  20. simple conn=mz_system,user=mz_system
  21. CREATE ROLE regress_priv_user2;
  22. ----
  23. COMPLETE 0
  24. simple conn=mz_system,user=mz_system
  25. CREATE ROLE regress_priv_user3;
  26. ----
  27. COMPLETE 0
  28. simple conn=mz_system,user=mz_system
  29. CREATE ROLE regress_priv_user4;
  30. ----
  31. COMPLETE 0
  32. simple conn=mz_system,user=mz_system
  33. CREATE ROLE regress_priv_user5;
  34. ----
  35. COMPLETE 0
  36. simple conn=mz_system,user=mz_system
  37. CREATE ROLE regress_priv_user5; -- duplicate
  38. ----
  39. db error: ERROR: role 'regress_priv_user5' already exists
  40. simple conn=mz_system,user=mz_system
  41. CREATE ROLE regress_priv_user6;
  42. ----
  43. COMPLETE 0
  44. simple conn=mz_system,user=mz_system
  45. GRANT CREATE, USAGE ON SCHEMA public TO regress_priv_user1;
  46. ----
  47. COMPLETE 0
  48. simple conn=mz_system,user=mz_system
  49. GRANT CREATE, USAGE ON SCHEMA public TO regress_priv_user3;
  50. ----
  51. COMPLETE 0
  52. simple conn=mz_system,user=mz_system
  53. GRANT CREATE, USAGE ON SCHEMA public TO regress_priv_user4;
  54. ----
  55. COMPLETE 0
  56. simple conn=mz_system,user=mz_system
  57. GRANT regress_priv_user2 TO regress_priv_user3;
  58. ----
  59. COMPLETE 0
  60. simple conn=mz_system,user=mz_system
  61. SELECT role.rolname, member.rolname, grantor.rolname, admin_option FROM pg_auth_members join pg_roles role on roleid = role.oid join pg_roles member on member = member.oid join pg_roles grantor on grantor = grantor.oid;
  62. ----
  63. regress_priv_user2,regress_priv_user3,mz_system,f
  64. COMPLETE 1
  65. # Role attributes are replaced with system privileges in Materialize.
  66. simple conn=mz_system,user=mz_system
  67. GRANT CREATEROLE ON SYSTEM TO regress_priv_user2;
  68. ----
  69. COMPLETE 0
  70. # Role attributes are replaced with system privileges in Materialize.
  71. simple conn=mz_system,user=mz_system
  72. GRANT CREATEROLE ON SYSTEM TO regress_priv_user3;
  73. ----
  74. COMPLETE 0
  75. simple conn=mz_system,user=mz_system
  76. GRANT regress_priv_user1 TO regress_priv_user5;
  77. ----
  78. COMPLETE 0
  79. simple conn=mz_system,user=mz_system
  80. GRANT regress_priv_user1 TO regress_priv_user6;
  81. ----
  82. COMPLETE 0
  83. simple conn=mz_system,user=mz_system
  84. GRANT create, usage ON cluster quickstart TO regress_priv_user1;
  85. ----
  86. COMPLETE 0
  87. simple conn=regress_priv_user3,user=regress_priv_user3
  88. GRANT regress_priv_user2 TO regress_priv_user4;
  89. ----
  90. COMPLETE 0
  91. simple conn=regress_priv_user3,user=regress_priv_user3
  92. REVOKE regress_priv_user2 FROM regress_priv_user3;
  93. ----
  94. COMPLETE 0
  95. simple conn=regress_priv_user3,user=regress_priv_user3
  96. BEGIN;
  97. ----
  98. COMPLETE 0
  99. simple conn=regress_priv_user3,user=regress_priv_user3
  100. REVOKE regress_priv_user2 FROM regress_priv_user4;
  101. ----
  102. COMPLETE 0
  103. simple conn=regress_priv_user3,user=regress_priv_user3
  104. ROLLBACK;
  105. ----
  106. COMPLETE 0
  107. simple conn=regress_priv_user3,user=regress_priv_user3
  108. BEGIN;
  109. ----
  110. COMPLETE 0
  111. simple conn=regress_priv_user3,user=regress_priv_user3
  112. GRANT regress_priv_user2 TO regress_priv_user4;
  113. ----
  114. COMPLETE 0
  115. simple conn=regress_priv_user3,user=regress_priv_user3
  116. ROLLBACK;
  117. ----
  118. COMPLETE 0
  119. # Need to remove system privileges in Materialize before dropping
  120. simple conn=mz_system,user=mz_system
  121. REVOKE CREATEROLE ON SYSTEM FROM regress_priv_user2;
  122. ----
  123. COMPLETE 0
  124. simple conn=regress_priv_user3,user=regress_priv_user3
  125. DROP ROLE regress_priv_user2;
  126. ----
  127. COMPLETE 0
  128. simple conn=regress_priv_user3,user=regress_priv_user3
  129. SELECT role.name, member.name from mz_role_members JOIN mz_roles role ON mz_role_members.role_id = role.id JOIN mz_roles member ON mz_role_members.member = member.id JOIN mz_roles grantor ON mz_role_members.grantor = grantor.id;
  130. ----
  131. regress_priv_user1,regress_priv_user5
  132. regress_priv_user1,regress_priv_user6
  133. COMPLETE 2
  134. simple conn=regress_priv_user3,user=regress_priv_user3
  135. CREATE ROLE regress_priv_user2;
  136. ----
  137. COMPLETE 0
  138. simple conn=mz_system,user=mz_system
  139. GRANT CREATE, USAGE ON SCHEMA public TO regress_priv_user2;
  140. ----
  141. COMPLETE 0
  142. simple conn=regress_priv_user1,user=regress_priv_user1
  143. CREATE TABLE atest1 ( a int, b text );
  144. ----
  145. COMPLETE 0
  146. simple conn=regress_priv_user1,user=regress_priv_user1
  147. SELECT * FROM atest1;
  148. ----
  149. COMPLETE 0
  150. simple conn=regress_priv_user1,user=regress_priv_user1
  151. INSERT INTO atest1 VALUES (1, 'one');
  152. ----
  153. COMPLETE 1
  154. simple conn=regress_priv_user1,user=regress_priv_user1
  155. DELETE FROM atest1;
  156. ----
  157. COMPLETE 1
  158. simple conn=regress_priv_user1,user=regress_priv_user1
  159. UPDATE atest1 SET a = 1 WHERE b = 'blech';
  160. ----
  161. COMPLETE 0
  162. simple conn=regress_priv_user1,user=regress_priv_user1
  163. REVOKE SELECT, INSERT, UPDATE, DELETE ON atest1 FROM PUBLIC;
  164. ----
  165. COMPLETE 0
  166. simple conn=regress_priv_user1,user=regress_priv_user1
  167. SELECT * FROM atest1;
  168. ----
  169. COMPLETE 0
  170. simple conn=regress_priv_user1,user=regress_priv_user1
  171. GRANT SELECT, INSERT, UPDATE, DELETE ON atest1 TO regress_priv_user2;
  172. ----
  173. COMPLETE 0
  174. simple conn=regress_priv_user1,user=regress_priv_user1
  175. GRANT SELECT ON atest1 TO regress_priv_user3;
  176. ----
  177. COMPLETE 0
  178. simple conn=regress_priv_user1,user=regress_priv_user1
  179. GRANT SELECT ON atest1 TO regress_priv_user4;
  180. ----
  181. COMPLETE 0
  182. simple conn=regress_priv_user1,user=regress_priv_user1
  183. SELECT * FROM atest1;
  184. ----
  185. COMPLETE 0
  186. simple conn=regress_priv_user1,user=regress_priv_user1
  187. CREATE TABLE atest2 (col1 varchar(10), col2 boolean);
  188. ----
  189. COMPLETE 0
  190. simple conn=regress_priv_user1,user=regress_priv_user1
  191. GRANT SELECT ON atest2 TO regress_priv_user2;
  192. ----
  193. COMPLETE 0
  194. simple conn=regress_priv_user1,user=regress_priv_user1
  195. GRANT UPDATE ON atest2 TO regress_priv_user3;
  196. ----
  197. COMPLETE 0
  198. simple conn=regress_priv_user1,user=regress_priv_user1
  199. GRANT INSERT ON atest2 TO regress_priv_user4;
  200. ----
  201. COMPLETE 0
  202. simple conn=regress_priv_user2,user=regress_priv_user2
  203. SELECT session_user, current_user;
  204. ----
  205. regress_priv_user2,regress_priv_user2
  206. COMPLETE 1
  207. simple conn=regress_priv_user2,user=regress_priv_user2
  208. SELECT * FROM atest1;
  209. ----
  210. COMPLETE 0
  211. simple conn=regress_priv_user2,user=regress_priv_user2
  212. SELECT * FROM atest2;
  213. ----
  214. COMPLETE 0
  215. simple conn=regress_priv_user2,user=regress_priv_user2
  216. INSERT INTO atest1 VALUES (2, 'two');
  217. ----
  218. COMPLETE 1
  219. simple conn=regress_priv_user2,user=regress_priv_user2
  220. INSERT INTO atest2 VALUES ('foo', true);
  221. ----
  222. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  223. DETAIL: The 'regress_priv_user2' role needs INSERT privileges on TABLE "materialize.public.atest2"
  224. simple conn=regress_priv_user2,user=regress_priv_user2
  225. INSERT INTO atest1 SELECT 1, b FROM atest1;
  226. ----
  227. COMPLETE 1
  228. simple conn=regress_priv_user2,user=regress_priv_user2
  229. UPDATE atest1 SET a = 1 WHERE a = 2; -- ok
  230. ----
  231. COMPLETE 1
  232. simple conn=regress_priv_user2,user=regress_priv_user2
  233. UPDATE atest2 SET col2 = NOT col2; -- fail
  234. ----
  235. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  236. DETAIL: The 'regress_priv_user2' role needs UPDATE privileges on TABLE "materialize.public.atest2"
  237. simple conn=regress_priv_user2,user=regress_priv_user2
  238. DELETE FROM atest2;
  239. ----
  240. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  241. DETAIL: The 'regress_priv_user2' role needs DELETE privileges on TABLE "materialize.public.atest2"
  242. simple conn=regress_priv_user2,user=regress_priv_user2
  243. COPY atest2 FROM stdin;
  244. ----
  245. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  246. DETAIL: The 'regress_priv_user2' role needs INSERT privileges on TABLE "materialize.public.atest2"
  247. simple conn=regress_priv_user2,user=regress_priv_user2
  248. GRANT SELECT ON atest1 TO PUBLIC;
  249. ----
  250. db error: ERROR: must be owner of TABLE materialize.public.atest1
  251. simple conn=regress_priv_user2,user=regress_priv_user2
  252. SELECT * FROM atest1 WHERE ( b IN ( SELECT col1 FROM atest2 ) );
  253. ----
  254. COMPLETE 0
  255. simple conn=regress_priv_user2,user=regress_priv_user2
  256. SELECT * FROM atest2 WHERE ( col1 IN ( SELECT b FROM atest1 ) );
  257. ----
  258. COMPLETE 0
  259. simple conn=regress_priv_user3,user=regress_priv_user3
  260. SELECT session_user, current_user;
  261. ----
  262. regress_priv_user3,regress_priv_user3
  263. COMPLETE 1
  264. simple conn=regress_priv_user3,user=regress_priv_user3
  265. SELECT * FROM atest1;
  266. ----
  267. 1,two
  268. 1,two
  269. COMPLETE 2
  270. simple conn=regress_priv_user3,user=regress_priv_user3
  271. SELECT * FROM atest2;
  272. ----
  273. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  274. DETAIL: The 'regress_priv_user3' role needs SELECT privileges on TABLE "materialize.public.atest2"
  275. simple conn=regress_priv_user3,user=regress_priv_user3
  276. INSERT INTO atest1 VALUES (2, 'two');
  277. ----
  278. db error: ERROR: permission denied for TABLE "materialize.public.atest1"
  279. DETAIL: The 'regress_priv_user3' role needs INSERT privileges on TABLE "materialize.public.atest1"
  280. simple conn=regress_priv_user3,user=regress_priv_user3
  281. INSERT INTO atest2 VALUES ('foo', true);
  282. ----
  283. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  284. DETAIL: The 'regress_priv_user3' role needs INSERT privileges on TABLE "materialize.public.atest2"
  285. simple conn=regress_priv_user3,user=regress_priv_user3
  286. INSERT INTO atest1 SELECT 1, b FROM atest1;
  287. ----
  288. db error: ERROR: permission denied for TABLE "materialize.public.atest1"
  289. DETAIL: The 'regress_priv_user3' role needs INSERT privileges on TABLE "materialize.public.atest1"
  290. simple conn=regress_priv_user3,user=regress_priv_user3
  291. UPDATE atest1 SET a = 1 WHERE a = 2;
  292. ----
  293. db error: ERROR: permission denied for TABLE "materialize.public.atest1"
  294. DETAIL: The 'regress_priv_user3' role needs UPDATE privileges on TABLE "materialize.public.atest1"
  295. # Intentional (and documented) difference, we require SELECT for UPDATE
  296. simple conn=regress_priv_user3,user=regress_priv_user3
  297. UPDATE atest2 SET col2 = NULL;
  298. ----
  299. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  300. DETAIL: The 'regress_priv_user3' role needs SELECT privileges on TABLE "materialize.public.atest2"
  301. simple conn=regress_priv_user3,user=regress_priv_user3
  302. UPDATE atest2 SET col2 = NOT col2; -- fails; requires SELECT on atest2
  303. ----
  304. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  305. DETAIL: The 'regress_priv_user3' role needs SELECT privileges on TABLE "materialize.public.atest2"
  306. simple conn=regress_priv_user3,user=regress_priv_user3
  307. DELETE FROM atest2;
  308. ----
  309. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  310. DETAIL: The 'regress_priv_user3' role needs DELETE privileges on TABLE "materialize.public.atest2"
  311. simple conn=regress_priv_user3,user=regress_priv_user3
  312. COPY atest2 FROM stdin;
  313. ----
  314. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  315. DETAIL: The 'regress_priv_user3' role needs INSERT privileges on TABLE "materialize.public.atest2"
  316. simple conn=regress_priv_user3,user=regress_priv_user3
  317. SELECT * FROM atest1 WHERE ( b IN ( SELECT col1 FROM atest2 ) );
  318. ----
  319. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  320. DETAIL: The 'regress_priv_user3' role needs SELECT privileges on TABLE "materialize.public.atest2"
  321. simple conn=regress_priv_user3,user=regress_priv_user3
  322. SELECT * FROM atest2 WHERE ( col1 IN ( SELECT b FROM atest1 ) );
  323. ----
  324. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  325. DETAIL: The 'regress_priv_user3' role needs SELECT privileges on TABLE "materialize.public.atest2"
  326. # Can't test COPY with SLT?
  327. #simple conn=regress_priv_user4,user=regress_priv_user4
  328. #COPY atest2 FROM stdin; -- ok
  329. #----
  330. #COMPLETE 0
  331. simple conn=regress_priv_user4,user=regress_priv_user4
  332. SELECT * FROM atest1; -- ok
  333. ----
  334. 1,two
  335. 1,two
  336. COMPLETE 2
  337. simple conn=regress_priv_user1,user=regress_priv_user1
  338. CREATE TABLE atest12 (a int, b int);
  339. ----
  340. COMPLETE 0
  341. simple conn=regress_priv_user1,user=regress_priv_user1
  342. INSERT INTO atest12 SELECT x AS a, 10001 - x AS b FROM generate_series(1,10000) x;
  343. ----
  344. COMPLETE 10000
  345. simple conn=regress_priv_user1,user=regress_priv_user1
  346. CREATE INDEX ON atest12 (a);
  347. ----
  348. COMPLETE 0
  349. simple conn=regress_priv_user1,user=regress_priv_user1
  350. CREATE INDEX ON atest12 (abs(a));
  351. ----
  352. COMPLETE 0
  353. simple conn=regress_priv_user3,user=regress_priv_user3
  354. CREATE VIEW atestv1 AS SELECT * FROM atest1; -- ok
  355. ----
  356. COMPLETE 0
  357. simple conn=regress_priv_user3,user=regress_priv_user3
  358. CREATE VIEW atestv2 AS SELECT * FROM atest2;
  359. ----
  360. COMPLETE 0
  361. simple conn=regress_priv_user3,user=regress_priv_user3
  362. SELECT * FROM atestv2;
  363. ----
  364. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  365. DETAIL: The 'regress_priv_user3' role needs SELECT privileges on TABLE "materialize.public.atest2"
  366. simple conn=regress_priv_user3,user=regress_priv_user3
  367. CREATE TABLE atest3 (one int, two int, three int);
  368. ----
  369. COMPLETE 0
  370. simple conn=regress_priv_user3,user=regress_priv_user3
  371. CREATE VIEW atestv3 AS SELECT * FROM atest3; -- ok
  372. ----
  373. COMPLETE 0
  374. simple conn=regress_priv_user3,user=regress_priv_user3
  375. CREATE VIEW atestv0 AS SELECT 0 as x WHERE false; -- ok
  376. ----
  377. COMPLETE 0
  378. simple conn=regress_priv_user3,user=regress_priv_user3
  379. SELECT * FROM atestv1; -- ok
  380. ----
  381. 1,two
  382. 1,two
  383. COMPLETE 2
  384. simple conn=regress_priv_user3,user=regress_priv_user3
  385. SELECT * FROM atestv2; -- fail
  386. ----
  387. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  388. DETAIL: The 'regress_priv_user3' role needs SELECT privileges on TABLE "materialize.public.atest2"
  389. simple conn=regress_priv_user3,user=regress_priv_user3
  390. GRANT SELECT ON atestv1 TO regress_priv_user4;
  391. ----
  392. COMPLETE 0
  393. simple conn=regress_priv_user3,user=regress_priv_user3
  394. GRANT SELECT ON atestv3 TO regress_priv_user4;
  395. ----
  396. COMPLETE 0
  397. simple conn=regress_priv_user3,user=regress_priv_user3
  398. GRANT SELECT ON atestv2 TO regress_priv_user2;
  399. ----
  400. COMPLETE 0
  401. simple conn=regress_priv_user4,user=regress_priv_user4
  402. SELECT * FROM atestv1;
  403. ----
  404. 1,two
  405. 1,two
  406. COMPLETE 2
  407. simple conn=regress_priv_user4,user=regress_priv_user4
  408. SELECT * FROM atestv2;
  409. ----
  410. db error: ERROR: permission denied for VIEW "materialize.public.atestv2"
  411. DETAIL: The 'regress_priv_user4' role needs SELECT privileges on VIEW "materialize.public.atestv2"
  412. simple conn=regress_priv_user4,user=regress_priv_user4
  413. SELECT * FROM atestv3;
  414. ----
  415. COMPLETE 0
  416. simple conn=regress_priv_user4,user=regress_priv_user4
  417. SELECT * FROM atestv0;
  418. ----
  419. db error: ERROR: permission denied for VIEW "materialize.public.atestv0"
  420. DETAIL: The 'regress_priv_user4' role needs SELECT privileges on VIEW "materialize.public.atestv0"
  421. simple conn=regress_priv_user4,user=regress_priv_user4
  422. CREATE VIEW atestv4 AS SELECT * FROM atestv3; -- nested view
  423. ----
  424. COMPLETE 0
  425. simple conn=regress_priv_user4,user=regress_priv_user4
  426. SELECT * FROM atestv4; -- ok
  427. ----
  428. COMPLETE 0
  429. simple conn=regress_priv_user4,user=regress_priv_user4
  430. GRANT SELECT ON atestv4 TO regress_priv_user2;
  431. ----
  432. COMPLETE 0
  433. simple conn=regress_priv_user2,user=regress_priv_user2
  434. SELECT * FROM atestv3;
  435. ----
  436. db error: ERROR: permission denied for VIEW "materialize.public.atestv3"
  437. DETAIL: The 'regress_priv_user2' role needs SELECT privileges on VIEW "materialize.public.atestv3"
  438. simple conn=regress_priv_user2,user=regress_priv_user2
  439. SELECT * FROM atestv4;
  440. ----
  441. COMPLETE 0
  442. simple conn=regress_priv_user2,user=regress_priv_user2
  443. SELECT * FROM atest2;
  444. ----
  445. COMPLETE 0
  446. simple conn=regress_priv_user2,user=regress_priv_user2
  447. SELECT * FROM atestv2;
  448. ----
  449. db error: ERROR: permission denied for TABLE "materialize.public.atest2"
  450. DETAIL: The 'regress_priv_user3' role needs SELECT privileges on TABLE "materialize.public.atest2"