role_membership.slt 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932
  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. mode cockroach
  10. reset-server
  11. # Give materialize the CREATEROLE system privilege.
  12. simple conn=mz_system,user=mz_system
  13. GRANT CREATEROLE ON SYSTEM TO materialize;
  14. ----
  15. COMPLETE 0
  16. statement ok
  17. CREATE VIEW role_members AS
  18. SELECT
  19. role.name AS role,
  20. member.name AS member,
  21. grantor.name AS grantor
  22. FROM mz_role_members membership
  23. LEFT JOIN mz_roles role ON membership.role_id = role.id
  24. LEFT JOIN mz_roles member ON membership.member = member.id
  25. LEFT JOIN mz_roles grantor ON membership.grantor = grantor.id
  26. statement ok
  27. CREATE ROLE joe
  28. statement ok
  29. CREATE ROLE group1
  30. query TTT rowsort
  31. SELECT * FROM role_members
  32. ----
  33. query B rowsort
  34. SELECT pg_has_role('joe', 'group1', 'USAGE')
  35. ----
  36. false
  37. query B rowsort
  38. SELECT has_role('joe', 'group1', 'USAGE')
  39. ----
  40. false
  41. query B rowsort
  42. SELECT pg_has_role((SELECT oid FROM mz_roles WHERE name = 'joe'), 'group1', 'USAGE')
  43. ----
  44. false
  45. query B rowsort
  46. SELECT has_role((SELECT oid FROM mz_roles WHERE name = 'joe'), 'group1', 'USAGE')
  47. ----
  48. false
  49. query B rowsort
  50. SELECT pg_has_role('joe', (SELECT oid FROM mz_roles WHERE name = 'group1'), 'USAGE')
  51. ----
  52. false
  53. query B rowsort
  54. SELECT has_role('joe', (SELECT oid FROM mz_roles WHERE name = 'group1'), 'USAGE')
  55. ----
  56. false
  57. query B rowsort
  58. SELECT pg_has_role((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_roles WHERE name = 'group1'), 'USAGE')
  59. ----
  60. false
  61. query B rowsort
  62. SELECT has_role((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_roles WHERE name = 'group1'), 'USAGE')
  63. ----
  64. false
  65. statement ok
  66. GRANT group1 TO joe
  67. query TTT rowsort
  68. SELECT * FROM role_members
  69. ----
  70. group1 joe mz_system
  71. query B rowsort
  72. SELECT pg_has_role('joe', 'group1', 'USAGE')
  73. ----
  74. true
  75. query B rowsort
  76. SELECT has_role('joe', 'group1', 'USAGE')
  77. ----
  78. true
  79. query B rowsort
  80. SELECT pg_has_role((SELECT oid FROM mz_roles WHERE name = 'joe'), 'group1', 'USAGE')
  81. ----
  82. true
  83. query B rowsort
  84. SELECT has_role((SELECT oid FROM mz_roles WHERE name = 'joe'), 'group1', 'USAGE')
  85. ----
  86. true
  87. query B rowsort
  88. SELECT pg_has_role('joe', (SELECT oid FROM mz_roles WHERE name = 'group1'), 'USAGE')
  89. ----
  90. true
  91. query B rowsort
  92. SELECT has_role('joe', (SELECT oid FROM mz_roles WHERE name = 'group1'), 'USAGE')
  93. ----
  94. true
  95. query B rowsort
  96. SELECT pg_has_role((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_roles WHERE name = 'group1'), 'USAGE')
  97. ----
  98. true
  99. query B rowsort
  100. SELECT has_role((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_roles WHERE name = 'group1'), 'USAGE')
  101. ----
  102. true
  103. # Dropping a role also removes it from role_members
  104. simple conn=mz_system,user=mz_system
  105. DROP ROLE group1
  106. ----
  107. COMPLETE 0
  108. query TTT rowsort
  109. SELECT * FROM mz_role_members
  110. ----
  111. statement ok
  112. CREATE ROLE group1
  113. query B rowsort
  114. SELECT pg_has_role('joe', 'group1', 'USAGE')
  115. ----
  116. false
  117. query B rowsort
  118. SELECT has_role('joe', 'group1', 'USAGE')
  119. ----
  120. false
  121. statement ok
  122. GRANT group1 TO joe
  123. query TTT rowsort
  124. SELECT * FROM role_members
  125. ----
  126. group1 joe mz_system
  127. query B rowsort
  128. SELECT pg_has_role('joe', 'group1', 'USAGE')
  129. ----
  130. true
  131. query B rowsort
  132. SELECT has_role('joe', 'group1', 'USAGE')
  133. ----
  134. true
  135. # Dropped roles have their membership revoked
  136. simple conn=mz_system,user=mz_system
  137. DROP ROLE joe
  138. ----
  139. COMPLETE 0
  140. query TTT rowsort
  141. SELECT * FROM mz_role_members
  142. ----
  143. statement ok
  144. CREATE ROLE joe
  145. statement ok
  146. GRANT group1 TO joe
  147. statement ok
  148. CREATE ROLE group2
  149. simple conn=mz_system,user=mz_system
  150. GRANT group2 TO joe
  151. ----
  152. COMPLETE 0
  153. query TTT rowsort
  154. SELECT * FROM role_members
  155. ----
  156. group1 joe mz_system
  157. group2 joe mz_system
  158. query B rowsort
  159. SELECT pg_has_role('joe', 'group1', 'USAGE')
  160. ----
  161. true
  162. query B rowsort
  163. SELECT has_role('joe', 'group1', 'USAGE')
  164. ----
  165. true
  166. query B rowsort
  167. SELECT pg_has_role('joe', 'group2', 'USAGE')
  168. ----
  169. true
  170. query B rowsort
  171. SELECT has_role('joe', 'group2', 'USAGE')
  172. ----
  173. true
  174. query B rowsort
  175. SELECT pg_has_role('group1', 'group2', 'USAGE')
  176. ----
  177. false
  178. query B rowsort
  179. SELECT has_role('group1', 'group2', 'USAGE')
  180. ----
  181. false
  182. statement ok
  183. GRANT group2 TO group1
  184. query TTT rowsort
  185. SELECT * FROM role_members
  186. ----
  187. group1 joe mz_system
  188. group2 joe mz_system
  189. group2 group1 mz_system
  190. query B rowsort
  191. SELECT pg_has_role('joe', 'group1', 'USAGE')
  192. ----
  193. true
  194. query B rowsort
  195. SELECT has_role('joe', 'group1', 'USAGE')
  196. ----
  197. true
  198. query B rowsort
  199. SELECT pg_has_role('joe', 'group2', 'USAGE')
  200. ----
  201. true
  202. query B rowsort
  203. SELECT has_role('joe', 'group2', 'USAGE')
  204. ----
  205. true
  206. query B rowsort
  207. SELECT pg_has_role('group1', 'group2', 'USAGE')
  208. ----
  209. true
  210. query B rowsort
  211. SELECT has_role('group1', 'group2', 'USAGE')
  212. ----
  213. true
  214. # Redundant grants don't error or show up multiple times in mz_role_membership or change the grantor
  215. simple conn=mz_system,user=mz_system
  216. GRANT group1 TO joe
  217. ----
  218. COMPLETE 0
  219. query TTT rowsort
  220. SELECT * FROM role_members
  221. ----
  222. group1 joe mz_system
  223. group2 joe mz_system
  224. group2 group1 mz_system
  225. # Test circular membership errors
  226. statement error role "joe" is a member of role "joe"
  227. GRANT joe TO joe
  228. statement error role "joe" is a member of role "group1"
  229. GRANT joe TO group1
  230. statement ok
  231. REVOKE group1 FROM joe
  232. query TTT rowsort
  233. SELECT * FROM role_members
  234. ----
  235. group2 joe mz_system
  236. group2 group1 mz_system
  237. query B rowsort
  238. SELECT pg_has_role('joe', 'group2', 'USAGE')
  239. ----
  240. true
  241. query B rowsort
  242. SELECT has_role('joe', 'group2', 'USAGE')
  243. ----
  244. true
  245. query B rowsort
  246. SELECT pg_has_role('joe', 'group1', 'USAGE')
  247. ----
  248. false
  249. query B rowsort
  250. SELECT has_role('joe', 'group1', 'USAGE')
  251. ----
  252. false
  253. query B rowsort
  254. SELECT pg_has_role('group1', 'joe', 'USAGE')
  255. ----
  256. false
  257. query B rowsort
  258. SELECT has_role('group1', 'joe', 'USAGE')
  259. ----
  260. false
  261. query B rowsort
  262. SELECT pg_has_role('group1', 'group2', 'USAGE')
  263. ----
  264. true
  265. query B rowsort
  266. SELECT has_role('group1', 'group2', 'USAGE')
  267. ----
  268. true
  269. query B rowsort
  270. SELECT pg_has_role('group2', 'joe', 'USAGE')
  271. ----
  272. false
  273. query B rowsort
  274. SELECT has_role('group2', 'joe', 'USAGE')
  275. ----
  276. false
  277. query B rowsort
  278. SELECT pg_has_role('group2', 'group1', 'USAGE')
  279. ----
  280. false
  281. query B rowsort
  282. SELECT has_role('group2', 'group1', 'USAGE')
  283. ----
  284. false
  285. # Redundant revokes don't error
  286. statement ok
  287. REVOKE group1 FROM joe
  288. query TTT rowsort
  289. SELECT * FROM role_members
  290. ----
  291. group2 joe mz_system
  292. group2 group1 mz_system
  293. # Dropped roles are revoked from all members
  294. statement ok
  295. DROP ROLE group2
  296. query TTT rowsort
  297. SELECT * FROM mz_role_members
  298. ----
  299. query TTT rowsort
  300. SELECT * FROM role_members
  301. ----
  302. # Dropped roles have their membership revoked
  303. statement ok
  304. DROP ROLE joe
  305. query TTT rowsort
  306. SELECT * FROM role_members
  307. ----
  308. statement ok
  309. CREATE ROLE joe
  310. # Cannot grant or revoke system role
  311. statement error db error: ERROR: role name "mz_system" cannot be granted
  312. GRANT mz_system TO joe
  313. statement error role name "mz_system" is reserved
  314. GRANT joe TO mz_system
  315. statement error db error: ERROR: role name "mz_system" cannot be granted
  316. REVOKE mz_system FROM joe
  317. statement error role name "mz_system" is reserved
  318. REVOKE joe FROM mz_system
  319. # Prevent granting and revoking to/from PUBLIC role
  320. statement error role name "public" is reserved
  321. GRANT group1 TO public
  322. statement error db error: ERROR: role name "public" cannot be granted
  323. GRANT public TO group1
  324. statement error role name "public" is reserved
  325. REVOKE group1 FROM public
  326. statement error db error: ERROR: role name "public" cannot be granted
  327. REVOKE public FROM group1
  328. statement ok
  329. DROP ROLE group1
  330. statement ok
  331. DROP ROLE joe
  332. # SHOW ROLES/USERS
  333. query TT rowsort
  334. show roles
  335. ----
  336. materialize (empty)
  337. query TT rowsort
  338. show users
  339. ----
  340. materialize (empty)
  341. # Test grant/revoke multiple roles
  342. statement ok
  343. CREATE ROLE joe
  344. statement ok
  345. CREATE ROLE group1
  346. statement ok
  347. CREATE ROLE group2
  348. statement ok
  349. CREATE ROLE group3
  350. statement error unknown role 'bob'
  351. GRANT group3 TO joe, group1, bob
  352. query TTT rowsort
  353. SELECT * FROM role_members
  354. ----
  355. statement error role name "mz_system" is reserved
  356. GRANT group3 TO joe, group1, mz_system
  357. query TTT rowsort
  358. SELECT * FROM role_members
  359. ----
  360. statement ok
  361. GRANT group3 TO joe, group1
  362. query TTT rowsort
  363. SELECT * FROM role_members
  364. ----
  365. group3 joe mz_system
  366. group3 group1 mz_system
  367. statement error role "joe" is a member of role "group3"
  368. GRANT joe TO group1, group3
  369. query TTT rowsort
  370. SELECT * FROM role_members
  371. ----
  372. group3 joe mz_system
  373. group3 group1 mz_system
  374. statement ok
  375. GRANT group3 TO group1, group2
  376. query TTT rowsort
  377. SELECT * FROM role_members
  378. ----
  379. group3 joe mz_system
  380. group3 group1 mz_system
  381. group3 group2 mz_system
  382. statement error unknown role 'bob'
  383. REVOKE group3 FROM joe, group1, bob
  384. query TTT rowsort
  385. SELECT * FROM role_members
  386. ----
  387. group3 joe mz_system
  388. group3 group1 mz_system
  389. group3 group2 mz_system
  390. statement error role name "mz_system" is reserved
  391. REVOKE group3 FROM joe, group1, mz_system
  392. query TTT rowsort
  393. SELECT * FROM role_members
  394. ----
  395. group3 joe mz_system
  396. group3 group1 mz_system
  397. group3 group2 mz_system
  398. statement ok
  399. REVOKE group3 FROM joe, group1
  400. query TTT rowsort
  401. SELECT * FROM role_members
  402. ----
  403. group3 group2 mz_system
  404. statement ok
  405. REVOKE group3 FROM joe, group2
  406. query TTT rowsort
  407. SELECT * FROM role_members
  408. ----
  409. # Test pg_auth_members
  410. statement ok
  411. GRANT group3 TO joe, group1, group2
  412. statement ok
  413. GRANT group1 TO joe
  414. query I rowsort
  415. SELECT COUNT(*) FROM pg_auth_members
  416. ----
  417. 4
  418. query TTTB rowsort
  419. SELECT role.name, member.name, grantor.name, members.admin_option
  420. FROM pg_auth_members members
  421. LEFT JOIN mz_roles role ON members.roleid = role.oid
  422. LEFT JOIN mz_roles member ON members.member = member.oid
  423. LEFT JOIN mz_roles grantor ON members.grantor = grantor.oid
  424. ----
  425. group1 joe mz_system false
  426. group3 joe mz_system false
  427. group3 group1 mz_system false
  428. group3 group2 mz_system false
  429. statement ok
  430. DROP ROLE group1, group2, group3, joe
  431. statement ok
  432. CREATE ROLE joe
  433. statement ok
  434. CREATE ROLE mike
  435. statement ok
  436. CREATE ROLE group1
  437. statement ok
  438. CREATE ROLE group2
  439. statement ok
  440. GRANT group1, group2 TO joe, mike
  441. query TTTB rowsort
  442. SELECT role.name, member.name, grantor.name, members.admin_option
  443. FROM pg_auth_members members
  444. LEFT JOIN mz_roles role ON members.roleid = role.oid
  445. LEFT JOIN mz_roles member ON members.member = member.oid
  446. LEFT JOIN mz_roles grantor ON members.grantor = grantor.oid
  447. ----
  448. group1 joe mz_system false
  449. group2 joe mz_system false
  450. group1 mike mz_system false
  451. group2 mike mz_system false
  452. statement ok
  453. REVOKE group1, group2 FROM joe, mike
  454. query TTTB rowsort
  455. SELECT role.name, member.name, grantor.name, members.admin_option
  456. FROM pg_auth_members members
  457. LEFT JOIN mz_roles role ON members.roleid = role.oid
  458. LEFT JOIN mz_roles member ON members.member = member.oid
  459. LEFT JOIN mz_roles grantor ON members.grantor = grantor.oid
  460. ----
  461. statement ok
  462. DROP ROLE group1, group2, joe, mike
  463. # Test recursive check of pg_has_role
  464. simple conn=mz_system,user=mz_system
  465. CREATE ROLE group1;
  466. ----
  467. COMPLETE 0
  468. simple conn=mz_system,user=mz_system
  469. CREATE ROLE group2;
  470. ----
  471. COMPLETE 0
  472. simple conn=mz_system,user=mz_system
  473. CREATE ROLE joe;
  474. ----
  475. COMPLETE 0
  476. simple conn=mz_system,user=mz_system
  477. CREATE ROLE other;
  478. ----
  479. COMPLETE 0
  480. simple conn=mz_system,user=mz_system
  481. GRANT group1 to joe;
  482. ----
  483. COMPLETE 0
  484. simple conn=mz_system,user=mz_system
  485. GRANT group2 to group1;
  486. ----
  487. COMPLETE 0
  488. simple conn=mz_system,user=mz_system
  489. GRANT group1 to other;
  490. ----
  491. COMPLETE 0
  492. query B rowsort
  493. SELECT pg_has_role('joe', 'group2', 'USAGE')
  494. ----
  495. true
  496. query B rowsort
  497. SELECT has_role('joe', 'group2', 'USAGE')
  498. ----
  499. true
  500. query B rowsort
  501. SELECT pg_has_role('joe', 'group1', 'USAGE')
  502. ----
  503. true
  504. query B rowsort
  505. SELECT has_role('joe', 'group1', 'USAGE')
  506. ----
  507. true
  508. query B rowsort
  509. SELECT pg_has_role('group1', 'joe', 'USAGE')
  510. ----
  511. false
  512. query B rowsort
  513. SELECT has_role('group1', 'joe', 'USAGE')
  514. ----
  515. false
  516. query B rowsort
  517. SELECT pg_has_role('group1', 'group2', 'USAGE')
  518. ----
  519. true
  520. query B rowsort
  521. SELECT has_role('group1', 'group2', 'USAGE')
  522. ----
  523. true
  524. query B rowsort
  525. SELECT pg_has_role('group2', 'joe', 'USAGE')
  526. ----
  527. false
  528. query B rowsort
  529. SELECT has_role('group2', 'joe', 'USAGE')
  530. ----
  531. false
  532. query B rowsort
  533. SELECT pg_has_role('group2', 'group1', 'USAGE')
  534. ----
  535. false
  536. query B rowsort
  537. SELECT has_role('group2', 'group1', 'USAGE')
  538. ----
  539. false
  540. simple conn=mz_system,user=mz_system
  541. DROP ROLE group1, group2, joe, other;
  542. ----
  543. COMPLETE 0
  544. # Test two input variant of pg_has_role.
  545. simple conn=mz_system,user=mz_system
  546. CREATE ROLE group1;
  547. ----
  548. COMPLETE 0
  549. query B rowsort
  550. SELECT pg_has_role('group1', 'USAGE')
  551. ----
  552. false
  553. query B rowsort
  554. SELECT has_role('group1', 'USAGE')
  555. ----
  556. false
  557. query B rowsort
  558. SELECT pg_has_role('group1', 'MEMBER')
  559. ----
  560. false
  561. query B rowsort
  562. SELECT has_role('group1', 'MEMBER')
  563. ----
  564. false
  565. simple conn=mz_system,user=mz_system
  566. GRANT group1 TO materialize
  567. ----
  568. COMPLETE 0
  569. query B rowsort
  570. SELECT pg_has_role('group1', 'USAGE')
  571. ----
  572. true
  573. query B rowsort
  574. SELECT has_role('group1', 'USAGE')
  575. ----
  576. true
  577. query B rowsort
  578. SELECT pg_has_role('group1', 'MEMBER')
  579. ----
  580. true
  581. query B rowsort
  582. SELECT has_role('group1', 'MEMBER')
  583. ----
  584. true
  585. simple conn=mz_system,user=mz_system
  586. REVOKE group1 FROM materialize
  587. ----
  588. COMPLETE 0
  589. query B rowsort
  590. SELECT pg_has_role('group1', 'USAGE')
  591. ----
  592. false
  593. query B rowsort
  594. SELECT has_role('group1', 'USAGE')
  595. ----
  596. false
  597. query B rowsort
  598. SELECT pg_has_role('group1', 'MEMBER')
  599. ----
  600. false
  601. query B rowsort
  602. SELECT has_role('group1', 'MEMBER')
  603. ----
  604. false
  605. simple conn=mz_system,user=mz_system
  606. DROP ROLE group1
  607. ----
  608. COMPLETE 0
  609. # Test pg_has_role error scenarios.
  610. ## If any input is NULL then the result is NULL.
  611. query B rowsort
  612. SELECT pg_has_role(NULL, 'materialize', 'USAGE')
  613. ----
  614. NULL
  615. query B rowsort
  616. SELECT has_role(NULL, 'materialize', 'USAGE')
  617. ----
  618. NULL
  619. query B rowsort
  620. SELECT pg_has_role('materialize', NULL, 'MEMBER')
  621. ----
  622. NULL
  623. query B rowsort
  624. SELECT has_role('materialize', NULL, 'MEMBER')
  625. ----
  626. NULL
  627. query B rowsort
  628. SELECT pg_has_role('materialize', 'materialize', NULL)
  629. ----
  630. NULL
  631. query B rowsort
  632. SELECT has_role('materialize', 'materialize', NULL)
  633. ----
  634. NULL
  635. ## If any of the text inputs are invalid then the query should error.
  636. query error role "fake-role" does not exist
  637. SELECT pg_has_role('fake-role', 'materialize', 'USAGE')
  638. query error role "fake-role" does not exist
  639. SELECT pg_has_role('materialize', 'fake-role', 'USAGE')
  640. query error unrecognized privilege type: "fake privilege"
  641. SELECT pg_has_role('materialize', 'materialize', 'fake privilege')
  642. ## If any of the oid inputs are invalid then the query should be false.
  643. query B rowsort
  644. SELECT pg_has_role(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'materialize', 'MEMBER')
  645. ----
  646. false
  647. query B rowsort
  648. SELECT has_role(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'materialize', 'MEMBER')
  649. ----
  650. false
  651. query B rowsort
  652. SELECT pg_has_role('materialize', ((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'USAGE')
  653. ----
  654. false
  655. query B rowsort
  656. SELECT has_role('materialize', ((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'USAGE')
  657. ----
  658. false
  659. ## Public role isn't accepted
  660. query error role "public" does not exist
  661. SELECT pg_has_role('materialize', 'public', 'USAGE')
  662. query error role "public" does not exist
  663. SELECT pg_has_role('public', 'materialize', 'USAGE')
  664. # Test information_schema.applicable_roles
  665. statement ok
  666. CREATE ROLE r1
  667. statement ok
  668. CREATE ROLE r2
  669. statement ok
  670. CREATE ROLE r3
  671. statement ok
  672. CREATE ROLE r4
  673. statement ok
  674. GRANT r2 TO r1
  675. statement ok
  676. GRANT r3 TO r2
  677. statement ok
  678. GRANT r3 TO r4
  679. simple conn=r1,user=r1
  680. SELECT * FROM information_schema.applicable_roles
  681. ----
  682. r1,r2,NO
  683. r2,r3,NO
  684. COMPLETE 2
  685. simple conn=mz_system,user=mz_system
  686. SELECT * FROM information_schema.applicable_roles
  687. ----
  688. r1,r2,NO
  689. r2,r3,NO
  690. r4,r3,NO
  691. COMPLETE 3
  692. simple conn=r1,user=r1,rowsort
  693. SELECT * FROM information_schema.enabled_roles
  694. ----
  695. r1
  696. r2
  697. r3
  698. COMPLETE 3
  699. simple conn=mz_system,user=mz_system,rowsort
  700. SELECT * FROM information_schema.enabled_roles
  701. ----
  702. r1
  703. r2
  704. r3
  705. r4
  706. mz_system
  707. mz_monitor
  708. mz_support
  709. materialize
  710. mz_analytics
  711. mz_monitor_redacted
  712. COMPLETE 10
  713. statement ok
  714. DROP ROLE r1, r2, r3, r4
  715. # Disable RBAC checks
  716. simple conn=mz_system,user=mz_system
  717. ALTER SYSTEM SET enable_rbac_checks TO false;
  718. ----
  719. COMPLETE 0