privilege_grants.slt 98 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866
  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. simple conn=mz_system,user=mz_system
  12. ALTER SYSTEM SET enable_connection_validation_syntax TO true;
  13. ----
  14. COMPLETE 0
  15. statement ok
  16. CREATE ROLE test_role
  17. # Test default privileges
  18. simple conn=mz_system,user=mz_system
  19. REVOKE ALL PRIVILEGES ON SYSTEM FROM materialize;
  20. ----
  21. COMPLETE 0
  22. ## Create some helper views
  23. statement ok
  24. CREATE VIEW database_privileges (name, privilege) AS SELECT name, unnest(privileges)::text FROM mz_databases;
  25. statement ok
  26. CREATE VIEW schema_privileges (name, privilege) AS SELECT name, unnest(privileges)::text, database_id FROM mz_schemas;
  27. statement ok
  28. CREATE VIEW cluster_privileges (name, privilege) AS SELECT name, unnest(privileges)::text FROM mz_clusters;
  29. statement ok
  30. CREATE VIEW item_privileges (name, type, privilege) AS SELECT name, type, unnest(privileges)::text FROM mz_objects;
  31. ## Test built-in objects
  32. query TT rowsort
  33. SELECT * FROM database_privileges
  34. ----
  35. materialize =U/mz_system
  36. materialize mz_system=UC/mz_system
  37. materialize materialize=UC/mz_system
  38. materialize mz_support=U/mz_system
  39. query TT rowsort
  40. SELECT name, privilege FROM schema_privileges ORDER BY name, privilege
  41. ----
  42. information_schema =U/mz_system
  43. information_schema mz_system=UC/mz_system
  44. information_schema mz_support=U/mz_system
  45. mz_catalog =U/mz_system
  46. mz_catalog mz_system=UC/mz_system
  47. mz_catalog mz_support=U/mz_system
  48. mz_catalog_unstable =U/mz_system
  49. mz_catalog_unstable mz_support=U/mz_system
  50. mz_catalog_unstable mz_system=UC/mz_system
  51. mz_unsafe =U/mz_system
  52. mz_unsafe mz_support=U/mz_system
  53. mz_unsafe mz_system=UC/mz_system
  54. mz_internal =U/mz_system
  55. mz_internal mz_system=UC/mz_system
  56. mz_internal mz_support=U/mz_system
  57. mz_introspection =U/mz_system
  58. mz_introspection mz_system=UC/mz_system
  59. mz_introspection mz_support=U/mz_system
  60. pg_catalog =U/mz_system
  61. pg_catalog mz_system=UC/mz_system
  62. pg_catalog mz_support=U/mz_system
  63. public =U/mz_system
  64. public mz_system=UC/mz_system
  65. public materialize=UC/mz_system
  66. public mz_support=U/mz_system
  67. query TT rowsort
  68. SELECT * FROM cluster_privileges ORDER BY name, privilege
  69. ----
  70. mz_analytics mz_analytics=UC/mz_analytics
  71. mz_analytics mz_system=UC/mz_analytics
  72. mz_catalog_server =U/mz_system
  73. mz_catalog_server mz_support=UC/mz_system
  74. mz_catalog_server mz_system=UC/mz_system
  75. mz_probe mz_monitor=U/mz_system
  76. mz_probe mz_support=U/mz_system
  77. mz_probe mz_system=UC/mz_system
  78. mz_support mz_support=UC/mz_support
  79. mz_support mz_system=UC/mz_support
  80. mz_system mz_support=U/mz_system
  81. mz_system mz_system=UC/mz_system
  82. quickstart =U/mz_system
  83. quickstart materialize=UC/mz_system
  84. quickstart mz_support=U/mz_system
  85. quickstart mz_system=UC/mz_system
  86. ### The materialize privilege comes from the views created above
  87. ### The mz_support privilege comes from the `_redacted`
  88. ### statement logging views.
  89. query T rowsort
  90. SELECT DISTINCT(privilege) FROM item_privileges WHERE type = 'view' OR type = 'materialized view' OR type = 'source'
  91. ----
  92. =r/mz_system
  93. mz_system=r/mz_system
  94. mz_monitor=r/mz_system
  95. mz_support=r/mz_system
  96. mz_analytics=r/mz_system
  97. materialize=r/materialize
  98. mz_monitor_redacted=r/mz_system
  99. query T
  100. SELECT DISTINCT(privilege) FROM item_privileges WHERE type = 'table'
  101. ----
  102. =r/mz_system
  103. mz_monitor=r/mz_system
  104. mz_system=arwd/mz_system
  105. query T
  106. SELECT DISTINCT(privilege) FROM item_privileges WHERE type = 'type'
  107. ----
  108. =U/mz_system
  109. mz_system=U/mz_system
  110. query T
  111. SELECT privileges::text FROM mz_system_privileges
  112. ----
  113. mz_system=RBNP/mz_system
  114. ## Test user created objects
  115. simple conn=mz_system,user=mz_system
  116. GRANT ALL PRIVILEGES ON SYSTEM TO materialize;
  117. ----
  118. COMPLETE 0
  119. statement ok
  120. CREATE TABLE t (a INT);
  121. query TT
  122. SELECT name, privilege FROM item_privileges WHERE name = 't'
  123. ----
  124. t materialize=arwd/materialize
  125. statement ok
  126. CREATE VIEW v AS SELECT 1;
  127. query TT
  128. SELECT name, privilege FROM item_privileges WHERE name = 'v'
  129. ----
  130. v materialize=r/materialize
  131. statement ok
  132. CREATE MATERIALIZED VIEW mv AS SELECT 1;
  133. query TT
  134. SELECT name, privilege FROM item_privileges WHERE name = 'mv'
  135. ----
  136. mv materialize=r/materialize
  137. statement ok
  138. CREATE SOURCE s FROM LOAD GENERATOR COUNTER;
  139. query TT
  140. SELECT name, privilege FROM item_privileges WHERE name = 's'
  141. ----
  142. s materialize=r/materialize
  143. statement ok
  144. CREATE TYPE ty AS LIST (ELEMENT TYPE=bool);
  145. query TT
  146. SELECT name, privilege FROM item_privileges WHERE name = 'ty'
  147. ----
  148. ty =U/materialize
  149. ty materialize=U/materialize
  150. statement ok
  151. CREATE SECRET se AS decode('c2VjcmV0Cg==', 'base64');
  152. query TT
  153. SELECT name, privilege FROM item_privileges WHERE name = 'se'
  154. ----
  155. se materialize=U/materialize
  156. statement ok
  157. CREATE CONNECTION conn TO KAFKA (BROKER 'localhost:9092', SECURITY PROTOCOL PLAINTEXT) WITH (VALIDATE = false);
  158. query TT
  159. SELECT name, privilege FROM item_privileges WHERE name = 'conn'
  160. ----
  161. conn materialize=U/materialize
  162. statement ok
  163. CREATE CLUSTER c REPLICAS (r1 (SIZE '1'));
  164. query TT rowsort
  165. SELECT * FROM cluster_privileges WHERE name = 'c'
  166. ----
  167. c materialize=UC/materialize
  168. c mz_support=U/materialize
  169. statement ok
  170. CREATE DATABASE d;
  171. query TT rowsort
  172. SELECT * FROM database_privileges WHERE name = 'd'
  173. ----
  174. d materialize=UC/materialize
  175. d mz_support=U/materialize
  176. query TT rowsort
  177. SELECT name, privilege FROM schema_privileges WHERE name = 'public' ORDER BY name, privilege
  178. ----
  179. public =U/mz_system
  180. public =U/materialize
  181. public mz_system=UC/mz_system
  182. public materialize=UC/mz_system
  183. public materialize=UC/materialize
  184. public mz_support=U/mz_system
  185. public mz_support=U/materialize
  186. statement ok
  187. CREATE SCHEMA sch;
  188. query TT rowsort
  189. SELECT name, privilege FROM schema_privileges WHERE name = 'sch'
  190. ----
  191. sch materialize=UC/materialize
  192. sch mz_support=U/materialize
  193. # Changing the owner of an object should change the grantor of all privileges to the new owner and
  194. # transfer the privileges of the old owner to the new owner.
  195. simple conn=mz_system,user=mz_system
  196. CREATE ROLE joe
  197. ----
  198. COMPLETE 0
  199. simple conn=mz_system,user=mz_system
  200. ALTER TABLE t OWNER TO joe
  201. ----
  202. COMPLETE 0
  203. query TT
  204. SELECT name, privilege FROM item_privileges WHERE name = 't'
  205. ----
  206. t joe=arwd/joe
  207. simple conn=mz_system,user=mz_system
  208. ALTER VIEW v OWNER TO joe
  209. ----
  210. COMPLETE 0
  211. query TT
  212. SELECT name, privilege FROM item_privileges WHERE name = 'v'
  213. ----
  214. v joe=r/joe
  215. simple conn=mz_system,user=mz_system
  216. ALTER MATERIALIZED VIEW mv OWNER TO joe
  217. ----
  218. COMPLETE 0
  219. query TT
  220. SELECT name, privilege FROM item_privileges WHERE name = 'mv'
  221. ----
  222. mv joe=r/joe
  223. simple conn=mz_system,user=mz_system
  224. ALTER SOURCE s OWNER TO joe
  225. ----
  226. COMPLETE 0
  227. query TT
  228. SELECT name, privilege FROM item_privileges WHERE name = 's'
  229. ----
  230. s joe=r/joe
  231. simple conn=mz_system,user=mz_system
  232. ALTER TYPE ty OWNER TO joe
  233. ----
  234. COMPLETE 0
  235. query TT
  236. SELECT name, privilege FROM item_privileges WHERE name = 'ty'
  237. ----
  238. ty =U/joe
  239. ty joe=U/joe
  240. simple conn=mz_system,user=mz_system
  241. ALTER SECRET se OWNER TO joe
  242. ----
  243. COMPLETE 0
  244. query TT
  245. SELECT name, privilege FROM item_privileges WHERE name = 'se'
  246. ----
  247. se joe=U/joe
  248. simple conn=mz_system,user=mz_system
  249. ALTER CONNECTION conn OWNER TO joe
  250. ----
  251. COMPLETE 0
  252. query TT
  253. SELECT name, privilege FROM item_privileges WHERE name = 'conn'
  254. ----
  255. conn joe=U/joe
  256. simple conn=mz_system,user=mz_system
  257. ALTER CLUSTER c OWNER TO joe
  258. ----
  259. COMPLETE 0
  260. query TT rowsort
  261. SELECT * FROM cluster_privileges WHERE name = 'c'
  262. ----
  263. c joe=UC/joe
  264. c mz_support=U/joe
  265. simple conn=mz_system,user=mz_system
  266. ALTER DATABASE d OWNER TO joe
  267. ----
  268. COMPLETE 0
  269. query TT rowsort
  270. SELECT * FROM database_privileges WHERE name = 'd'
  271. ----
  272. d joe=UC/joe
  273. d mz_support=U/joe
  274. simple conn=mz_system,user=mz_system
  275. ALTER SCHEMA sch OWNER TO joe
  276. ----
  277. COMPLETE 0
  278. query TT rowsort
  279. SELECT name, privilege FROM schema_privileges WHERE name = 'sch'
  280. ----
  281. sch joe=UC/joe
  282. sch mz_support=U/joe
  283. ## Switch the owners back to materialize
  284. simple conn=mz_system,user=mz_system
  285. ALTER TABLE t OWNER TO materialize
  286. ----
  287. COMPLETE 0
  288. simple conn=mz_system,user=mz_system
  289. ALTER VIEW v OWNER TO materialize
  290. ----
  291. COMPLETE 0
  292. simple conn=mz_system,user=mz_system
  293. ALTER MATERIALIZED VIEW mv OWNER TO materialize
  294. ----
  295. COMPLETE 0
  296. simple conn=mz_system,user=mz_system
  297. ALTER SOURCE s OWNER TO materialize
  298. ----
  299. COMPLETE 0
  300. simple conn=mz_system,user=mz_system
  301. ALTER TYPE ty OWNER TO materialize
  302. ----
  303. COMPLETE 0
  304. simple conn=mz_system,user=mz_system
  305. ALTER SECRET se OWNER TO materialize
  306. ----
  307. COMPLETE 0
  308. simple conn=mz_system,user=mz_system
  309. ALTER CONNECTION conn OWNER TO materialize
  310. ----
  311. COMPLETE 0
  312. simple conn=mz_system,user=mz_system
  313. ALTER CLUSTER c OWNER TO materialize
  314. ----
  315. COMPLETE 0
  316. simple conn=mz_system,user=mz_system
  317. ALTER DATABASE d OWNER TO materialize
  318. ----
  319. COMPLETE 0
  320. simple conn=mz_system,user=mz_system
  321. ALTER SCHEMA sch OWNER TO materialize
  322. ----
  323. COMPLETE 0
  324. # Test GRANT and REVOKE
  325. simple conn=mz_system,user=mz_system
  326. CREATE ROLE other
  327. ----
  328. COMPLETE 0
  329. simple conn=mz_system,user=mz_system
  330. CREATE ROLE child
  331. ----
  332. COMPLETE 0
  333. simple conn=mz_system,user=mz_system
  334. GRANT joe TO child
  335. ----
  336. COMPLETE 0
  337. ## Table
  338. query B
  339. SELECT has_table_privilege('joe', 't', 'SELECT')
  340. ----
  341. false
  342. query B
  343. SELECT has_table_privilege('child', 't', 'SELECT')
  344. ----
  345. false
  346. query B
  347. SELECT has_table_privilege('joe', (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  348. ----
  349. false
  350. query B
  351. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 't', 'SELECT')
  352. ----
  353. false
  354. query B
  355. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  356. ----
  357. false
  358. statement ok
  359. GRANT SELECT on TABLE t TO joe
  360. query TT
  361. SELECT name, privilege FROM item_privileges WHERE name = 't'
  362. ----
  363. t joe=r/materialize
  364. t materialize=arwd/materialize
  365. query B
  366. SELECT has_table_privilege('joe', 't', 'SELECT')
  367. ----
  368. true
  369. query B
  370. SELECT has_table_privilege('child', 't', 'SELECT')
  371. ----
  372. true
  373. query B
  374. SELECT has_table_privilege('joe', (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  375. ----
  376. true
  377. query B
  378. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 't', 'SELECT')
  379. ----
  380. true
  381. query B
  382. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  383. ----
  384. true
  385. ### Duplicate grants have no effect
  386. statement ok
  387. GRANT SELECT on TABLE t TO joe
  388. query TT
  389. SELECT name, privilege FROM item_privileges WHERE name = 't'
  390. ----
  391. t joe=r/materialize
  392. t materialize=arwd/materialize
  393. statement ok
  394. GRANT SELECT, INSERT, UPDATE on TABLE t TO PUBLIC
  395. query TT
  396. SELECT name, privilege FROM item_privileges WHERE name = 't'
  397. ----
  398. t =arw/materialize
  399. t joe=r/materialize
  400. t materialize=arwd/materialize
  401. simple conn=joe1,user=joe
  402. GRANT SELECT on TABLE t TO other
  403. ----
  404. db error: ERROR: must be owner of TABLE materialize.public.t
  405. statement error role "joe" cannot be dropped because some objects depend on it
  406. DROP ROLE joe
  407. statement ok
  408. REVOKE SELECT on TABLE t FROM joe
  409. query TT
  410. SELECT name, privilege FROM item_privileges WHERE name = 't'
  411. ----
  412. t =arw/materialize
  413. t materialize=arwd/materialize
  414. query B
  415. SELECT has_table_privilege('joe', 't', 'SELECT')
  416. ----
  417. true
  418. query B
  419. SELECT has_table_privilege('child', 't', 'SELECT')
  420. ----
  421. true
  422. query B
  423. SELECT has_table_privilege('joe', (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  424. ----
  425. true
  426. query B
  427. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 't', 'SELECT')
  428. ----
  429. true
  430. query B
  431. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  432. ----
  433. true
  434. ### Duplicate revokes have no effect
  435. statement ok
  436. REVOKE SELECT on TABLE t FROM joe
  437. query TT
  438. SELECT name, privilege FROM item_privileges WHERE name = 't'
  439. ----
  440. t =arw/materialize
  441. t materialize=arwd/materialize
  442. statement ok
  443. DROP ROLE joe
  444. statement ok
  445. CREATE ROLE joe
  446. statement ok
  447. GRANT joe TO child
  448. statement ok
  449. REVOKE INSERT, UPDATE ON TABLE t FROM PUBLIC
  450. query TT
  451. SELECT name, privilege FROM item_privileges WHERE name = 't'
  452. ----
  453. t =r/materialize
  454. t materialize=arwd/materialize
  455. statement ok
  456. REVOKE SELECT ON TABLE t FROM PUBLIC
  457. query B
  458. SELECT has_table_privilege('joe', 't', 'SELECT')
  459. ----
  460. false
  461. query B
  462. SELECT has_table_privilege('child', 't', 'SELECT')
  463. ----
  464. false
  465. query B
  466. SELECT has_table_privilege('joe', (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  467. ----
  468. false
  469. query B
  470. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 't', 'SELECT')
  471. ----
  472. false
  473. query B
  474. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  475. ----
  476. false
  477. statement error invalid privilege types USAGE, CREATE for TABLE
  478. GRANT USAGE, CREATE ON TABLE t TO joe
  479. ## View
  480. query B
  481. SELECT has_table_privilege('joe', 'v', 'SELECT')
  482. ----
  483. false
  484. query B
  485. SELECT has_table_privilege('child', 'v', 'SELECT')
  486. ----
  487. false
  488. query B
  489. SELECT has_table_privilege('joe', (SELECT oid FROM mz_views WHERE name = 'v'), 'SELECT')
  490. ----
  491. false
  492. query B
  493. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'v', 'SELECT')
  494. ----
  495. false
  496. query B
  497. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_views WHERE name = 'v'), 'SELECT')
  498. ----
  499. false
  500. statement ok
  501. GRANT SELECT on TABLE v TO joe
  502. query TT
  503. SELECT name, privilege FROM item_privileges WHERE name = 'v'
  504. ----
  505. v joe=r/materialize
  506. v materialize=r/materialize
  507. query B
  508. SELECT has_table_privilege('joe', 'v', 'SELECT')
  509. ----
  510. true
  511. query B
  512. SELECT has_table_privilege('child', 'v', 'SELECT')
  513. ----
  514. true
  515. query B
  516. SELECT has_table_privilege('joe', (SELECT oid FROM mz_views WHERE name = 'v'), 'SELECT')
  517. ----
  518. true
  519. query B
  520. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'v', 'SELECT')
  521. ----
  522. true
  523. query B
  524. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_views WHERE name = 'v'), 'SELECT')
  525. ----
  526. true
  527. ### Duplicate grants have no effect
  528. statement ok
  529. GRANT SELECT on TABLE v TO joe
  530. query TT
  531. SELECT name, privilege FROM item_privileges WHERE name = 'v'
  532. ----
  533. v joe=r/materialize
  534. v materialize=r/materialize
  535. statement ok
  536. GRANT SELECT on TABLE v TO PUBLIC
  537. query TT
  538. SELECT name, privilege FROM item_privileges WHERE name = 'v'
  539. ----
  540. v =r/materialize
  541. v joe=r/materialize
  542. v materialize=r/materialize
  543. simple conn=joe2,user=joe
  544. GRANT SELECT on TABLE v TO other
  545. ----
  546. db error: ERROR: must be owner of VIEW materialize.public.v
  547. statement error role "joe" cannot be dropped because some objects depend on it
  548. DROP ROLE joe
  549. statement ok
  550. REVOKE SELECT on TABLE v FROM joe
  551. query TT
  552. SELECT name, privilege FROM item_privileges WHERE name = 'v'
  553. ----
  554. v =r/materialize
  555. v materialize=r/materialize
  556. query B
  557. SELECT has_table_privilege('joe', 'v', 'SELECT')
  558. ----
  559. true
  560. query B
  561. SELECT has_table_privilege('child', 'v', 'SELECT')
  562. ----
  563. true
  564. query B
  565. SELECT has_table_privilege('joe', (SELECT oid FROM mz_views WHERE name = 'v'), 'SELECT')
  566. ----
  567. true
  568. query B
  569. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'v', 'SELECT')
  570. ----
  571. true
  572. query B
  573. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_views WHERE name = 'v'), 'SELECT')
  574. ----
  575. true
  576. ### Duplicate revokes have no effect
  577. statement ok
  578. REVOKE SELECT on TABLE v FROM joe
  579. query TT
  580. SELECT name, privilege FROM item_privileges WHERE name = 'v'
  581. ----
  582. v =r/materialize
  583. v materialize=r/materialize
  584. statement ok
  585. DROP ROLE joe
  586. statement ok
  587. CREATE ROLE joe
  588. statement ok
  589. GRANT joe TO child
  590. statement ok
  591. REVOKE SELECT ON TABLE v FROM PUBLIC
  592. query TT
  593. SELECT name, privilege FROM item_privileges WHERE name = 'v'
  594. ----
  595. v materialize=r/materialize
  596. query B
  597. SELECT has_table_privilege('joe', 'v', 'SELECT')
  598. ----
  599. false
  600. query B
  601. SELECT has_table_privilege('child', 'v', 'SELECT')
  602. ----
  603. false
  604. query B
  605. SELECT has_table_privilege('joe', (SELECT oid FROM mz_views WHERE name = 'v'), 'SELECT')
  606. ----
  607. false
  608. query B
  609. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'v', 'SELECT')
  610. ----
  611. false
  612. query B
  613. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_views WHERE name = 'v'), 'SELECT')
  614. ----
  615. false
  616. statement error invalid privilege types USAGE, CREATE for VIEW
  617. GRANT INSERT, UPDATE, DELETE, USAGE, CREATE ON TABLE v TO joe
  618. ## Materialized View
  619. query B
  620. SELECT has_table_privilege('joe', 'mv', 'SELECT')
  621. ----
  622. false
  623. query B
  624. SELECT has_table_privilege('child', 'mv', 'SELECT')
  625. ----
  626. false
  627. query B
  628. SELECT has_table_privilege('joe', (SELECT oid FROM mz_materialized_views WHERE name = 'mv'), 'SELECT')
  629. ----
  630. false
  631. query B
  632. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'mv', 'SELECT')
  633. ----
  634. false
  635. query B
  636. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_materialized_views WHERE name = 'mv'), 'SELECT')
  637. ----
  638. false
  639. statement ok
  640. GRANT SELECT on TABLE mv TO joe
  641. query TT
  642. SELECT name, privilege FROM item_privileges WHERE name = 'mv'
  643. ----
  644. mv joe=r/materialize
  645. mv materialize=r/materialize
  646. query B
  647. SELECT has_table_privilege('joe', 'mv', 'SELECT')
  648. ----
  649. true
  650. query B
  651. SELECT has_table_privilege('child', 'mv', 'SELECT')
  652. ----
  653. true
  654. query B
  655. SELECT has_table_privilege('joe', (SELECT oid FROM mz_materialized_views WHERE name = 'mv'), 'SELECT')
  656. ----
  657. true
  658. query B
  659. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'mv', 'SELECT')
  660. ----
  661. true
  662. query B
  663. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_materialized_views WHERE name = 'mv'), 'SELECT')
  664. ----
  665. true
  666. ### Duplicate grants have no effect
  667. statement ok
  668. GRANT SELECT on TABLE mv TO joe
  669. query TT
  670. SELECT name, privilege FROM item_privileges WHERE name = 'mv'
  671. ----
  672. mv joe=r/materialize
  673. mv materialize=r/materialize
  674. statement ok
  675. GRANT SELECT on TABLE mv TO PUBLIC
  676. query TT
  677. SELECT name, privilege FROM item_privileges WHERE name = 'mv'
  678. ----
  679. mv =r/materialize
  680. mv joe=r/materialize
  681. mv materialize=r/materialize
  682. simple conn=joe3,user=joe
  683. GRANT SELECT on TABLE mv TO other
  684. ----
  685. db error: ERROR: must be owner of MATERIALIZED VIEW materialize.public.mv
  686. statement error role "joe" cannot be dropped because some objects depend on it
  687. DROP ROLE joe
  688. statement ok
  689. REVOKE SELECT on TABLE mv FROM joe
  690. query TT
  691. SELECT name, privilege FROM item_privileges WHERE name = 'mv'
  692. ----
  693. mv =r/materialize
  694. mv materialize=r/materialize
  695. query B
  696. SELECT has_table_privilege('joe', 'mv', 'SELECT')
  697. ----
  698. true
  699. query B
  700. SELECT has_table_privilege('child', 'mv', 'SELECT')
  701. ----
  702. true
  703. query B
  704. SELECT has_table_privilege('joe', (SELECT oid FROM mz_materialized_views WHERE name = 'mv'), 'SELECT')
  705. ----
  706. true
  707. query B
  708. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'mv', 'SELECT')
  709. ----
  710. true
  711. query B
  712. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_materialized_views WHERE name = 'mv'), 'SELECT')
  713. ----
  714. true
  715. ### Duplicate revokes have no effect
  716. statement ok
  717. REVOKE SELECT on TABLE mv FROM joe
  718. query TT
  719. SELECT name, privilege FROM item_privileges WHERE name = 'mv'
  720. ----
  721. mv =r/materialize
  722. mv materialize=r/materialize
  723. statement ok
  724. DROP ROLE joe
  725. statement ok
  726. CREATE ROLE joe
  727. statement ok
  728. GRANT joe TO child
  729. statement ok
  730. REVOKE SELECT ON TABLE mv FROM PUBLIC
  731. query TT
  732. SELECT name, privilege FROM item_privileges WHERE name = 'mv'
  733. ----
  734. mv materialize=r/materialize
  735. query B
  736. SELECT has_table_privilege('joe', 'mv', 'SELECT')
  737. ----
  738. false
  739. query B
  740. SELECT has_table_privilege('child', 'mv', 'SELECT')
  741. ----
  742. false
  743. query B
  744. SELECT has_table_privilege('joe', (SELECT oid FROM mz_materialized_views WHERE name = 'mv'), 'SELECT')
  745. ----
  746. false
  747. query B
  748. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'mv', 'SELECT')
  749. ----
  750. false
  751. query B
  752. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_materialized_views WHERE name = 'mv'), 'SELECT')
  753. ----
  754. false
  755. statement error invalid privilege types USAGE, CREATE for MATERIALIZED VIEW
  756. GRANT INSERT, UPDATE, DELETE, USAGE, CREATE ON TABLE mv TO joe
  757. ## Source
  758. query B
  759. SELECT has_table_privilege('joe', 's', 'SELECT')
  760. ----
  761. false
  762. query B
  763. SELECT has_table_privilege('child', 's', 'SELECT')
  764. ----
  765. false
  766. query B
  767. SELECT has_table_privilege('joe', (SELECT oid FROM mz_sources WHERE name = 's'), 'SELECT')
  768. ----
  769. false
  770. query B
  771. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 's', 'SELECT')
  772. ----
  773. false
  774. query B
  775. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_sources WHERE name = 's'), 'SELECT')
  776. ----
  777. false
  778. statement ok
  779. GRANT SELECT on TABLE s TO joe
  780. query TT
  781. SELECT name, privilege FROM item_privileges WHERE name = 's'
  782. ----
  783. s joe=r/materialize
  784. s materialize=r/materialize
  785. query B
  786. SELECT has_table_privilege('joe', 's', 'SELECT')
  787. ----
  788. true
  789. query B
  790. SELECT has_table_privilege('child', 's', 'SELECT')
  791. ----
  792. true
  793. query B
  794. SELECT has_table_privilege('joe', (SELECT oid FROM mz_sources WHERE name = 's'), 'SELECT')
  795. ----
  796. true
  797. query B
  798. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 's', 'SELECT')
  799. ----
  800. true
  801. query B
  802. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_sources WHERE name = 's'), 'SELECT')
  803. ----
  804. true
  805. ### Duplicate grants have no effect
  806. statement ok
  807. GRANT SELECT on TABLE s TO joe
  808. query TT
  809. SELECT name, privilege FROM item_privileges WHERE name = 's'
  810. ----
  811. s joe=r/materialize
  812. s materialize=r/materialize
  813. statement ok
  814. GRANT SELECT on TABLE s TO PUBLIC
  815. query TT
  816. SELECT name, privilege FROM item_privileges WHERE name = 's'
  817. ----
  818. s =r/materialize
  819. s joe=r/materialize
  820. s materialize=r/materialize
  821. simple conn=joe4,user=joe
  822. GRANT SELECT on TABLE s TO other
  823. ----
  824. db error: ERROR: must be owner of SOURCE materialize.public.s
  825. statement error role "joe" cannot be dropped because some objects depend on it
  826. DROP ROLE joe
  827. statement ok
  828. REVOKE SELECT on TABLE s FROM joe
  829. query TT
  830. SELECT name, privilege FROM item_privileges WHERE name = 's'
  831. ----
  832. s =r/materialize
  833. s materialize=r/materialize
  834. query B
  835. SELECT has_table_privilege('joe', 's', 'SELECT')
  836. ----
  837. true
  838. query B
  839. SELECT has_table_privilege('child', 's', 'SELECT')
  840. ----
  841. true
  842. query B
  843. SELECT has_table_privilege('joe', (SELECT oid FROM mz_sources WHERE name = 's'), 'SELECT')
  844. ----
  845. true
  846. query B
  847. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 's', 'SELECT')
  848. ----
  849. true
  850. query B
  851. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_sources WHERE name = 's'), 'SELECT')
  852. ----
  853. true
  854. ### Duplicate revokes have no effect
  855. statement ok
  856. REVOKE SELECT on TABLE s FROM joe
  857. query TT
  858. SELECT name, privilege FROM item_privileges WHERE name = 's'
  859. ----
  860. s =r/materialize
  861. s materialize=r/materialize
  862. statement ok
  863. DROP ROLE joe
  864. statement ok
  865. CREATE ROLE joe
  866. statement ok
  867. GRANT joe TO child
  868. statement ok
  869. REVOKE SELECT ON TABLE s FROM PUBLIC
  870. query TT
  871. SELECT name, privilege FROM item_privileges WHERE name = 's'
  872. ----
  873. s materialize=r/materialize
  874. query B
  875. SELECT has_table_privilege('joe', 's', 'SELECT')
  876. ----
  877. false
  878. query B
  879. SELECT has_table_privilege('child', 's', 'SELECT')
  880. ----
  881. false
  882. query B
  883. SELECT has_table_privilege('joe', (SELECT oid FROM mz_sources WHERE name = 's'), 'SELECT')
  884. ----
  885. false
  886. query B
  887. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 's', 'SELECT')
  888. ----
  889. false
  890. query B
  891. SELECT has_table_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_sources WHERE name = 's'), 'SELECT')
  892. ----
  893. false
  894. statement error invalid privilege types USAGE, CREATE for SOURCE
  895. GRANT INSERT, UPDATE, DELETE, USAGE, CREATE ON TABLE s TO joe
  896. ## Type
  897. statement ok
  898. REVOKE USAGE on TYPE ty FROM PUBLIC
  899. query B
  900. SELECT has_type_privilege('joe', 'ty', 'USAGE')
  901. ----
  902. false
  903. query B
  904. SELECT has_type_privilege('child', 'ty', 'USAGE')
  905. ----
  906. false
  907. query B
  908. SELECT has_type_privilege('joe', (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  909. ----
  910. false
  911. query B
  912. SELECT has_type_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'ty', 'USAGE')
  913. ----
  914. false
  915. query B
  916. SELECT has_type_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  917. ----
  918. false
  919. statement ok
  920. GRANT USAGE on TYPE ty TO joe
  921. query TT
  922. SELECT name, privilege FROM item_privileges WHERE name = 'ty'
  923. ----
  924. ty joe=U/materialize
  925. ty materialize=U/materialize
  926. query B
  927. SELECT has_type_privilege('joe', 'ty', 'USAGE')
  928. ----
  929. true
  930. query B
  931. SELECT has_type_privilege('child', 'ty', 'USAGE')
  932. ----
  933. true
  934. query B
  935. SELECT has_type_privilege('joe', (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  936. ----
  937. true
  938. query B
  939. SELECT has_type_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'ty', 'USAGE')
  940. ----
  941. true
  942. query B
  943. SELECT has_type_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  944. ----
  945. true
  946. ### Duplicate grants have no effect
  947. statement ok
  948. GRANT USAGE on TYPE ty TO joe
  949. query TT
  950. SELECT name, privilege FROM item_privileges WHERE name = 'ty'
  951. ----
  952. ty joe=U/materialize
  953. ty materialize=U/materialize
  954. statement ok
  955. GRANT USAGE on TYPE ty TO PUBLIC
  956. query TT
  957. SELECT name, privilege FROM item_privileges WHERE name = 'ty'
  958. ----
  959. ty =U/materialize
  960. ty joe=U/materialize
  961. ty materialize=U/materialize
  962. simple conn=joe5,user=joe
  963. GRANT USAGE on TYPE ty TO other
  964. ----
  965. db error: ERROR: must be owner of TYPE materialize.public.ty
  966. statement error role "joe" cannot be dropped because some objects depend on it
  967. DROP ROLE joe
  968. statement ok
  969. REVOKE USAGE on TYPE ty FROM joe
  970. query TT
  971. SELECT name, privilege FROM item_privileges WHERE name = 'ty'
  972. ----
  973. ty =U/materialize
  974. ty materialize=U/materialize
  975. query B
  976. SELECT has_type_privilege('joe', 'ty', 'USAGE')
  977. ----
  978. true
  979. query B
  980. SELECT has_type_privilege('child', 'ty', 'USAGE')
  981. ----
  982. true
  983. query B
  984. SELECT has_type_privilege('joe', (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  985. ----
  986. true
  987. query B
  988. SELECT has_type_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'ty', 'USAGE')
  989. ----
  990. true
  991. query B
  992. SELECT has_type_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  993. ----
  994. true
  995. ### Duplicate revokes have no effect
  996. statement ok
  997. REVOKE USAGE on TYPE ty FROM joe
  998. query TT
  999. SELECT name, privilege FROM item_privileges WHERE name = 'ty'
  1000. ----
  1001. ty =U/materialize
  1002. ty materialize=U/materialize
  1003. statement ok
  1004. DROP ROLE joe
  1005. statement ok
  1006. CREATE ROLE joe
  1007. statement ok
  1008. GRANT joe TO child
  1009. statement ok
  1010. REVOKE USAGE ON TYPE ty FROM PUBLIC
  1011. query TT
  1012. SELECT name, privilege FROM item_privileges WHERE name = 'ty'
  1013. ----
  1014. ty materialize=U/materialize
  1015. query B
  1016. SELECT has_type_privilege('joe', 'ty', 'SELECT')
  1017. ----
  1018. false
  1019. query B
  1020. SELECT has_type_privilege('child', 'ty', 'USAGE')
  1021. ----
  1022. false
  1023. query B
  1024. SELECT has_type_privilege('joe', (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  1025. ----
  1026. false
  1027. query B
  1028. SELECT has_type_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'ty', 'USAGE')
  1029. ----
  1030. false
  1031. query B
  1032. SELECT has_type_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  1033. ----
  1034. false
  1035. statement ok
  1036. GRANT USAGE on TYPE ty TO PUBLIC
  1037. query TT
  1038. SELECT name, privilege FROM item_privileges WHERE name = 'ty'
  1039. ----
  1040. ty =U/materialize
  1041. ty materialize=U/materialize
  1042. statement error invalid privilege types SELECT, INSERT, UPDATE, DELETE, CREATE for TYPE
  1043. GRANT INSERT, SELECT, UPDATE, DELETE, CREATE ON TYPE ty TO joe
  1044. ## Secret
  1045. query B
  1046. SELECT has_secret_privilege('joe', 'se', 'USAGE')
  1047. ----
  1048. false
  1049. query B
  1050. SELECT has_secret_privilege('child', 'se', 'USAGE')
  1051. ----
  1052. false
  1053. query B
  1054. SELECT has_secret_privilege('joe', (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  1055. ----
  1056. false
  1057. query B
  1058. SELECT has_secret_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'se', 'USAGE')
  1059. ----
  1060. false
  1061. query B
  1062. SELECT has_secret_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  1063. ----
  1064. false
  1065. statement ok
  1066. GRANT USAGE on SECRET se TO joe
  1067. query TT
  1068. SELECT name, privilege FROM item_privileges WHERE name = 'se'
  1069. ----
  1070. se joe=U/materialize
  1071. se materialize=U/materialize
  1072. query B
  1073. SELECT has_secret_privilege('joe', 'se', 'USAGE')
  1074. ----
  1075. true
  1076. query B
  1077. SELECT has_secret_privilege('child', 'se', 'USAGE')
  1078. ----
  1079. true
  1080. query B
  1081. SELECT has_secret_privilege('joe', (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  1082. ----
  1083. true
  1084. query B
  1085. SELECT has_secret_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'se', 'USAGE')
  1086. ----
  1087. true
  1088. query B
  1089. SELECT has_secret_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  1090. ----
  1091. true
  1092. ### Duplicate grants have no effect
  1093. statement ok
  1094. GRANT USAGE on SECRET se TO joe
  1095. query TT
  1096. SELECT name, privilege FROM item_privileges WHERE name = 'se'
  1097. ----
  1098. se joe=U/materialize
  1099. se materialize=U/materialize
  1100. statement ok
  1101. GRANT USAGE on SECRET se TO PUBLIC
  1102. query TT
  1103. SELECT name, privilege FROM item_privileges WHERE name = 'se'
  1104. ----
  1105. se =U/materialize
  1106. se joe=U/materialize
  1107. se materialize=U/materialize
  1108. simple conn=joe6,user=joe
  1109. GRANT USAGE on SECRET se TO other
  1110. ----
  1111. db error: ERROR: must be owner of SECRET materialize.public.se
  1112. statement error role "joe" cannot be dropped because some objects depend on it
  1113. DROP ROLE joe
  1114. statement ok
  1115. REVOKE USAGE on SECRET se FROM joe
  1116. query TT
  1117. SELECT name, privilege FROM item_privileges WHERE name = 'se'
  1118. ----
  1119. se =U/materialize
  1120. se materialize=U/materialize
  1121. query B
  1122. SELECT has_secret_privilege('joe', 'se', 'USAGE')
  1123. ----
  1124. true
  1125. query B
  1126. SELECT has_secret_privilege('child', 'se', 'USAGE')
  1127. ----
  1128. true
  1129. query B
  1130. SELECT has_secret_privilege('joe', (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  1131. ----
  1132. true
  1133. query B
  1134. SELECT has_secret_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'se', 'USAGE')
  1135. ----
  1136. true
  1137. query B
  1138. SELECT has_secret_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  1139. ----
  1140. true
  1141. ### Duplicate revokes have no effect
  1142. statement ok
  1143. REVOKE USAGE on SECRET se FROM joe
  1144. query TT
  1145. SELECT name, privilege FROM item_privileges WHERE name = 'se'
  1146. ----
  1147. se =U/materialize
  1148. se materialize=U/materialize
  1149. statement ok
  1150. DROP ROLE joe
  1151. statement ok
  1152. CREATE ROLE joe
  1153. statement ok
  1154. GRANT joe TO child
  1155. statement ok
  1156. REVOKE USAGE ON SECRET se FROM PUBLIC
  1157. query TT
  1158. SELECT name, privilege FROM item_privileges WHERE name = 'se'
  1159. ----
  1160. se materialize=U/materialize
  1161. query B
  1162. SELECT has_secret_privilege('joe', 'se', 'USAGE')
  1163. ----
  1164. false
  1165. query B
  1166. SELECT has_secret_privilege('child', 'se', 'USAGE')
  1167. ----
  1168. false
  1169. query B
  1170. SELECT has_secret_privilege('joe', (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  1171. ----
  1172. false
  1173. query B
  1174. SELECT has_secret_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'se', 'USAGE')
  1175. ----
  1176. false
  1177. query B
  1178. SELECT has_secret_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  1179. ----
  1180. false
  1181. statement error invalid privilege types SELECT, INSERT, UPDATE, DELETE, CREATE for SECRET
  1182. GRANT INSERT, SELECT, UPDATE, DELETE, CREATE ON SECRET se TO joe
  1183. ## Connection
  1184. query B
  1185. SELECT has_connection_privilege('joe', 'conn', 'USAGE')
  1186. ----
  1187. false
  1188. query B
  1189. SELECT has_connection_privilege('child', 'conn', 'USAGE')
  1190. ----
  1191. false
  1192. query B
  1193. SELECT has_connection_privilege('joe', (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  1194. ----
  1195. false
  1196. query B
  1197. SELECT has_connection_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'conn', 'USAGE')
  1198. ----
  1199. false
  1200. query B
  1201. SELECT has_connection_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  1202. ----
  1203. false
  1204. statement ok
  1205. GRANT USAGE on CONNECTION conn TO joe
  1206. query TT
  1207. SELECT name, privilege FROM item_privileges WHERE name = 'conn'
  1208. ----
  1209. conn joe=U/materialize
  1210. conn materialize=U/materialize
  1211. query B
  1212. SELECT has_connection_privilege('joe', 'conn', 'USAGE')
  1213. ----
  1214. true
  1215. query B
  1216. SELECT has_connection_privilege('child', 'conn', 'USAGE')
  1217. ----
  1218. true
  1219. query B
  1220. SELECT has_connection_privilege('joe', (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  1221. ----
  1222. true
  1223. query B
  1224. SELECT has_connection_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'conn', 'USAGE')
  1225. ----
  1226. true
  1227. query B
  1228. SELECT has_connection_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  1229. ----
  1230. true
  1231. ### Duplicate grants have no effect
  1232. statement ok
  1233. GRANT USAGE on CONNECTION conn TO joe
  1234. query TT
  1235. SELECT name, privilege FROM item_privileges WHERE name = 'conn'
  1236. ----
  1237. conn joe=U/materialize
  1238. conn materialize=U/materialize
  1239. statement ok
  1240. GRANT USAGE on CONNECTION conn TO PUBLIC
  1241. query TT
  1242. SELECT name, privilege FROM item_privileges WHERE name = 'conn'
  1243. ----
  1244. conn =U/materialize
  1245. conn joe=U/materialize
  1246. conn materialize=U/materialize
  1247. simple conn=joe7,user=joe
  1248. GRANT USAGE on CONNECTION conn TO other
  1249. ----
  1250. db error: ERROR: must be owner of CONNECTION materialize.public.conn
  1251. statement error role "joe" cannot be dropped because some objects depend on it
  1252. DROP ROLE joe
  1253. statement ok
  1254. REVOKE USAGE on CONNECTION conn FROM joe
  1255. query TT
  1256. SELECT name, privilege FROM item_privileges WHERE name = 'conn'
  1257. ----
  1258. conn =U/materialize
  1259. conn materialize=U/materialize
  1260. query B
  1261. SELECT has_connection_privilege('joe', 'conn', 'USAGE')
  1262. ----
  1263. true
  1264. query B
  1265. SELECT has_connection_privilege('child', 'conn', 'USAGE')
  1266. ----
  1267. true
  1268. query B
  1269. SELECT has_connection_privilege('joe', (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  1270. ----
  1271. true
  1272. query B
  1273. SELECT has_connection_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'conn', 'USAGE')
  1274. ----
  1275. true
  1276. query B
  1277. SELECT has_connection_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  1278. ----
  1279. true
  1280. ### Duplicate revokes have no effect
  1281. statement ok
  1282. REVOKE USAGE on CONNECTION conn FROM joe
  1283. query TT
  1284. SELECT name, privilege FROM item_privileges WHERE name = 'conn'
  1285. ----
  1286. conn =U/materialize
  1287. conn materialize=U/materialize
  1288. statement ok
  1289. DROP ROLE joe
  1290. statement ok
  1291. CREATE ROLE joe
  1292. statement ok
  1293. GRANT joe TO child
  1294. statement ok
  1295. REVOKE USAGE ON CONNECTION conn FROM PUBLIC
  1296. query TT
  1297. SELECT name, privilege FROM item_privileges WHERE name = 'conn'
  1298. ----
  1299. conn materialize=U/materialize
  1300. query B
  1301. SELECT has_connection_privilege('joe', 'conn', 'USAGE')
  1302. ----
  1303. false
  1304. query B
  1305. SELECT has_connection_privilege('child', 'conn', 'USAGE')
  1306. ----
  1307. false
  1308. query B
  1309. SELECT has_connection_privilege('joe', (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  1310. ----
  1311. false
  1312. query B
  1313. SELECT has_connection_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'conn', 'USAGE')
  1314. ----
  1315. false
  1316. query B
  1317. SELECT has_connection_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  1318. ----
  1319. false
  1320. statement error invalid privilege types SELECT, INSERT, UPDATE, DELETE, CREATE for CONNECTION
  1321. GRANT INSERT, SELECT, UPDATE, DELETE, CREATE ON CONNECTION conn TO joe
  1322. ## Cluster
  1323. query B
  1324. SELECT has_cluster_privilege('joe', 'c', 'USAGE')
  1325. ----
  1326. false
  1327. query B
  1328. SELECT has_cluster_privilege('child', 'c', 'USAGE')
  1329. ----
  1330. false
  1331. query B
  1332. SELECT has_cluster_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'c', 'USAGE')
  1333. ----
  1334. false
  1335. statement ok
  1336. GRANT USAGE on CLUSTER c TO joe
  1337. query TT rowsort
  1338. SELECT name, privilege FROM cluster_privileges WHERE name = 'c'
  1339. ----
  1340. c joe=U/materialize
  1341. c materialize=UC/materialize
  1342. c mz_support=U/materialize
  1343. query B
  1344. SELECT has_cluster_privilege('joe', 'c', 'USAGE')
  1345. ----
  1346. true
  1347. query B
  1348. SELECT has_cluster_privilege('child', 'c', 'USAGE')
  1349. ----
  1350. true
  1351. query B
  1352. SELECT has_cluster_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'c', 'USAGE')
  1353. ----
  1354. true
  1355. ### Duplicate grants have no effect
  1356. statement ok
  1357. GRANT USAGE on CLUSTER c TO joe
  1358. query TT rowsort
  1359. SELECT name, privilege FROM cluster_privileges WHERE name = 'c'
  1360. ----
  1361. c joe=U/materialize
  1362. c materialize=UC/materialize
  1363. c mz_support=U/materialize
  1364. statement ok
  1365. GRANT USAGE, CREATE on CLUSTER c TO PUBLIC
  1366. query TT rowsort
  1367. SELECT name, privilege FROM cluster_privileges WHERE name = 'c'
  1368. ----
  1369. c =UC/materialize
  1370. c joe=U/materialize
  1371. c materialize=UC/materialize
  1372. c mz_support=U/materialize
  1373. simple conn=joe8,user=joe
  1374. GRANT USAGE on CLUSTER c TO other
  1375. ----
  1376. db error: ERROR: must be owner of CLUSTER c
  1377. statement error role "joe" cannot be dropped because some objects depend on it
  1378. DROP ROLE joe
  1379. statement ok
  1380. REVOKE USAGE on CLUSTER c FROM joe
  1381. query TT rowsort
  1382. SELECT name, privilege FROM cluster_privileges WHERE name = 'c'
  1383. ----
  1384. c =UC/materialize
  1385. c materialize=UC/materialize
  1386. c mz_support=U/materialize
  1387. query B
  1388. SELECT has_cluster_privilege('joe', 'c', 'USAGE')
  1389. ----
  1390. true
  1391. query B
  1392. SELECT has_cluster_privilege('child', 'c', 'USAGE')
  1393. ----
  1394. true
  1395. query B
  1396. SELECT has_cluster_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'c', 'USAGE')
  1397. ----
  1398. true
  1399. ### Duplicate revokes have no effect
  1400. statement ok
  1401. REVOKE USAGE on CLUSTER c FROM joe
  1402. query TT rowsort
  1403. SELECT name, privilege FROM cluster_privileges WHERE name = 'c'
  1404. ----
  1405. c =UC/materialize
  1406. c materialize=UC/materialize
  1407. c mz_support=U/materialize
  1408. statement ok
  1409. DROP ROLE joe
  1410. statement ok
  1411. CREATE ROLE joe
  1412. statement ok
  1413. GRANT joe TO child
  1414. statement ok
  1415. REVOKE CREATE, USAGE ON CLUSTER c FROM PUBLIC
  1416. query TT rowsort
  1417. SELECT name, privilege FROM cluster_privileges WHERE name = 'c'
  1418. ----
  1419. c materialize=UC/materialize
  1420. c mz_support=U/materialize
  1421. query B
  1422. SELECT has_cluster_privilege('joe', 'c', 'USAGE')
  1423. ----
  1424. false
  1425. query B
  1426. SELECT has_cluster_privilege('child', 'c', 'USAGE')
  1427. ----
  1428. false
  1429. query B
  1430. SELECT has_cluster_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'c', 'USAGE')
  1431. ----
  1432. false
  1433. statement error invalid privilege types SELECT, INSERT, UPDATE, DELETE for CLUSTER
  1434. GRANT INSERT, SELECT, UPDATE, DELETE ON CLUSTER c TO joe
  1435. ## Database
  1436. query B
  1437. SELECT has_database_privilege('joe', 'd', 'USAGE')
  1438. ----
  1439. false
  1440. query B
  1441. SELECT has_database_privilege('child', 'd', 'USAGE')
  1442. ----
  1443. false
  1444. query B
  1445. SELECT has_database_privilege('joe', (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  1446. ----
  1447. false
  1448. query B
  1449. SELECT has_database_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'd', 'USAGE')
  1450. ----
  1451. false
  1452. query B
  1453. SELECT has_database_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  1454. ----
  1455. false
  1456. statement ok
  1457. GRANT USAGE on DATABASE d TO joe
  1458. query TT rowsort
  1459. SELECT name, privilege FROM database_privileges WHERE name = 'd'
  1460. ----
  1461. d joe=U/materialize
  1462. d materialize=UC/materialize
  1463. d mz_support=U/materialize
  1464. query B
  1465. SELECT has_database_privilege('joe', 'd', 'USAGE')
  1466. ----
  1467. true
  1468. query B
  1469. SELECT has_database_privilege('child', 'd', 'USAGE')
  1470. ----
  1471. true
  1472. query B
  1473. SELECT has_database_privilege('joe', (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  1474. ----
  1475. true
  1476. query B
  1477. SELECT has_database_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'd', 'USAGE')
  1478. ----
  1479. true
  1480. query B
  1481. SELECT has_database_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  1482. ----
  1483. true
  1484. ### Duplicate grants have no effect
  1485. statement ok
  1486. GRANT USAGE on DATABASE d TO joe
  1487. query TT rowsort
  1488. SELECT name, privilege FROM database_privileges WHERE name = 'd'
  1489. ----
  1490. d joe=U/materialize
  1491. d materialize=UC/materialize
  1492. d mz_support=U/materialize
  1493. statement ok
  1494. GRANT USAGE, CREATE on DATABASE d TO PUBLIC
  1495. query TT rowsort
  1496. SELECT name, privilege FROM database_privileges WHERE name = 'd'
  1497. ----
  1498. d =UC/materialize
  1499. d joe=U/materialize
  1500. d materialize=UC/materialize
  1501. d mz_support=U/materialize
  1502. simple conn=joe9,user=joe
  1503. GRANT USAGE on DATABASE d TO other
  1504. ----
  1505. db error: ERROR: must be owner of DATABASE d
  1506. statement error role "joe" cannot be dropped because some objects depend on it
  1507. DROP ROLE joe
  1508. statement ok
  1509. REVOKE USAGE on DATABASE d FROM joe
  1510. query TT rowsort
  1511. SELECT name, privilege FROM database_privileges WHERE name = 'd'
  1512. ----
  1513. d =UC/materialize
  1514. d materialize=UC/materialize
  1515. d mz_support=U/materialize
  1516. query B
  1517. SELECT has_database_privilege('joe', 'd', 'USAGE')
  1518. ----
  1519. true
  1520. query B
  1521. SELECT has_database_privilege('child', 'd', 'USAGE')
  1522. ----
  1523. true
  1524. query B
  1525. SELECT has_database_privilege('joe', (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  1526. ----
  1527. true
  1528. query B
  1529. SELECT has_database_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'd', 'USAGE')
  1530. ----
  1531. true
  1532. query B
  1533. SELECT has_database_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  1534. ----
  1535. true
  1536. ### Duplicate revokes have no effect
  1537. statement ok
  1538. REVOKE USAGE on DATABASE d FROM joe
  1539. query TT rowsort
  1540. SELECT name, privilege FROM database_privileges WHERE name = 'd'
  1541. ----
  1542. d =UC/materialize
  1543. d materialize=UC/materialize
  1544. d mz_support=U/materialize
  1545. statement ok
  1546. DROP ROLE joe
  1547. statement ok
  1548. CREATE ROLE joe
  1549. statement ok
  1550. GRANT joe TO child
  1551. statement ok
  1552. REVOKE CREATE, USAGE ON DATABASE d FROM PUBLIC
  1553. query TT rowsort
  1554. SELECT name, privilege FROM database_privileges WHERE name = 'd'
  1555. ----
  1556. d materialize=UC/materialize
  1557. d mz_support=U/materialize
  1558. query B
  1559. SELECT has_database_privilege('joe', 'd', 'USAGE')
  1560. ----
  1561. false
  1562. query B
  1563. SELECT has_database_privilege('child', 'd', 'USAGE')
  1564. ----
  1565. false
  1566. query B
  1567. SELECT has_database_privilege('joe', (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  1568. ----
  1569. false
  1570. query B
  1571. SELECT has_database_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'd', 'USAGE')
  1572. ----
  1573. false
  1574. query B
  1575. SELECT has_database_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  1576. ----
  1577. false
  1578. statement error invalid privilege types SELECT, INSERT, UPDATE, DELETE for DATABASE
  1579. GRANT INSERT, SELECT, UPDATE, DELETE ON DATABASE d TO joe
  1580. ## Schema
  1581. query B
  1582. SELECT has_schema_privilege('joe', 'sch', 'USAGE')
  1583. ----
  1584. false
  1585. query B
  1586. SELECT has_schema_privilege('child', 'sch', 'USAGE')
  1587. ----
  1588. false
  1589. query B
  1590. SELECT has_schema_privilege('joe', (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  1591. ----
  1592. false
  1593. query B
  1594. SELECT has_schema_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'sch', 'USAGE')
  1595. ----
  1596. false
  1597. query B
  1598. SELECT has_schema_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  1599. ----
  1600. false
  1601. statement ok
  1602. GRANT USAGE on SCHEMA sch TO joe
  1603. query TT rowsort
  1604. SELECT name, privilege FROM schema_privileges WHERE name = 'sch'
  1605. ----
  1606. sch joe=U/materialize
  1607. sch materialize=UC/materialize
  1608. sch mz_support=U/materialize
  1609. query B
  1610. SELECT has_schema_privilege('joe', 'sch', 'USAGE')
  1611. ----
  1612. true
  1613. query B
  1614. SELECT has_schema_privilege('child', 'sch', 'USAGE')
  1615. ----
  1616. true
  1617. query B
  1618. SELECT has_schema_privilege('joe', (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  1619. ----
  1620. true
  1621. query B
  1622. SELECT has_schema_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'sch', 'USAGE')
  1623. ----
  1624. true
  1625. query B
  1626. SELECT has_schema_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  1627. ----
  1628. true
  1629. ### Duplicate grants have no effect
  1630. statement ok
  1631. GRANT USAGE on SCHEMA sch TO joe
  1632. query TT rowsort
  1633. SELECT name, privilege FROM schema_privileges WHERE name = 'sch'
  1634. ----
  1635. sch joe=U/materialize
  1636. sch materialize=UC/materialize
  1637. sch mz_support=U/materialize
  1638. statement ok
  1639. GRANT USAGE, CREATE on SCHEMA sch TO PUBLIC
  1640. query TT rowsort
  1641. SELECT name, privilege FROM schema_privileges WHERE name = 'sch'
  1642. ----
  1643. sch =UC/materialize
  1644. sch joe=U/materialize
  1645. sch materialize=UC/materialize
  1646. sch mz_support=U/materialize
  1647. simple conn=joe10,user=joe
  1648. GRANT USAGE on SCHEMA sch TO other
  1649. ----
  1650. db error: ERROR: must be owner of SCHEMA materialize.sch
  1651. statement error role "joe" cannot be dropped because some objects depend on it
  1652. DROP ROLE joe
  1653. statement ok
  1654. REVOKE USAGE on SCHEMA sch FROM joe
  1655. query TT rowsort
  1656. SELECT name, privilege FROM schema_privileges WHERE name = 'sch'
  1657. ----
  1658. sch =UC/materialize
  1659. sch materialize=UC/materialize
  1660. sch mz_support=U/materialize
  1661. query B
  1662. SELECT has_schema_privilege('joe', 'sch', 'USAGE')
  1663. ----
  1664. true
  1665. query B
  1666. SELECT has_schema_privilege('child', 'sch', 'USAGE')
  1667. ----
  1668. true
  1669. query B
  1670. SELECT has_schema_privilege('joe', (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  1671. ----
  1672. true
  1673. query B
  1674. SELECT has_schema_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'sch', 'USAGE')
  1675. ----
  1676. true
  1677. query B
  1678. SELECT has_schema_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  1679. ----
  1680. true
  1681. ### Duplicate revokes have no effect
  1682. statement ok
  1683. REVOKE USAGE on SCHEMA sch FROM joe
  1684. query TT rowsort
  1685. SELECT name, privilege FROM schema_privileges WHERE name = 'sch'
  1686. ----
  1687. sch =UC/materialize
  1688. sch materialize=UC/materialize
  1689. sch mz_support=U/materialize
  1690. statement ok
  1691. DROP ROLE joe
  1692. statement ok
  1693. CREATE ROLE joe
  1694. statement ok
  1695. GRANT joe TO child
  1696. statement ok
  1697. REVOKE CREATE, USAGE ON SCHEMA sch FROM PUBLIC
  1698. query TT rowsort
  1699. SELECT name, privilege FROM schema_privileges WHERE name = 'sch'
  1700. ----
  1701. sch materialize=UC/materialize
  1702. sch mz_support=U/materialize
  1703. query B
  1704. SELECT has_schema_privilege('joe', 'sch', 'USAGE')
  1705. ----
  1706. false
  1707. query B
  1708. SELECT has_schema_privilege('child', 'sch', 'USAGE')
  1709. ----
  1710. false
  1711. query B
  1712. SELECT has_schema_privilege('joe', (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  1713. ----
  1714. false
  1715. query B
  1716. SELECT has_schema_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'sch', 'USAGE')
  1717. ----
  1718. false
  1719. query B
  1720. SELECT has_schema_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  1721. ----
  1722. false
  1723. ## System
  1724. simple conn=mz_system,user=mz_system
  1725. REVOKE ALL PRIVILEGES ON SYSTEM FROM materialize;
  1726. ----
  1727. COMPLETE 0
  1728. query B
  1729. SELECT has_system_privilege('joe', 'CREATEDB')
  1730. ----
  1731. false
  1732. query B
  1733. SELECT has_system_privilege('child', 'CREATEDB')
  1734. ----
  1735. false
  1736. query B
  1737. SELECT has_system_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'CREATEDB')
  1738. ----
  1739. false
  1740. simple conn=mz_system,user=mz_system
  1741. GRANT CREATEDB ON SYSTEM TO joe
  1742. ----
  1743. COMPLETE 0
  1744. query T
  1745. SELECT privileges::text FROM mz_system_privileges
  1746. ----
  1747. joe=B/mz_system
  1748. mz_system=RBNP/mz_system
  1749. query B
  1750. SELECT has_system_privilege('joe', 'CREATEDB')
  1751. ----
  1752. true
  1753. query B
  1754. SELECT has_system_privilege('child', 'CREATEDB')
  1755. ----
  1756. true
  1757. query B
  1758. SELECT has_system_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'CREATEDB')
  1759. ----
  1760. true
  1761. ### Duplicate grants have no effect
  1762. simple conn=mz_system,user=mz_system
  1763. GRANT CREATEDB ON SYSTEM TO joe
  1764. ----
  1765. COMPLETE 0
  1766. query T
  1767. SELECT privileges::text FROM mz_system_privileges
  1768. ----
  1769. joe=B/mz_system
  1770. mz_system=RBNP/mz_system
  1771. simple conn=mz_system,user=mz_system
  1772. GRANT CREATEROLE, CREATECLUSTER ON SYSTEM TO PUBLIC
  1773. ----
  1774. COMPLETE 0
  1775. query T
  1776. SELECT privileges::text FROM mz_system_privileges
  1777. ----
  1778. =RN/mz_system
  1779. joe=B/mz_system
  1780. mz_system=RBNP/mz_system
  1781. statement error role "joe" cannot be dropped because some objects depend on it
  1782. DROP ROLE joe
  1783. simple conn=mz_system,user=mz_system
  1784. REVOKE CREATEDB ON SYSTEM FROM joe
  1785. ----
  1786. COMPLETE 0
  1787. query T
  1788. SELECT privileges::text FROM mz_system_privileges
  1789. ----
  1790. =RN/mz_system
  1791. mz_system=RBNP/mz_system
  1792. query B
  1793. SELECT has_system_privilege('joe', 'CREATEDB')
  1794. ----
  1795. false
  1796. query B
  1797. SELECT has_system_privilege('child', 'CREATEDB')
  1798. ----
  1799. false
  1800. query B
  1801. SELECT has_system_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'CREATEDB')
  1802. ----
  1803. false
  1804. ### Duplicate revokes have no effect
  1805. simple conn=mz_system,user=mz_system
  1806. REVOKE CREATEDB ON SYSTEM FROM joe
  1807. ----
  1808. COMPLETE 0
  1809. query T
  1810. SELECT privileges::text FROM mz_system_privileges
  1811. ----
  1812. =RN/mz_system
  1813. mz_system=RBNP/mz_system
  1814. statement ok
  1815. DROP ROLE joe
  1816. statement ok
  1817. CREATE ROLE joe
  1818. statement ok
  1819. GRANT joe TO child
  1820. simple conn=mz_system,user=mz_system
  1821. REVOKE CREATEROLE, CREATECLUSTER ON SYSTEM FROM PUBLIC
  1822. ----
  1823. COMPLETE 0
  1824. query T
  1825. SELECT privileges::text FROM mz_system_privileges
  1826. ----
  1827. mz_system=RBNP/mz_system
  1828. query B
  1829. SELECT has_system_privilege('joe', 'CREATEDB')
  1830. ----
  1831. false
  1832. query B
  1833. SELECT has_system_privilege('child', 'CREATEDB')
  1834. ----
  1835. false
  1836. query B
  1837. SELECT has_system_privilege((SELECT oid FROM mz_roles WHERE name = 'joe'), 'CREATEDB')
  1838. ----
  1839. false
  1840. ## Test misc error scenarios
  1841. statement error invalid privilege types SELECT, INSERT, UPDATE, DELETE for SCHEMA
  1842. GRANT INSERT, SELECT, UPDATE, DELETE ON SCHEMA sch TO joe
  1843. simple conn=mz_system,user=mz_system
  1844. GRANT INSERT ON TABLE mz_views TO joe
  1845. ----
  1846. db error: ERROR: system item 'mz_catalog.mz_views' cannot be modified
  1847. simple conn=mz_system,user=mz_system
  1848. REVOKE INSERT ON TABLE mz_views FROM joe
  1849. ----
  1850. db error: ERROR: system item 'mz_catalog.mz_views' cannot be modified
  1851. simple conn=mz_system,user=mz_system
  1852. GRANT SELECT ON TABLE mz_objects TO joe
  1853. ----
  1854. db error: ERROR: system item 'mz_catalog.mz_objects' cannot be modified
  1855. simple conn=mz_system,user=mz_system
  1856. REVOKE SELECT ON TABLE mz_objects FROM joe
  1857. ----
  1858. db error: ERROR: system item 'mz_catalog.mz_objects' cannot be modified
  1859. simple conn=mz_system,user=mz_system
  1860. GRANT SELECT ON TABLE mz_internal.mz_sink_statuses TO joe
  1861. ----
  1862. db error: ERROR: system item 'mz_internal.mz_sink_statuses' cannot be modified
  1863. simple conn=mz_system,user=mz_system
  1864. REVOKE SELECT ON TABLE mz_internal.mz_sink_statuses FROM joe
  1865. ----
  1866. db error: ERROR: system item 'mz_internal.mz_sink_statuses' cannot be modified
  1867. simple conn=mz_system,user=mz_system
  1868. GRANT USAGE ON TYPE bool TO joe
  1869. ----
  1870. db error: ERROR: system item 'pg_catalog.bool' cannot be modified
  1871. simple conn=mz_system,user=mz_system
  1872. REVOKE USAGE ON TYPE bool FROM joe
  1873. ----
  1874. db error: ERROR: system item 'pg_catalog.bool' cannot be modified
  1875. simple conn=mz_system,user=mz_system
  1876. GRANT CREATE ON CLUSTER mz_system TO joe
  1877. ----
  1878. db error: ERROR: system cluster 'mz_system' cannot be modified
  1879. simple conn=mz_system,user=mz_system
  1880. GRANT CREATE ON CLUSTER mz_catalog_server TO joe
  1881. ----
  1882. db error: ERROR: system cluster 'mz_catalog_server' cannot be modified
  1883. simple conn=mz_system,user=mz_system
  1884. REVOKE USAGE ON CLUSTER mz_system FROM joe
  1885. ----
  1886. db error: ERROR: system cluster 'mz_system' cannot be modified
  1887. simple conn=mz_system,user=mz_system
  1888. REVOKE USAGE ON CLUSTER mz_catalog_server FROM joe
  1889. ----
  1890. db error: ERROR: system cluster 'mz_catalog_server' cannot be modified
  1891. simple conn=mz_system,user=mz_system
  1892. GRANT CREATE ON SCHEMA pg_catalog TO joe
  1893. ----
  1894. db error: ERROR: system schema 'pg_catalog' cannot be modified
  1895. simple conn=mz_system,user=mz_system
  1896. REVOKE CREATE ON SCHEMA pg_catalog FROM joe
  1897. ----
  1898. db error: ERROR: system schema 'pg_catalog' cannot be modified
  1899. statement error unknown database 't'
  1900. GRANT SELECT ON DATABASE t TO joe
  1901. statement error invalid privilege types USAGE for TABLE
  1902. GRANT SELECT, USAGE ON TABLE t TO joe
  1903. statement error invalid privilege types CREATEROLE for TABLE "materialize.public.t"
  1904. GRANT CREATEROLE ON TABLE t TO test_role
  1905. statement error invalid privilege types CREATEDB for CLUSTER "c"
  1906. REVOKE CREATEDB ON CLUSTER c FROM test_role
  1907. ## Test multiple roles
  1908. simple conn=mz_system,user=mz_system
  1909. CREATE TABLE t1 (a INT);
  1910. ----
  1911. COMPLETE 0
  1912. query TT
  1913. SELECT name, privilege FROM item_privileges WHERE name = 't1'
  1914. ----
  1915. t1 mz_system=arwd/mz_system
  1916. simple conn=mz_system,user=mz_system
  1917. GRANT SELECT ON t1 TO joe, other
  1918. ----
  1919. COMPLETE 0
  1920. query TT rowsort
  1921. SELECT name, privilege FROM item_privileges WHERE name = 't1'
  1922. ----
  1923. t1 joe=r/mz_system
  1924. t1 other=r/mz_system
  1925. t1 mz_system=arwd/mz_system
  1926. simple conn=mz_system,user=mz_system
  1927. GRANT SELECT, INSERT ON t1 TO test_role, other
  1928. ----
  1929. COMPLETE 0
  1930. query TT rowsort
  1931. SELECT name, privilege FROM item_privileges WHERE name = 't1'
  1932. ----
  1933. t1 joe=r/mz_system
  1934. t1 other=ar/mz_system
  1935. t1 test_role=ar/mz_system
  1936. t1 mz_system=arwd/mz_system
  1937. simple conn=mz_system,user=mz_system
  1938. REVOKE INSERT ON t1 FROM joe, test_role, other
  1939. ----
  1940. COMPLETE 0
  1941. query TT rowsort
  1942. SELECT name, privilege FROM item_privileges WHERE name = 't1'
  1943. ----
  1944. t1 joe=r/mz_system
  1945. t1 other=r/mz_system
  1946. t1 test_role=r/mz_system
  1947. t1 mz_system=arwd/mz_system
  1948. simple conn=mz_system,user=mz_system
  1949. REVOKE SELECT ON t1 FROM joe, test_role, other
  1950. ----
  1951. COMPLETE 0
  1952. query TT
  1953. SELECT name, privilege FROM item_privileges WHERE name = 't1'
  1954. ----
  1955. t1 mz_system=arwd/mz_system
  1956. ## Test ALL keyword
  1957. simple conn=mz_system,user=mz_system
  1958. GRANT ALL ON t1 TO joe, test_role
  1959. ----
  1960. COMPLETE 0
  1961. query TT rowsort
  1962. SELECT name, privilege FROM item_privileges WHERE name = 't1'
  1963. ----
  1964. t1 joe=arwd/mz_system
  1965. t1 mz_system=arwd/mz_system
  1966. t1 test_role=arwd/mz_system
  1967. simple conn=mz_system,user=mz_system
  1968. REVOKE ALL ON t1 FROM joe, test_role, other
  1969. ----
  1970. COMPLETE 0
  1971. query TT
  1972. SELECT name, privilege FROM item_privileges WHERE name = 't1'
  1973. ----
  1974. t1 mz_system=arwd/mz_system
  1975. simple conn=mz_system,user=mz_system
  1976. CREATE VIEW v1 AS SELECT 1;
  1977. ----
  1978. COMPLETE 0
  1979. query TT
  1980. SELECT name, privilege FROM item_privileges WHERE name = 'v1'
  1981. ----
  1982. v1 mz_system=r/mz_system
  1983. simple conn=mz_system,user=mz_system
  1984. GRANT ALL ON v1 TO joe
  1985. ----
  1986. COMPLETE 0
  1987. query TT rowsort
  1988. SELECT name, privilege FROM item_privileges WHERE name = 'v1'
  1989. ----
  1990. v1 joe=r/mz_system
  1991. v1 mz_system=r/mz_system
  1992. simple conn=mz_system,user=mz_system
  1993. REVOKE ALL ON v1 FROM joe
  1994. ----
  1995. COMPLETE 0
  1996. query TT
  1997. SELECT name, privilege FROM item_privileges WHERE name = 'v1'
  1998. ----
  1999. v1 mz_system=r/mz_system
  2000. simple conn=mz_system,user=mz_system
  2001. GRANT ALL ON SYSTEM TO joe
  2002. ----
  2003. COMPLETE 0
  2004. query T
  2005. SELECT privileges::text FROM mz_system_privileges
  2006. ----
  2007. joe=RBNP/mz_system
  2008. mz_system=RBNP/mz_system
  2009. simple conn=mz_system,user=mz_system
  2010. REVOKE ALL ON SYSTEM FROM joe
  2011. ----
  2012. COMPLETE 0
  2013. query T
  2014. SELECT privileges::text FROM mz_system_privileges
  2015. ----
  2016. mz_system=RBNP/mz_system
  2017. ## Test system objects
  2018. simple conn=mz_system,user=mz_system
  2019. GRANT SELECT on v1 TO mz_catalog_server
  2020. ----
  2021. db error: ERROR: unknown role 'mz_catalog_server'
  2022. simple conn=mz_system,user=mz_system
  2023. GRANT SELECT on v1 TO mz_support
  2024. ----
  2025. db error: ERROR: role name "mz_support" is reserved
  2026. DETAIL: The role prefixes "mz_" and "pg_" are reserved for system roles.
  2027. simple conn=mz_system,user=mz_system
  2028. REVOKE SELECT on v1 FROM mz_support
  2029. ----
  2030. db error: ERROR: role name "mz_support" is reserved
  2031. DETAIL: The role prefixes "mz_" and "pg_" are reserved for system roles.
  2032. simple conn=mz_system,user=mz_system
  2033. GRANT INSERT on mz_tables TO joe
  2034. ----
  2035. db error: ERROR: system item 'mz_catalog.mz_tables' cannot be modified
  2036. simple conn=mz_system,user=mz_system
  2037. REVOKE SELECT on mz_tables FROM joe
  2038. ----
  2039. db error: ERROR: system item 'mz_catalog.mz_tables' cannot be modified
  2040. simple conn=mz_system,user=mz_system
  2041. GRANT USAGE on CLUSTER mz_system TO JOE
  2042. ----
  2043. db error: ERROR: system cluster 'mz_system' cannot be modified
  2044. simple conn=mz_system,user=mz_system
  2045. REVOKE USAGE on CLUSTER mz_catalog_server FROM PUBLIC
  2046. ----
  2047. db error: ERROR: system cluster 'mz_catalog_server' cannot be modified
  2048. # Test has_X_privilege error and misc scenarios.
  2049. ## If any input is NULL then the result is NULL.
  2050. ### System
  2051. query B
  2052. SELECT has_system_privilege(NULL, 'CREATEROLE')
  2053. ----
  2054. NULL
  2055. query B
  2056. SELECT has_system_privilege('joe', NULL)
  2057. ----
  2058. NULL
  2059. ### Cluster
  2060. query B
  2061. SELECT has_cluster_privilege(NULL, 'c', 'USAGE')
  2062. ----
  2063. NULL
  2064. query B
  2065. SELECT has_cluster_privilege('joe', NULL, 'USAGE')
  2066. ----
  2067. NULL
  2068. query B
  2069. SELECT has_cluster_privilege('joe', 'c', NULL)
  2070. ----
  2071. NULL
  2072. ### Connection
  2073. query B
  2074. SELECT has_connection_privilege(NULL, 'conn', 'USAGE')
  2075. ----
  2076. NULL
  2077. query B
  2078. SELECT has_connection_privilege('joe', NULL, 'USAGE')
  2079. ----
  2080. NULL
  2081. query B
  2082. SELECT has_connection_privilege('joe', 'conn', NULL)
  2083. ----
  2084. NULL
  2085. ### Database
  2086. query B
  2087. SELECT has_database_privilege(NULL, 'd', 'USAGE')
  2088. ----
  2089. NULL
  2090. query B
  2091. SELECT has_database_privilege('joe', NULL, 'USAGE')
  2092. ----
  2093. NULL
  2094. query B
  2095. SELECT has_database_privilege('joe', 'd', NULL)
  2096. ----
  2097. NULL
  2098. ### Schema
  2099. query B
  2100. SELECT has_schema_privilege(NULL, 'sch', 'USAGE')
  2101. ----
  2102. NULL
  2103. query B
  2104. SELECT has_schema_privilege('joe', NULL, 'USAGE')
  2105. ----
  2106. NULL
  2107. query B
  2108. SELECT has_schema_privilege('joe', 'sch', NULL)
  2109. ----
  2110. NULL
  2111. ### Secret
  2112. query B
  2113. SELECT has_secret_privilege(NULL, 'se', 'USAGE')
  2114. ----
  2115. NULL
  2116. query B
  2117. SELECT has_secret_privilege('joe', NULL, 'USAGE')
  2118. ----
  2119. NULL
  2120. query B
  2121. SELECT has_secret_privilege('joe', 'se', NULL)
  2122. ----
  2123. NULL
  2124. ### Table
  2125. query B
  2126. SELECT has_table_privilege(NULL, 't', 'SELECT')
  2127. ----
  2128. NULL
  2129. query B
  2130. SELECT has_table_privilege('joe', NULL, 'SELECT')
  2131. ----
  2132. NULL
  2133. query B
  2134. SELECT has_table_privilege('joe', 't', NULL)
  2135. ----
  2136. NULL
  2137. ### Type
  2138. query B
  2139. SELECT has_type_privilege(NULL, 'ty', 'USAGE')
  2140. ----
  2141. NULL
  2142. query B
  2143. SELECT has_type_privilege('joe', NULL, 'USAGE')
  2144. ----
  2145. NULL
  2146. query B
  2147. SELECT has_type_privilege('joe', 'ty', NULL)
  2148. ----
  2149. NULL
  2150. ## If any of the text inputs are invalid then the query should error.
  2151. ### System
  2152. query error role "fake_role" does not exist
  2153. SELECT has_system_privilege('fake_role', 'CREATEDB')
  2154. query error unrecognized privilege type: "fake privilege"
  2155. SELECT has_system_privilege('joe', 'fake privilege')
  2156. ### Cluster
  2157. query error role "fake_role" does not exist
  2158. SELECT has_cluster_privilege('fake_role', 'c', 'USAGE')
  2159. query error cluster "fake_cluster" does not exist
  2160. SELECT has_cluster_privilege('joe', 'fake_cluster', 'USAGE')
  2161. query error unrecognized privilege type: "fake privilege"
  2162. SELECT has_cluster_privilege('joe', 'c', 'fake privilege')
  2163. ### Connection
  2164. query error role "fake_role" does not exist
  2165. SELECT has_connection_privilege('fake_role', 'conn', 'USAGE')
  2166. query error db error: ERROR: connection "fake_connection" does not exist
  2167. SELECT has_connection_privilege('joe', 'fake_connection', 'USAGE')
  2168. query error unrecognized privilege type: "fake privilege"
  2169. SELECT has_connection_privilege('joe', 'conn', 'fake privilege')
  2170. ### Database
  2171. query error role "fake_role" does not exist
  2172. SELECT has_database_privilege('fake_role', 'd', 'USAGE')
  2173. query error database "fake_database" does not exist
  2174. SELECT has_database_privilege('joe', 'fake_database', 'USAGE')
  2175. query error unrecognized privilege type: "fake privilege"
  2176. SELECT has_database_privilege('joe', 'd', 'fake privilege')
  2177. ### Schema
  2178. query error role "fake_role" does not exist
  2179. SELECT has_schema_privilege('fake_role', 'sch', 'USAGE')
  2180. query error schema "fake_schema" does not exist
  2181. SELECT has_schema_privilege('joe', 'fake_schema', 'USAGE')
  2182. query error unrecognized privilege type: "fake privilege"
  2183. SELECT has_schema_privilege('joe', 'sch', 'fake privilege')
  2184. ### Secret
  2185. query error role "fake_role" does not exist
  2186. SELECT has_secret_privilege('fake_role', 'se', 'USAGE')
  2187. query error db error: ERROR: secret "fake_secret" does not exist
  2188. SELECT has_secret_privilege('joe', 'fake_secret', 'USAGE')
  2189. query error unrecognized privilege type: "fake privilege"
  2190. SELECT has_secret_privilege('joe', 'se', 'fake privilege')
  2191. ### Table
  2192. query error role "fake_role" does not exist
  2193. SELECT has_table_privilege('fake_role', 't', 'SELECT')
  2194. query error db error: ERROR: relation "fake_table" does not exist
  2195. SELECT has_table_privilege('joe', 'fake_table', 'SELECT')
  2196. query error unrecognized privilege type: "fake privilege"
  2197. SELECT has_table_privilege('joe', 't', 'fake privilege')
  2198. ### Type
  2199. query error role "fake_role" does not exist
  2200. SELECT has_type_privilege('fake_role', 'ty', 'USAGE')
  2201. query error db error: ERROR: type "fake_type" does not exist
  2202. SELECT has_type_privilege('joe', 'fake_type', 'USAGE')
  2203. query error unrecognized privilege type: "fake privilege"
  2204. SELECT has_type_privilege('joe', 'ty', 'fake privilege')
  2205. ## If any of the oid inputs are invalid then the query should be NULL.
  2206. ### System
  2207. query B
  2208. SELECT has_system_privilege(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'CREATECLUSTER')
  2209. ----
  2210. NULL
  2211. ### Cluster
  2212. query B
  2213. SELECT has_cluster_privilege(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'c', 'USAGE')
  2214. ----
  2215. NULL
  2216. ### Connection
  2217. query B
  2218. SELECT has_connection_privilege(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'conn', 'USAGE')
  2219. ----
  2220. NULL
  2221. query B
  2222. SELECT has_connection_privilege('joe', ((SELECT MAX(oid::int8) FROM mz_objects) + 1)::text::oid, 'USAGE')
  2223. ----
  2224. NULL
  2225. ### Database
  2226. query B
  2227. SELECT has_database_privilege(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'd', 'USAGE')
  2228. ----
  2229. NULL
  2230. query B
  2231. SELECT has_database_privilege('joe', ((SELECT MAX(oid::int8) FROM mz_objects) + 1)::text::oid, 'USAGE')
  2232. ----
  2233. NULL
  2234. ### Schema
  2235. query B
  2236. SELECT has_schema_privilege(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'sch', 'USAGE')
  2237. ----
  2238. NULL
  2239. query B
  2240. SELECT has_schema_privilege('joe', ((SELECT MAX(oid::int8) FROM mz_objects) + 1)::text::oid, 'USAGE')
  2241. ----
  2242. NULL
  2243. ### Secret
  2244. query B
  2245. SELECT has_secret_privilege(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'se', 'USAGE')
  2246. ----
  2247. NULL
  2248. query B
  2249. SELECT has_secret_privilege('joe', ((SELECT MAX(oid::int8) FROM mz_objects) + 1)::text::oid, 'USAGE')
  2250. ----
  2251. NULL
  2252. ### Table
  2253. query B
  2254. SELECT has_table_privilege(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 't', 'SELECT')
  2255. ----
  2256. NULL
  2257. query B
  2258. SELECT has_table_privilege('joe', ((SELECT MAX(oid::int8) FROM mz_objects) + 1)::text::oid, 'SELECT')
  2259. ----
  2260. NULL
  2261. ### Type
  2262. query B
  2263. SELECT has_type_privilege(((SELECT MAX(oid::int8) FROM mz_roles) + 1)::text::oid, 'ty', 'USAGE')
  2264. ----
  2265. NULL
  2266. query B
  2267. SELECT has_type_privilege('joe', ((SELECT MAX(oid::int8) FROM mz_objects) + 1)::text::oid, 'USAGE')
  2268. ----
  2269. NULL
  2270. ## The function should return true if ANY of the privileges exist, not all.
  2271. ### System
  2272. simple conn=mz_system,user=mz_system
  2273. REVOKE ALL PRIVILEGES ON SYSTEM FROM joe;
  2274. ----
  2275. COMPLETE 0
  2276. simple conn=mz_system,user=mz_system
  2277. GRANT CREATECLUSTER ON SYSTEM TO joe
  2278. ----
  2279. COMPLETE 0
  2280. query B
  2281. SELECT has_system_privilege('joe', 'CREATEROLE, CREATECLUSTER')
  2282. ----
  2283. true
  2284. ### Cluster
  2285. simple conn=mz_system,user=mz_system
  2286. REVOKE ALL PRIVILEGES ON CLUSTER c FROM joe, materialize;
  2287. ----
  2288. COMPLETE 0
  2289. simple conn=mz_system,user=mz_system
  2290. GRANT USAGE ON CLUSTER c TO joe
  2291. ----
  2292. COMPLETE 0
  2293. query B
  2294. SELECT has_cluster_privilege('joe', 'c', 'USAGE, CREATE')
  2295. ----
  2296. true
  2297. ### Connection
  2298. simple conn=mz_system,user=mz_system
  2299. REVOKE ALL PRIVILEGES ON CONNECTION conn FROM joe, materialize;
  2300. ----
  2301. COMPLETE 0
  2302. simple conn=mz_system,user=mz_system
  2303. GRANT USAGE ON CONNECTION conn TO joe
  2304. ----
  2305. COMPLETE 0
  2306. query B
  2307. SELECT has_connection_privilege('joe', 'conn', 'USAGE, CREATE')
  2308. ----
  2309. true
  2310. ### Database
  2311. simple conn=mz_system,user=mz_system
  2312. REVOKE ALL PRIVILEGES ON DATABASE d FROM joe, materialize;
  2313. ----
  2314. COMPLETE 0
  2315. simple conn=mz_system,user=mz_system
  2316. GRANT USAGE ON DATABASE d TO joe
  2317. ----
  2318. COMPLETE 0
  2319. query B
  2320. SELECT has_database_privilege('joe', 'd', 'USAGE, CREATE')
  2321. ----
  2322. true
  2323. ### Schema
  2324. simple conn=mz_system,user=mz_system
  2325. REVOKE ALL PRIVILEGES ON SCHEMA sch FROM joe, materialize;
  2326. ----
  2327. COMPLETE 0
  2328. simple conn=mz_system,user=mz_system
  2329. GRANT USAGE ON SCHEMA sch TO joe
  2330. ----
  2331. COMPLETE 0
  2332. query B
  2333. SELECT has_schema_privilege('joe', 'sch', 'USAGE, CREATE')
  2334. ----
  2335. true
  2336. ### Secret
  2337. simple conn=mz_system,user=mz_system
  2338. REVOKE ALL PRIVILEGES ON SECRET se FROM joe, materialize;
  2339. ----
  2340. COMPLETE 0
  2341. simple conn=mz_system,user=mz_system
  2342. GRANT USAGE ON SECRET se TO joe
  2343. ----
  2344. COMPLETE 0
  2345. query B
  2346. SELECT has_secret_privilege('joe', 'se', 'USAGE, CREATE')
  2347. ----
  2348. true
  2349. ### Table
  2350. simple conn=mz_system,user=mz_system
  2351. REVOKE ALL PRIVILEGES ON t FROM joe, materialize;
  2352. ----
  2353. COMPLETE 0
  2354. simple conn=mz_system,user=mz_system
  2355. GRANT SELECT ON t TO joe
  2356. ----
  2357. COMPLETE 0
  2358. query B
  2359. SELECT has_table_privilege('joe', 't', 'SELECT, INSERT')
  2360. ----
  2361. true
  2362. ### Type
  2363. simple conn=mz_system,user=mz_system
  2364. REVOKE ALL PRIVILEGES ON TYPE ty FROM joe, materialize;
  2365. ----
  2366. COMPLETE 0
  2367. simple conn=mz_system,user=mz_system
  2368. GRANT USAGE ON TYPE ty TO joe
  2369. ----
  2370. COMPLETE 0
  2371. query B
  2372. SELECT has_type_privilege('joe', 'ty', 'USAGE, CREATE')
  2373. ----
  2374. true
  2375. ## Test two/one input variants.
  2376. ### System
  2377. simple conn=mz_system,user=mz_system
  2378. REVOKE CREATEDB ON SYSTEM FROM materialize
  2379. ----
  2380. COMPLETE 0
  2381. query B
  2382. SELECT has_system_privilege('materialize', 'CREATEDB')
  2383. ----
  2384. false
  2385. query B
  2386. SELECT has_system_privilege('CREATEDB')
  2387. ----
  2388. false
  2389. simple conn=mz_system,user=mz_system
  2390. GRANT CREATEDB ON SYSTEM TO materialize
  2391. ----
  2392. COMPLETE 0
  2393. query B
  2394. SELECT has_system_privilege('materialize', 'CREATEDB')
  2395. ----
  2396. true
  2397. query B
  2398. SELECT has_system_privilege('CREATEDB')
  2399. ----
  2400. true
  2401. ### Cluster
  2402. query B
  2403. SELECT has_cluster_privilege('materialize', 'c', 'USAGE')
  2404. ----
  2405. false
  2406. query B
  2407. SELECT has_cluster_privilege('c', 'USAGE')
  2408. ----
  2409. false
  2410. simple conn=mz_system,user=mz_system
  2411. GRANT USAGE ON CLUSTER c TO materialize
  2412. ----
  2413. COMPLETE 0
  2414. query B
  2415. SELECT has_cluster_privilege('materialize', 'c', 'USAGE')
  2416. ----
  2417. true
  2418. query B
  2419. SELECT has_cluster_privilege('c', 'USAGE')
  2420. ----
  2421. true
  2422. ### Connection
  2423. query B
  2424. SELECT has_connection_privilege('materialize', 'conn', 'USAGE')
  2425. ----
  2426. false
  2427. query B
  2428. SELECT has_connection_privilege('conn', 'USAGE')
  2429. ----
  2430. false
  2431. query B
  2432. SELECT has_connection_privilege('materialize', (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  2433. ----
  2434. false
  2435. query B
  2436. SELECT has_connection_privilege((SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  2437. ----
  2438. false
  2439. simple conn=mz_system,user=mz_system
  2440. GRANT USAGE ON CONNECTION conn TO materialize
  2441. ----
  2442. COMPLETE 0
  2443. query B
  2444. SELECT has_connection_privilege('materialize', 'conn', 'USAGE')
  2445. ----
  2446. true
  2447. query B
  2448. SELECT has_connection_privilege('conn', 'USAGE')
  2449. ----
  2450. true
  2451. query B
  2452. SELECT has_connection_privilege('materialize', (SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  2453. ----
  2454. true
  2455. query B
  2456. SELECT has_connection_privilege((SELECT oid FROM mz_connections WHERE name = 'conn'), 'USAGE')
  2457. ----
  2458. true
  2459. ### Database
  2460. query B
  2461. SELECT has_database_privilege('materialize', 'd', 'USAGE')
  2462. ----
  2463. false
  2464. query B
  2465. SELECT has_database_privilege('d', 'USAGE')
  2466. ----
  2467. false
  2468. query B
  2469. SELECT has_database_privilege('materialize', (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  2470. ----
  2471. false
  2472. query B
  2473. SELECT has_database_privilege((SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  2474. ----
  2475. false
  2476. simple conn=mz_system,user=mz_system
  2477. GRANT USAGE ON DATABASE d TO materialize
  2478. ----
  2479. COMPLETE 0
  2480. query B
  2481. SELECT has_database_privilege('materialize', 'd', 'USAGE')
  2482. ----
  2483. true
  2484. query B
  2485. SELECT has_database_privilege('d', 'USAGE')
  2486. ----
  2487. true
  2488. query B
  2489. SELECT has_database_privilege('materialize', (SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  2490. ----
  2491. true
  2492. query B
  2493. SELECT has_database_privilege((SELECT oid FROM mz_databases WHERE name = 'd'), 'USAGE')
  2494. ----
  2495. true
  2496. ### Schema
  2497. query B
  2498. SELECT has_schema_privilege('materialize', 'sch', 'USAGE')
  2499. ----
  2500. false
  2501. query B
  2502. SELECT has_schema_privilege('sch', 'USAGE')
  2503. ----
  2504. false
  2505. query B
  2506. SELECT has_schema_privilege('materialize', (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  2507. ----
  2508. false
  2509. query B
  2510. SELECT has_schema_privilege((SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  2511. ----
  2512. false
  2513. simple conn=mz_system,user=mz_system
  2514. GRANT USAGE ON SCHEMA sch TO materialize
  2515. ----
  2516. COMPLETE 0
  2517. query B
  2518. SELECT has_schema_privilege('materialize', 'sch', 'USAGE')
  2519. ----
  2520. true
  2521. query B
  2522. SELECT has_schema_privilege('sch', 'USAGE')
  2523. ----
  2524. true
  2525. query B
  2526. SELECT has_schema_privilege('materialize', (SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  2527. ----
  2528. true
  2529. query B
  2530. SELECT has_schema_privilege((SELECT oid FROM mz_schemas WHERE name = 'sch'), 'USAGE')
  2531. ----
  2532. true
  2533. ### Secret
  2534. query B
  2535. SELECT has_secret_privilege('materialize', 'se', 'USAGE')
  2536. ----
  2537. false
  2538. query B
  2539. SELECT has_secret_privilege('se', 'USAGE')
  2540. ----
  2541. false
  2542. query B
  2543. SELECT has_secret_privilege('materialize', (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  2544. ----
  2545. false
  2546. query B
  2547. SELECT has_secret_privilege((SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  2548. ----
  2549. false
  2550. simple conn=mz_system,user=mz_system
  2551. GRANT USAGE ON SECRET se TO materialize
  2552. ----
  2553. COMPLETE 0
  2554. query B
  2555. SELECT has_secret_privilege('materialize', 'se', 'USAGE')
  2556. ----
  2557. true
  2558. query B
  2559. SELECT has_secret_privilege('se', 'USAGE')
  2560. ----
  2561. true
  2562. query B
  2563. SELECT has_secret_privilege('materialize', (SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  2564. ----
  2565. true
  2566. query B
  2567. SELECT has_secret_privilege((SELECT oid FROM mz_secrets WHERE name = 'se'), 'USAGE')
  2568. ----
  2569. true
  2570. ### Table
  2571. query B
  2572. SELECT has_table_privilege('materialize', 't', 'SELECT')
  2573. ----
  2574. false
  2575. query B
  2576. SELECT has_table_privilege('t', 'SELECT')
  2577. ----
  2578. false
  2579. query B
  2580. SELECT has_table_privilege('materialize', (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  2581. ----
  2582. false
  2583. query B
  2584. SELECT has_table_privilege((SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  2585. ----
  2586. false
  2587. simple conn=mz_system,user=mz_system
  2588. GRANT SELECT ON t TO materialize
  2589. ----
  2590. COMPLETE 0
  2591. query B
  2592. SELECT has_table_privilege('materialize', 't', 'SELECT')
  2593. ----
  2594. true
  2595. query B
  2596. SELECT has_table_privilege('t', 'SELECT')
  2597. ----
  2598. true
  2599. query B
  2600. SELECT has_table_privilege('materialize', (SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  2601. ----
  2602. true
  2603. query B
  2604. SELECT has_table_privilege((SELECT oid FROM mz_tables WHERE name = 't'), 'SELECT')
  2605. ----
  2606. true
  2607. ### Type
  2608. simple conn=mz_system,user=mz_system
  2609. REVOKE USAGE ON TYPE ty FROM PUBLIC
  2610. ----
  2611. COMPLETE 0
  2612. query B
  2613. SELECT has_type_privilege('materialize', 'ty', 'USAGE')
  2614. ----
  2615. false
  2616. query B
  2617. SELECT has_type_privilege('ty', 'USAGE')
  2618. ----
  2619. false
  2620. query B
  2621. SELECT has_type_privilege('materialize', (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  2622. ----
  2623. false
  2624. query B
  2625. SELECT has_type_privilege((SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  2626. ----
  2627. false
  2628. simple conn=mz_system,user=mz_system
  2629. GRANT USAGE ON TYPE ty TO materialize
  2630. ----
  2631. COMPLETE 0
  2632. query B
  2633. SELECT has_type_privilege('materialize', 'ty', 'USAGE')
  2634. ----
  2635. true
  2636. query B
  2637. SELECT has_type_privilege('ty', 'USAGE')
  2638. ----
  2639. true
  2640. query B
  2641. SELECT has_type_privilege('materialize', (SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  2642. ----
  2643. true
  2644. query B
  2645. SELECT has_type_privilege((SELECT oid FROM mz_types WHERE name = 'ty'), 'USAGE')
  2646. ----
  2647. true
  2648. simple conn=mz_system,user=mz_system
  2649. GRANT USAGE ON TYPE ty TO PUBLIC
  2650. ----
  2651. COMPLETE 0
  2652. # Test multi-object GRANT/REVOKE
  2653. simple conn=mz_system,user=mz_system
  2654. DROP TABLE t1;
  2655. ----
  2656. COMPLETE 0
  2657. simple conn=mz_system,user=mz_system
  2658. CREATE TABLE t1 ();
  2659. ----
  2660. COMPLETE 0
  2661. simple conn=mz_system,user=mz_system
  2662. CREATE TABLE t2 ();
  2663. ----
  2664. COMPLETE 0
  2665. query B
  2666. SELECT has_table_privilege('t1', 'SELECT')
  2667. ----
  2668. false
  2669. query B
  2670. SELECT has_table_privilege('t2', 'SELECT')
  2671. ----
  2672. false
  2673. simple conn=mz_system,user=mz_system
  2674. GRANT SELECT ON TABLE t1, t2 TO materialize
  2675. ----
  2676. COMPLETE 0
  2677. query B
  2678. SELECT has_table_privilege('t1', 'SELECT')
  2679. ----
  2680. true
  2681. query B
  2682. SELECT has_table_privilege('t2', 'SELECT')
  2683. ----
  2684. true
  2685. simple conn=mz_system,user=mz_system
  2686. REVOKE SELECT ON TABLE t1, t2 FROM materialize
  2687. ----
  2688. COMPLETE 0
  2689. query B
  2690. SELECT has_table_privilege('t1', 'SELECT')
  2691. ----
  2692. false
  2693. query B
  2694. SELECT has_table_privilege('t2', 'SELECT')
  2695. ----
  2696. false
  2697. # Test ALL SCHEMA object GRANT/REVOKE
  2698. simple conn=mz_system,user=mz_system
  2699. CREATE DATABASE d1;
  2700. ----
  2701. COMPLETE 0
  2702. simple conn=mz_system,user=mz_system
  2703. CREATE SCHEMA d1.s1;
  2704. ----
  2705. COMPLETE 0
  2706. simple conn=mz_system,user=mz_system
  2707. CREATE DATABASE d2;
  2708. ----
  2709. COMPLETE 0
  2710. simple conn=mz_system,user=mz_system
  2711. CREATE SCHEMA d2.s2;
  2712. ----
  2713. COMPLETE 0
  2714. simple conn=mz_system,user=mz_system
  2715. CREATE TABLE d1.s1.t3 ();
  2716. ----
  2717. COMPLETE 0
  2718. simple conn=mz_system,user=mz_system
  2719. CREATE TABLE d1.s1.t4 ();
  2720. ----
  2721. COMPLETE 0
  2722. simple conn=mz_system,user=mz_system
  2723. CREATE TABLE d2.s2.t5 ();
  2724. ----
  2725. COMPLETE 0
  2726. simple conn=mz_system,user=mz_system
  2727. CREATE TABLE d2.s2.t6 ();
  2728. ----
  2729. COMPLETE 0
  2730. simple conn=mz_system,user=mz_system
  2731. CREATE TYPE d1.s1.ty1 AS LIST (ELEMENT TYPE=bool);
  2732. ----
  2733. COMPLETE 0
  2734. simple conn=mz_system,user=mz_system
  2735. CREATE TYPE d1.s1.ty2 AS LIST (ELEMENT TYPE=bool);
  2736. ----
  2737. COMPLETE 0
  2738. simple conn=mz_system,user=mz_system
  2739. CREATE TYPE d2.s2.ty3 AS LIST (ELEMENT TYPE=bool);
  2740. ----
  2741. COMPLETE 0
  2742. simple conn=mz_system,user=mz_system
  2743. CREATE TYPE d2.s2.ty4 AS LIST (ELEMENT TYPE=bool);
  2744. ----
  2745. COMPLETE 0
  2746. simple conn=mz_system,user=mz_system
  2747. CREATE SECRET d1.s1.se1 AS decode('c2VjcmV0Cg==', 'base64');
  2748. ----
  2749. COMPLETE 0
  2750. simple conn=mz_system,user=mz_system
  2751. CREATE SECRET d1.s1.se2 AS decode('c2VjcmV0Cg==', 'base64');
  2752. ----
  2753. COMPLETE 0
  2754. simple conn=mz_system,user=mz_system
  2755. CREATE SECRET d2.s2.se3 AS decode('c2VjcmV0Cg==', 'base64');
  2756. ----
  2757. COMPLETE 0
  2758. simple conn=mz_system,user=mz_system
  2759. CREATE SECRET d2.s2.se4 AS decode('c2VjcmV0Cg==', 'base64');
  2760. ----
  2761. COMPLETE 0
  2762. simple conn=mz_system,user=mz_system
  2763. CREATE CONNECTION d1.s1.conn1 TO KAFKA (BROKER 'localhost:9092', SECURITY PROTOCOL PLAINTEXT) WITH (VALIDATE = false);
  2764. ----
  2765. COMPLETE 0
  2766. simple conn=mz_system,user=mz_system
  2767. CREATE CONNECTION d1.s1.conn2 TO KAFKA (BROKER 'localhost:9092', SECURITY PROTOCOL PLAINTEXT) WITH (VALIDATE = false);
  2768. ----
  2769. COMPLETE 0
  2770. simple conn=mz_system,user=mz_system
  2771. CREATE CONNECTION d2.s2.conn3 TO KAFKA (BROKER 'localhost:9092', SECURITY PROTOCOL PLAINTEXT) WITH (VALIDATE = false);
  2772. ----
  2773. COMPLETE 0
  2774. simple conn=mz_system,user=mz_system
  2775. CREATE CONNECTION d2.s2.conn4 TO KAFKA (BROKER 'localhost:9092', SECURITY PROTOCOL PLAINTEXT) WITH (VALIDATE = false);
  2776. ----
  2777. COMPLETE 0
  2778. ## Tables
  2779. query error db error: ERROR: relation "t3" does not exist
  2780. SELECT has_table_privilege('t3', 'SELECT')
  2781. query B
  2782. SELECT has_table_privilege('d1.s1.t3', 'SELECT')
  2783. ----
  2784. false
  2785. query B
  2786. SELECT has_table_privilege('d1.s1.t4', 'SELECT')
  2787. ----
  2788. false
  2789. query B
  2790. SELECT has_table_privilege('d2.s2.t5', 'SELECT')
  2791. ----
  2792. false
  2793. query B
  2794. SELECT has_table_privilege('d2.s2.t6', 'SELECT')
  2795. ----
  2796. false
  2797. simple conn=mz_system,user=mz_system
  2798. GRANT SELECT ON ALL TABLES IN SCHEMA d1.s1, d2.s2 TO materialize;
  2799. ----
  2800. COMPLETE 0
  2801. query B
  2802. SELECT has_table_privilege('d1.s1.t3', 'SELECT')
  2803. ----
  2804. true
  2805. query B
  2806. SELECT has_table_privilege('d1.s1.t4', 'SELECT')
  2807. ----
  2808. true
  2809. query B
  2810. SELECT has_table_privilege('d2.s2.t5', 'SELECT')
  2811. ----
  2812. true
  2813. query B
  2814. SELECT has_table_privilege('d2.s2.t6', 'SELECT')
  2815. ----
  2816. true
  2817. simple conn=mz_system,user=mz_system
  2818. REVOKE SELECT ON ALL TABLES IN SCHEMA d1.s1, d2.s2 FROM materialize;
  2819. ----
  2820. COMPLETE 0
  2821. query B
  2822. SELECT has_table_privilege('d1.s1.t3', 'SELECT')
  2823. ----
  2824. false
  2825. query B
  2826. SELECT has_table_privilege('d1.s1.t4', 'SELECT')
  2827. ----
  2828. false
  2829. query B
  2830. SELECT has_table_privilege('d2.s2.t5', 'SELECT')
  2831. ----
  2832. false
  2833. query B
  2834. SELECT has_table_privilege('d2.s2.t6', 'SELECT')
  2835. ----
  2836. false
  2837. ## Types
  2838. simple conn=mz_system,user=mz_system
  2839. REVOKE USAGE ON ALL TYPES FROM PUBLIC
  2840. ----
  2841. COMPLETE 0
  2842. query error db error: ERROR: type "ty1" does not exist
  2843. SELECT has_type_privilege('ty1', 'USAGE')
  2844. query B
  2845. SELECT has_type_privilege('d1.s1.ty1', 'USAGE')
  2846. ----
  2847. false
  2848. query B
  2849. SELECT has_type_privilege('d1.s1.ty2', 'USAGE')
  2850. ----
  2851. false
  2852. query B
  2853. SELECT has_type_privilege('d2.s2.ty3', 'USAGE')
  2854. ----
  2855. false
  2856. query B
  2857. SELECT has_type_privilege('d2.s2.ty4', 'USAGE')
  2858. ----
  2859. false
  2860. simple conn=mz_system,user=mz_system
  2861. GRANT USAGE ON ALL TYPES IN SCHEMA d1.s1, d2.s2 TO materialize;
  2862. ----
  2863. COMPLETE 0
  2864. query B
  2865. SELECT has_type_privilege('d1.s1.ty1', 'USAGE')
  2866. ----
  2867. true
  2868. query B
  2869. SELECT has_type_privilege('d1.s1.ty2', 'USAGE')
  2870. ----
  2871. true
  2872. query B
  2873. SELECT has_type_privilege('d2.s2.ty3', 'USAGE')
  2874. ----
  2875. true
  2876. query B
  2877. SELECT has_type_privilege('d2.s2.ty4', 'USAGE')
  2878. ----
  2879. true
  2880. simple conn=mz_system,user=mz_system
  2881. REVOKE USAGE ON ALL TYPES IN SCHEMA d1.s1, d2.s2 FROM materialize;
  2882. ----
  2883. COMPLETE 0
  2884. query B
  2885. SELECT has_type_privilege('d1.s1.ty1', 'USAGE')
  2886. ----
  2887. false
  2888. query B
  2889. SELECT has_type_privilege('d1.s1.ty2', 'USAGE')
  2890. ----
  2891. false
  2892. query B
  2893. SELECT has_type_privilege('d2.s2.ty3', 'USAGE')
  2894. ----
  2895. false
  2896. query B
  2897. SELECT has_type_privilege('d2.s2.ty4', 'USAGE')
  2898. ----
  2899. false
  2900. simple conn=mz_system,user=mz_system
  2901. GRANT USAGE ON ALL TYPES TO PUBLIC
  2902. ----
  2903. COMPLETE 0
  2904. ## Secrets
  2905. query B
  2906. SELECT has_secret_privilege('se1', 'USAGE')
  2907. ----
  2908. false
  2909. query B
  2910. SELECT has_secret_privilege('se2', 'USAGE')
  2911. ----
  2912. false
  2913. query B
  2914. SELECT has_secret_privilege('se3', 'USAGE')
  2915. ----
  2916. false
  2917. query B
  2918. SELECT has_secret_privilege('se4', 'USAGE')
  2919. ----
  2920. false
  2921. simple conn=mz_system,user=mz_system
  2922. GRANT USAGE ON ALL SECRETS IN SCHEMA d1.s1, d2.s2 TO materialize;
  2923. ----
  2924. COMPLETE 0
  2925. query B
  2926. SELECT has_secret_privilege('se1', 'USAGE')
  2927. ----
  2928. true
  2929. query B
  2930. SELECT has_secret_privilege('se2', 'USAGE')
  2931. ----
  2932. true
  2933. query B
  2934. SELECT has_secret_privilege('se3', 'USAGE')
  2935. ----
  2936. true
  2937. query B
  2938. SELECT has_secret_privilege('se4', 'USAGE')
  2939. ----
  2940. true
  2941. simple conn=mz_system,user=mz_system
  2942. REVOKE USAGE ON ALL SECRETS IN SCHEMA d1.s1, d2.s2 FROM materialize;
  2943. ----
  2944. COMPLETE 0
  2945. query B
  2946. SELECT has_secret_privilege('se1', 'USAGE')
  2947. ----
  2948. false
  2949. query B
  2950. SELECT has_secret_privilege('se2', 'USAGE')
  2951. ----
  2952. false
  2953. query B
  2954. SELECT has_secret_privilege('se3', 'USAGE')
  2955. ----
  2956. false
  2957. query B
  2958. SELECT has_secret_privilege('se4', 'USAGE')
  2959. ----
  2960. false
  2961. ## Connections
  2962. query B
  2963. SELECT has_connection_privilege('conn1', 'USAGE')
  2964. ----
  2965. false
  2966. query B
  2967. SELECT has_connection_privilege('conn2', 'USAGE')
  2968. ----
  2969. false
  2970. query B
  2971. SELECT has_connection_privilege('conn3', 'USAGE')
  2972. ----
  2973. false
  2974. query B
  2975. SELECT has_connection_privilege('conn4', 'USAGE')
  2976. ----
  2977. false
  2978. simple conn=mz_system,user=mz_system
  2979. GRANT USAGE ON ALL CONNECTIONS IN SCHEMA d1.s1, d2.s2 TO materialize;
  2980. ----
  2981. COMPLETE 0
  2982. query B
  2983. SELECT has_connection_privilege('conn1', 'USAGE')
  2984. ----
  2985. true
  2986. query B
  2987. SELECT has_connection_privilege('conn2', 'USAGE')
  2988. ----
  2989. true
  2990. query B
  2991. SELECT has_connection_privilege('conn3', 'USAGE')
  2992. ----
  2993. true
  2994. query B
  2995. SELECT has_connection_privilege('conn4', 'USAGE')
  2996. ----
  2997. true
  2998. simple conn=mz_system,user=mz_system
  2999. REVOKE USAGE ON ALL CONNECTIONS IN SCHEMA d1.s1, d2.s2 FROM materialize;
  3000. ----
  3001. COMPLETE 0
  3002. query B
  3003. SELECT has_connection_privilege('conn1', 'USAGE')
  3004. ----
  3005. false
  3006. query B
  3007. SELECT has_connection_privilege('conn2', 'USAGE')
  3008. ----
  3009. false
  3010. query B
  3011. SELECT has_connection_privilege('conn3', 'USAGE')
  3012. ----
  3013. false
  3014. query B
  3015. SELECT has_connection_privilege('conn4', 'USAGE')
  3016. ----
  3017. false
  3018. # Test ALL DATABASE object GRANT/REVOKE
  3019. ## Tables
  3020. query B
  3021. SELECT has_table_privilege('d1.s1.t3', 'SELECT')
  3022. ----
  3023. false
  3024. query B
  3025. SELECT has_table_privilege('d1.s1.t4', 'SELECT')
  3026. ----
  3027. false
  3028. query B
  3029. SELECT has_table_privilege('d2.s2.t5', 'SELECT')
  3030. ----
  3031. false
  3032. query B
  3033. SELECT has_table_privilege('d2.s2.t6', 'SELECT')
  3034. ----
  3035. false
  3036. simple conn=mz_system,user=mz_system
  3037. GRANT SELECT ON ALL TABLES IN DATABASE d1, d2 TO materialize;
  3038. ----
  3039. COMPLETE 0
  3040. query B
  3041. SELECT has_table_privilege('d1.s1.t3', 'SELECT')
  3042. ----
  3043. true
  3044. query B
  3045. SELECT has_table_privilege('d1.s1.t4', 'SELECT')
  3046. ----
  3047. true
  3048. query B
  3049. SELECT has_table_privilege('d2.s2.t5', 'SELECT')
  3050. ----
  3051. true
  3052. query B
  3053. SELECT has_table_privilege('d2.s2.t6', 'SELECT')
  3054. ----
  3055. true
  3056. simple conn=mz_system,user=mz_system
  3057. REVOKE SELECT ON ALL TABLES IN DATABASE d1, d2 FROM materialize;
  3058. ----
  3059. COMPLETE 0
  3060. query B
  3061. SELECT has_table_privilege('d1.s1.t3', 'SELECT')
  3062. ----
  3063. false
  3064. query B
  3065. SELECT has_table_privilege('d1.s1.t4', 'SELECT')
  3066. ----
  3067. false
  3068. query B
  3069. SELECT has_table_privilege('d2.s2.t5', 'SELECT')
  3070. ----
  3071. false
  3072. query B
  3073. SELECT has_table_privilege('d2.s2.t6', 'SELECT')
  3074. ----
  3075. false
  3076. ## Types
  3077. simple conn=mz_system,user=mz_system
  3078. REVOKE USAGE ON ALL TYPES FROM PUBLIC
  3079. ----
  3080. COMPLETE 0
  3081. query B
  3082. SELECT has_type_privilege('d1.s1.ty1', 'USAGE')
  3083. ----
  3084. false
  3085. query B
  3086. SELECT has_type_privilege('d1.s1.ty2', 'USAGE')
  3087. ----
  3088. false
  3089. query B
  3090. SELECT has_type_privilege('d2.s2.ty3', 'USAGE')
  3091. ----
  3092. false
  3093. query B
  3094. SELECT has_type_privilege('d2.s2.ty4', 'USAGE')
  3095. ----
  3096. false
  3097. simple conn=mz_system,user=mz_system
  3098. GRANT USAGE ON ALL TYPES IN DATABASE d1, d2 TO materialize;
  3099. ----
  3100. COMPLETE 0
  3101. query B
  3102. SELECT has_type_privilege('d1.s1.ty1', 'USAGE')
  3103. ----
  3104. true
  3105. query B
  3106. SELECT has_type_privilege('d1.s1.ty2', 'USAGE')
  3107. ----
  3108. true
  3109. query B
  3110. SELECT has_type_privilege('d2.s2.ty3', 'USAGE')
  3111. ----
  3112. true
  3113. query B
  3114. SELECT has_type_privilege('d2.s2.ty4', 'USAGE')
  3115. ----
  3116. true
  3117. simple conn=mz_system,user=mz_system
  3118. REVOKE USAGE ON ALL TYPES IN DATABASE d1, d2 FROM materialize;
  3119. ----
  3120. COMPLETE 0
  3121. query B
  3122. SELECT has_type_privilege('d1.s1.ty1', 'USAGE')
  3123. ----
  3124. false
  3125. query B
  3126. SELECT has_type_privilege('d1.s1.ty2', 'USAGE')
  3127. ----
  3128. false
  3129. query B
  3130. SELECT has_type_privilege('d2.s2.ty3', 'USAGE')
  3131. ----
  3132. false
  3133. query B
  3134. SELECT has_type_privilege('d2.s2.ty4', 'USAGE')
  3135. ----
  3136. false
  3137. simple conn=mz_system,user=mz_system
  3138. GRANT USAGE ON ALL TYPES TO PUBLIC
  3139. ----
  3140. COMPLETE 0
  3141. ## Secrets
  3142. query B
  3143. SELECT has_secret_privilege('se1', 'USAGE')
  3144. ----
  3145. false
  3146. query B
  3147. SELECT has_secret_privilege('se2', 'USAGE')
  3148. ----
  3149. false
  3150. query B
  3151. SELECT has_secret_privilege('se3', 'USAGE')
  3152. ----
  3153. false
  3154. query B
  3155. SELECT has_secret_privilege('se4', 'USAGE')
  3156. ----
  3157. false
  3158. simple conn=mz_system,user=mz_system
  3159. GRANT USAGE ON ALL SECRETS IN DATABASE d1, d2 TO materialize;
  3160. ----
  3161. COMPLETE 0
  3162. query B
  3163. SELECT has_secret_privilege('se1', 'USAGE')
  3164. ----
  3165. true
  3166. query B
  3167. SELECT has_secret_privilege('se2', 'USAGE')
  3168. ----
  3169. true
  3170. query B
  3171. SELECT has_secret_privilege('se3', 'USAGE')
  3172. ----
  3173. true
  3174. query B
  3175. SELECT has_secret_privilege('se4', 'USAGE')
  3176. ----
  3177. true
  3178. simple conn=mz_system,user=mz_system
  3179. REVOKE USAGE ON ALL SECRETS IN DATABASE d1, d2 FROM materialize;
  3180. ----
  3181. COMPLETE 0
  3182. query B
  3183. SELECT has_secret_privilege('se1', 'USAGE')
  3184. ----
  3185. false
  3186. query B
  3187. SELECT has_secret_privilege('se2', 'USAGE')
  3188. ----
  3189. false
  3190. query B
  3191. SELECT has_secret_privilege('se3', 'USAGE')
  3192. ----
  3193. false
  3194. query B
  3195. SELECT has_secret_privilege('se4', 'USAGE')
  3196. ----
  3197. false
  3198. ## Connections
  3199. query B
  3200. SELECT has_connection_privilege('conn1', 'USAGE')
  3201. ----
  3202. false
  3203. query B
  3204. SELECT has_connection_privilege('conn2', 'USAGE')
  3205. ----
  3206. false
  3207. query B
  3208. SELECT has_connection_privilege('conn3', 'USAGE')
  3209. ----
  3210. false
  3211. query B
  3212. SELECT has_connection_privilege('conn4', 'USAGE')
  3213. ----
  3214. false
  3215. simple conn=mz_system,user=mz_system
  3216. GRANT USAGE ON ALL CONNECTIONS IN DATABASE d1, d2 TO materialize;
  3217. ----
  3218. COMPLETE 0
  3219. query B
  3220. SELECT has_connection_privilege('conn1', 'USAGE')
  3221. ----
  3222. true
  3223. query B
  3224. SELECT has_connection_privilege('conn2', 'USAGE')
  3225. ----
  3226. true
  3227. query B
  3228. SELECT has_connection_privilege('conn3', 'USAGE')
  3229. ----
  3230. true
  3231. query B
  3232. SELECT has_connection_privilege('conn4', 'USAGE')
  3233. ----
  3234. true
  3235. simple conn=mz_system,user=mz_system
  3236. REVOKE USAGE ON ALL CONNECTIONS IN DATABASE d1, d2 FROM materialize;
  3237. ----
  3238. COMPLETE 0
  3239. query B
  3240. SELECT has_connection_privilege('conn1', 'USAGE')
  3241. ----
  3242. false
  3243. query B
  3244. SELECT has_connection_privilege('conn2', 'USAGE')
  3245. ----
  3246. false
  3247. query B
  3248. SELECT has_connection_privilege('conn3', 'USAGE')
  3249. ----
  3250. false
  3251. query B
  3252. SELECT has_connection_privilege('conn4', 'USAGE')
  3253. ----
  3254. false
  3255. ## Schemas
  3256. query B
  3257. SELECT has_schema_privilege('d1.s1', 'CREATE')
  3258. ----
  3259. false
  3260. query B
  3261. SELECT has_schema_privilege('d2.s2', 'CREATE')
  3262. ----
  3263. false
  3264. simple conn=mz_system,user=mz_system
  3265. GRANT CREATE ON ALL SCHEMAS IN DATABASE d1, d2 TO materialize;
  3266. ----
  3267. COMPLETE 0
  3268. query B
  3269. SELECT has_schema_privilege('d1.s1', 'CREATE')
  3270. ----
  3271. true
  3272. query B
  3273. SELECT has_schema_privilege('d2.s2', 'CREATE')
  3274. ----
  3275. true
  3276. simple conn=mz_system,user=mz_system
  3277. REVOKE CREATE ON ALL SCHEMAS IN DATABASE d1, d2 FROM materialize;
  3278. ----
  3279. COMPLETE 0
  3280. query B
  3281. SELECT has_schema_privilege('d1.s1', 'CREATE')
  3282. ----
  3283. false
  3284. query B
  3285. SELECT has_schema_privilege('d2.s2', 'CREATE')
  3286. ----
  3287. false
  3288. # Test ALL object GRANT/REVOKE
  3289. ## Tables
  3290. query B
  3291. SELECT has_table_privilege('d1.s1.t3', 'SELECT')
  3292. ----
  3293. false
  3294. query B
  3295. SELECT has_table_privilege('d1.s1.t4', 'SELECT')
  3296. ----
  3297. false
  3298. query B
  3299. SELECT has_table_privilege('d2.s2.t5', 'SELECT')
  3300. ----
  3301. false
  3302. query B
  3303. SELECT has_table_privilege('d2.s2.t6', 'SELECT')
  3304. ----
  3305. false
  3306. simple conn=mz_system,user=mz_system
  3307. GRANT SELECT ON ALL TABLES TO materialize;
  3308. ----
  3309. COMPLETE 0
  3310. query B
  3311. SELECT has_table_privilege('d1.s1.t3', 'SELECT')
  3312. ----
  3313. true
  3314. query B
  3315. SELECT has_table_privilege('d1.s1.t4', 'SELECT')
  3316. ----
  3317. true
  3318. query B
  3319. SELECT has_table_privilege('d2.s2.t5', 'SELECT')
  3320. ----
  3321. true
  3322. query B
  3323. SELECT has_table_privilege('d2.s2.t6', 'SELECT')
  3324. ----
  3325. true
  3326. simple conn=mz_system,user=mz_system
  3327. REVOKE SELECT ON ALL TABLES FROM materialize;
  3328. ----
  3329. COMPLETE 0
  3330. query B
  3331. SELECT has_table_privilege('d1.s1.t3', 'SELECT')
  3332. ----
  3333. false
  3334. query B
  3335. SELECT has_table_privilege('d1.s1.t4', 'SELECT')
  3336. ----
  3337. false
  3338. query B
  3339. SELECT has_table_privilege('d2.s2.t5', 'SELECT')
  3340. ----
  3341. false
  3342. query B
  3343. SELECT has_table_privilege('d2.s2.t6', 'SELECT')
  3344. ----
  3345. false
  3346. ## Types
  3347. simple conn=mz_system,user=mz_system
  3348. REVOKE USAGE ON ALL TYPES FROM PUBLIC
  3349. ----
  3350. COMPLETE 0
  3351. query B
  3352. SELECT has_type_privilege('d1.s1.ty1', 'USAGE')
  3353. ----
  3354. false
  3355. query B
  3356. SELECT has_type_privilege('d1.s1.ty2', 'USAGE')
  3357. ----
  3358. false
  3359. query B
  3360. SELECT has_type_privilege('d2.s2.ty3', 'USAGE')
  3361. ----
  3362. false
  3363. query B
  3364. SELECT has_type_privilege('d2.s2.ty4', 'USAGE')
  3365. ----
  3366. false
  3367. simple conn=mz_system,user=mz_system
  3368. GRANT USAGE ON ALL TYPES TO materialize;
  3369. ----
  3370. COMPLETE 0
  3371. query B
  3372. SELECT has_type_privilege('d1.s1.ty1', 'USAGE')
  3373. ----
  3374. true
  3375. query B
  3376. SELECT has_type_privilege('d1.s1.ty2', 'USAGE')
  3377. ----
  3378. true
  3379. query B
  3380. SELECT has_type_privilege('d2.s2.ty3', 'USAGE')
  3381. ----
  3382. true
  3383. query B
  3384. SELECT has_type_privilege('d2.s2.ty4', 'USAGE')
  3385. ----
  3386. true
  3387. simple conn=mz_system,user=mz_system
  3388. REVOKE USAGE ON ALL TYPES FROM materialize;
  3389. ----
  3390. COMPLETE 0
  3391. query B
  3392. SELECT has_type_privilege('d1.s1.ty1', 'USAGE')
  3393. ----
  3394. false
  3395. query B
  3396. SELECT has_type_privilege('d1.s1.ty2', 'USAGE')
  3397. ----
  3398. false
  3399. query B
  3400. SELECT has_type_privilege('d2.s2.ty3', 'USAGE')
  3401. ----
  3402. false
  3403. query B
  3404. SELECT has_type_privilege('d2.s2.ty4', 'USAGE')
  3405. ----
  3406. false
  3407. simple conn=mz_system,user=mz_system
  3408. GRANT USAGE ON ALL TYPES TO PUBLIC
  3409. ----
  3410. COMPLETE 0
  3411. ## Secrets
  3412. query B
  3413. SELECT has_secret_privilege('se1', 'USAGE')
  3414. ----
  3415. false
  3416. query B
  3417. SELECT has_secret_privilege('se2', 'USAGE')
  3418. ----
  3419. false
  3420. query B
  3421. SELECT has_secret_privilege('se3', 'USAGE')
  3422. ----
  3423. false
  3424. query B
  3425. SELECT has_secret_privilege('se4', 'USAGE')
  3426. ----
  3427. false
  3428. simple conn=mz_system,user=mz_system
  3429. GRANT USAGE ON ALL SECRETS TO materialize;
  3430. ----
  3431. COMPLETE 0
  3432. query B
  3433. SELECT has_secret_privilege('se1', 'USAGE')
  3434. ----
  3435. true
  3436. query B
  3437. SELECT has_secret_privilege('se2', 'USAGE')
  3438. ----
  3439. true
  3440. query B
  3441. SELECT has_secret_privilege('se3', 'USAGE')
  3442. ----
  3443. true
  3444. query B
  3445. SELECT has_secret_privilege('se4', 'USAGE')
  3446. ----
  3447. true
  3448. simple conn=mz_system,user=mz_system
  3449. REVOKE USAGE ON ALL SECRETS FROM materialize;
  3450. ----
  3451. COMPLETE 0
  3452. query B
  3453. SELECT has_secret_privilege('se1', 'USAGE')
  3454. ----
  3455. false
  3456. query B
  3457. SELECT has_secret_privilege('se2', 'USAGE')
  3458. ----
  3459. false
  3460. query B
  3461. SELECT has_secret_privilege('se3', 'USAGE')
  3462. ----
  3463. false
  3464. query B
  3465. SELECT has_secret_privilege('se4', 'USAGE')
  3466. ----
  3467. false
  3468. ## Connections
  3469. query B
  3470. SELECT has_connection_privilege('conn1', 'USAGE')
  3471. ----
  3472. false
  3473. query B
  3474. SELECT has_connection_privilege('conn2', 'USAGE')
  3475. ----
  3476. false
  3477. query B
  3478. SELECT has_connection_privilege('conn3', 'USAGE')
  3479. ----
  3480. false
  3481. query B
  3482. SELECT has_connection_privilege('conn4', 'USAGE')
  3483. ----
  3484. false
  3485. simple conn=mz_system,user=mz_system
  3486. GRANT USAGE ON ALL CONNECTIONS TO materialize;
  3487. ----
  3488. COMPLETE 0
  3489. query B
  3490. SELECT has_connection_privilege('conn1', 'USAGE')
  3491. ----
  3492. true
  3493. query B
  3494. SELECT has_connection_privilege('conn2', 'USAGE')
  3495. ----
  3496. true
  3497. query B
  3498. SELECT has_connection_privilege('conn3', 'USAGE')
  3499. ----
  3500. true
  3501. query B
  3502. SELECT has_connection_privilege('conn4', 'USAGE')
  3503. ----
  3504. true
  3505. simple conn=mz_system,user=mz_system
  3506. REVOKE USAGE ON ALL CONNECTIONS FROM materialize;
  3507. ----
  3508. COMPLETE 0
  3509. query B
  3510. SELECT has_connection_privilege('conn1', 'USAGE')
  3511. ----
  3512. false
  3513. query B
  3514. SELECT has_connection_privilege('conn2', 'USAGE')
  3515. ----
  3516. false
  3517. query B
  3518. SELECT has_connection_privilege('conn3', 'USAGE')
  3519. ----
  3520. false
  3521. query B
  3522. SELECT has_connection_privilege('conn4', 'USAGE')
  3523. ----
  3524. false
  3525. ## Schemas
  3526. query B
  3527. SELECT has_schema_privilege('d1.s1', 'CREATE')
  3528. ----
  3529. false
  3530. query B
  3531. SELECT has_schema_privilege('d2.s2', 'CREATE')
  3532. ----
  3533. false
  3534. simple conn=mz_system,user=mz_system
  3535. GRANT CREATE ON ALL SCHEMAS TO materialize;
  3536. ----
  3537. COMPLETE 0
  3538. query B
  3539. SELECT has_schema_privilege('d1.s1', 'CREATE')
  3540. ----
  3541. true
  3542. query B
  3543. SELECT has_schema_privilege('d2.s2', 'CREATE')
  3544. ----
  3545. true
  3546. simple conn=mz_system,user=mz_system
  3547. REVOKE CREATE ON ALL SCHEMAS FROM materialize;
  3548. ----
  3549. COMPLETE 0
  3550. query B
  3551. SELECT has_schema_privilege('d1.s1', 'CREATE')
  3552. ----
  3553. false
  3554. query B
  3555. SELECT has_schema_privilege('d2.s2', 'CREATE')
  3556. ----
  3557. false
  3558. ## Databases
  3559. query B
  3560. SELECT has_database_privilege('d1', 'CREATE')
  3561. ----
  3562. false
  3563. query B
  3564. SELECT has_database_privilege('d2', 'CREATE')
  3565. ----
  3566. false
  3567. simple conn=mz_system,user=mz_system
  3568. GRANT CREATE ON ALL DATABASES TO materialize;
  3569. ----
  3570. COMPLETE 0
  3571. query B
  3572. SELECT has_database_privilege('d1', 'CREATE')
  3573. ----
  3574. true
  3575. query B
  3576. SELECT has_database_privilege('d2', 'CREATE')
  3577. ----
  3578. true
  3579. simple conn=mz_system,user=mz_system
  3580. REVOKE CREATE ON ALL DATABASES FROM materialize;
  3581. ----
  3582. COMPLETE 0
  3583. query B
  3584. SELECT has_database_privilege('d1', 'CREATE')
  3585. ----
  3586. false
  3587. query B
  3588. SELECT has_database_privilege('d2', 'CREATE')
  3589. ----
  3590. false
  3591. ## Clusters
  3592. simple conn=mz_system,user=mz_system
  3593. CREATE CLUSTER c1 REPLICAS (r1 (SIZE '1'));
  3594. ----
  3595. COMPLETE 0
  3596. simple conn=mz_system,user=mz_system
  3597. CREATE CLUSTER c2 REPLICAS (r1 (SIZE '1'));
  3598. ----
  3599. COMPLETE 0
  3600. query B
  3601. SELECT has_cluster_privilege('c1', 'CREATE')
  3602. ----
  3603. false
  3604. query B
  3605. SELECT has_cluster_privilege('c2', 'CREATE')
  3606. ----
  3607. false
  3608. simple conn=mz_system,user=mz_system
  3609. GRANT CREATE ON ALL CLUSTERS TO materialize;
  3610. ----
  3611. COMPLETE 0
  3612. query B
  3613. SELECT has_cluster_privilege('c1', 'CREATE')
  3614. ----
  3615. true
  3616. query B
  3617. SELECT has_cluster_privilege('c2', 'CREATE')
  3618. ----
  3619. true
  3620. simple conn=mz_system,user=mz_system
  3621. REVOKE CREATE ON ALL CLUSTERS FROM materialize;
  3622. ----
  3623. COMPLETE 0
  3624. query B
  3625. SELECT has_cluster_privilege('c1', 'CREATE')
  3626. ----
  3627. false
  3628. query B
  3629. SELECT has_cluster_privilege('c2', 'CREATE')
  3630. ----
  3631. false
  3632. # Reset server so we can get back to a clean state.
  3633. reset-server
  3634. # Test table_privileges and role_table_grants
  3635. statement ok
  3636. CREATE ROLE r1
  3637. simple conn=mz_system,user=mz_system
  3638. GRANT CREATE ON CLUSTER quickstart TO r1
  3639. ----
  3640. COMPLETE 0
  3641. simple conn=mz_system,user=mz_system
  3642. GRANT CREATE ON SCHEMA public TO r1
  3643. ----
  3644. COMPLETE 0
  3645. statement ok
  3646. CREATE ROLE r2
  3647. statement ok
  3648. CREATE ROLE r3
  3649. statement ok
  3650. GRANT r2 TO r1
  3651. statement ok
  3652. CREATE SOURCE s FROM LOAD GENERATOR COUNTER;
  3653. statement ok
  3654. GRANT SELECT ON s TO r2
  3655. statement ok
  3656. CREATE TABLE t ()
  3657. statement ok
  3658. GRANT INSERT ON t TO r1
  3659. statement ok
  3660. CREATE VIEW v AS SELECT 1
  3661. statement ok
  3662. GRANT SELECT ON v TO r2, r3
  3663. simple conn=r1,user=r1
  3664. CREATE MATERIALIZED VIEW mv AS SELECT 1
  3665. ----
  3666. COMPLETE 0
  3667. simple conn=r1,user=r1
  3668. GRANT SELECT ON mv TO r2
  3669. ----
  3670. COMPLETE 0
  3671. # For privileges granted to PUBLIC and mz_system, we don't want to enumerate every single row
  3672. # because there is a lot. Instead we just assert that there's a bunch of rows emitted. The number
  3673. # of rows was chosen because that was the value at the time the test was written.
  3674. ## table_privileges
  3675. simple conn=r1,user=r1,rowsort
  3676. SELECT * FROM information_schema.table_privileges WHERE grantee != 'PUBLIC'
  3677. ----
  3678. r1,r1,materialize,public,mv,SELECT,NO,YES
  3679. r1,r2,materialize,public,mv,SELECT,NO,YES
  3680. materialize,r1,materialize,public,t,INSERT,NO,NO
  3681. materialize,r2,materialize,public,s,SELECT,NO,YES
  3682. materialize,r2,materialize,public,v,SELECT,NO,YES
  3683. COMPLETE 5
  3684. simple conn=r1,user=r1
  3685. SELECT COUNT(*) >= 166 FROM information_schema.table_privileges WHERE grantee = 'PUBLIC'
  3686. ----
  3687. t
  3688. COMPLETE 1
  3689. simple conn=mz_system,user=mz_system,rowsort
  3690. SELECT * FROM information_schema.table_privileges WHERE grantee != 'PUBLIC' AND grantee != 'mz_system'
  3691. ----
  3692. r1,r1,materialize,public,mv,SELECT,NO,YES
  3693. r1,r2,materialize,public,mv,SELECT,NO,YES
  3694. materialize,r1,materialize,public,t,INSERT,NO,NO
  3695. materialize,r2,materialize,public,s,SELECT,NO,YES
  3696. materialize,r2,materialize,public,v,SELECT,NO,YES
  3697. materialize,r3,materialize,public,v,SELECT,NO,YES
  3698. materialize,materialize,materialize,public,t,DELETE,NO,NO
  3699. materialize,materialize,materialize,public,t,INSERT,NO,NO
  3700. materialize,materialize,materialize,public,t,UPDATE,NO,NO
  3701. materialize,materialize,materialize,public,s,SELECT,NO,YES
  3702. materialize,materialize,materialize,public,t,SELECT,NO,YES
  3703. materialize,materialize,materialize,public,v,SELECT,NO,YES
  3704. materialize,mz_support,materialize,public,s_progress,SELECT,NO,YES
  3705. materialize,materialize,materialize,public,s_progress,SELECT,NO,YES
  3706. mz_system,mz_monitor,materialize,mz_internal,mz_notices,SELECT,NO,YES
  3707. mz_system,mz_monitor,materialize,mz_internal,mz_sql_text,SELECT,NO,YES
  3708. mz_system,mz_monitor,materialize,mz_internal,mz_recent_sql_text,SELECT,NO,YES
  3709. mz_system,mz_monitor,materialize,mz_internal,mz_notices_redacted,SELECT,NO,YES
  3710. mz_system,mz_support,materialize,mz_internal,mz_notices_redacted,SELECT,NO,YES
  3711. mz_system,mz_monitor,materialize,mz_internal,mz_optimizer_notices,SELECT,NO,YES
  3712. mz_system,mz_monitor,materialize,mz_internal,mz_sql_text_redacted,SELECT,NO,YES
  3713. mz_system,mz_support,materialize,mz_internal,mz_sql_text_redacted,SELECT,NO,YES
  3714. mz_system,mz_monitor,materialize,mz_internal,mz_recent_activity_log,SELECT,NO,YES
  3715. mz_system,mz_analytics,materialize,mz_internal,mz_sql_text_redacted,SELECT,NO,YES
  3716. mz_system,mz_monitor,materialize,mz_internal,mz_activity_log_thinned,SELECT,NO,YES
  3717. mz_system,mz_monitor,materialize,mz_internal,mz_recent_sql_text_redacted,SELECT,NO,YES
  3718. mz_system,mz_support,materialize,mz_internal,mz_recent_sql_text_redacted,SELECT,NO,YES
  3719. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_notices_redacted,SELECT,NO,YES
  3720. mz_system,mz_monitor,materialize,mz_internal,mz_prepared_statement_history,SELECT,NO,YES
  3721. mz_system,mz_support,materialize,mz_internal,mz_prepared_statement_history,SELECT,NO,YES
  3722. mz_system,mz_analytics,materialize,mz_internal,mz_recent_sql_text_redacted,SELECT,NO,YES
  3723. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_sql_text_redacted,SELECT,NO,YES
  3724. mz_system,mz_monitor,materialize,mz_internal,mz_recent_activity_log_thinned,SELECT,NO,YES
  3725. mz_system,mz_monitor,materialize,mz_internal,mz_statement_execution_history,SELECT,NO,YES
  3726. mz_system,mz_monitor,materialize,mz_internal,mz_statement_lifecycle_history,SELECT,NO,YES
  3727. mz_system,mz_support,materialize,mz_internal,mz_statement_lifecycle_history,SELECT,NO,YES
  3728. mz_system,mz_monitor,materialize,mz_internal,mz_recent_activity_log_redacted,SELECT,NO,YES
  3729. mz_system,mz_support,materialize,mz_internal,mz_recent_activity_log_redacted,SELECT,NO,YES
  3730. mz_system,mz_analytics,materialize,mz_internal,mz_prepared_statement_history,SELECT,NO,YES
  3731. mz_system,mz_analytics,materialize,mz_internal,mz_statement_lifecycle_history,SELECT,NO,YES
  3732. mz_system,mz_analytics,materialize,mz_internal,mz_recent_activity_log_redacted,SELECT,NO,YES
  3733. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_recent_sql_text_redacted,SELECT,NO,YES
  3734. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_prepared_statement_history,SELECT,NO,YES
  3735. mz_system,mz_monitor,materialize,mz_internal,mz_statement_execution_history_redacted,SELECT,NO,YES
  3736. mz_system,mz_support,materialize,mz_internal,mz_statement_execution_history_redacted,SELECT,NO,YES
  3737. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_statement_lifecycle_history,SELECT,NO,YES
  3738. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_recent_activity_log_redacted,SELECT,NO,YES
  3739. mz_system,mz_analytics,materialize,mz_internal,mz_statement_execution_history_redacted,SELECT,NO,YES
  3740. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_statement_execution_history_redacted,SELECT,NO,YES
  3741. COMPLETE 49
  3742. simple conn=mz_system,user=mz_system
  3743. SELECT COUNT(*) >= 166 FROM information_schema.table_privileges WHERE grantee = 'PUBLIC'
  3744. ----
  3745. t
  3746. COMPLETE 1
  3747. simple conn=mz_system,user=mz_system
  3748. SELECT COUNT(*) >= 304 FROM information_schema.table_privileges WHERE grantee = 'mz_system'
  3749. ----
  3750. t
  3751. COMPLETE 1
  3752. ## role_table_grants
  3753. simple conn=r1,user=r1,rowsort
  3754. SELECT * FROM information_schema.role_table_grants
  3755. ----
  3756. r1,r1,materialize,public,mv,SELECT,NO,YES
  3757. r1,r2,materialize,public,mv,SELECT,NO,YES
  3758. materialize,r1,materialize,public,t,INSERT,NO,NO
  3759. materialize,r2,materialize,public,s,SELECT,NO,YES
  3760. materialize,r2,materialize,public,v,SELECT,NO,YES
  3761. COMPLETE 5
  3762. simple conn=mz_system,user=mz_system,rowsort
  3763. SELECT * FROM information_schema.role_table_grants WHERE grantee != 'PUBLIC' AND grantee != 'mz_system'
  3764. ----
  3765. r1,r1,materialize,public,mv,SELECT,NO,YES
  3766. r1,r2,materialize,public,mv,SELECT,NO,YES
  3767. materialize,r1,materialize,public,t,INSERT,NO,NO
  3768. materialize,r2,materialize,public,s,SELECT,NO,YES
  3769. materialize,r2,materialize,public,v,SELECT,NO,YES
  3770. materialize,r3,materialize,public,v,SELECT,NO,YES
  3771. materialize,materialize,materialize,public,t,DELETE,NO,NO
  3772. materialize,materialize,materialize,public,t,INSERT,NO,NO
  3773. materialize,materialize,materialize,public,t,UPDATE,NO,NO
  3774. materialize,materialize,materialize,public,s,SELECT,NO,YES
  3775. materialize,materialize,materialize,public,t,SELECT,NO,YES
  3776. materialize,materialize,materialize,public,v,SELECT,NO,YES
  3777. materialize,mz_support,materialize,public,s_progress,SELECT,NO,YES
  3778. materialize,materialize,materialize,public,s_progress,SELECT,NO,YES
  3779. mz_system,mz_monitor,materialize,mz_internal,mz_notices,SELECT,NO,YES
  3780. mz_system,mz_monitor,materialize,mz_internal,mz_sql_text,SELECT,NO,YES
  3781. mz_system,mz_monitor,materialize,mz_internal,mz_recent_sql_text,SELECT,NO,YES
  3782. mz_system,mz_monitor,materialize,mz_internal,mz_notices_redacted,SELECT,NO,YES
  3783. mz_system,mz_support,materialize,mz_internal,mz_notices_redacted,SELECT,NO,YES
  3784. mz_system,mz_monitor,materialize,mz_internal,mz_optimizer_notices,SELECT,NO,YES
  3785. mz_system,mz_monitor,materialize,mz_internal,mz_sql_text_redacted,SELECT,NO,YES
  3786. mz_system,mz_support,materialize,mz_internal,mz_sql_text_redacted,SELECT,NO,YES
  3787. mz_system,mz_monitor,materialize,mz_internal,mz_recent_activity_log,SELECT,NO,YES
  3788. mz_system,mz_analytics,materialize,mz_internal,mz_sql_text_redacted,SELECT,NO,YES
  3789. mz_system,mz_monitor,materialize,mz_internal,mz_activity_log_thinned,SELECT,NO,YES
  3790. mz_system,mz_monitor,materialize,mz_internal,mz_recent_sql_text_redacted,SELECT,NO,YES
  3791. mz_system,mz_support,materialize,mz_internal,mz_recent_sql_text_redacted,SELECT,NO,YES
  3792. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_notices_redacted,SELECT,NO,YES
  3793. mz_system,mz_monitor,materialize,mz_internal,mz_prepared_statement_history,SELECT,NO,YES
  3794. mz_system,mz_support,materialize,mz_internal,mz_prepared_statement_history,SELECT,NO,YES
  3795. mz_system,mz_analytics,materialize,mz_internal,mz_recent_sql_text_redacted,SELECT,NO,YES
  3796. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_sql_text_redacted,SELECT,NO,YES
  3797. mz_system,mz_monitor,materialize,mz_internal,mz_recent_activity_log_thinned,SELECT,NO,YES
  3798. mz_system,mz_monitor,materialize,mz_internal,mz_statement_execution_history,SELECT,NO,YES
  3799. mz_system,mz_monitor,materialize,mz_internal,mz_statement_lifecycle_history,SELECT,NO,YES
  3800. mz_system,mz_support,materialize,mz_internal,mz_statement_lifecycle_history,SELECT,NO,YES
  3801. mz_system,mz_monitor,materialize,mz_internal,mz_recent_activity_log_redacted,SELECT,NO,YES
  3802. mz_system,mz_support,materialize,mz_internal,mz_recent_activity_log_redacted,SELECT,NO,YES
  3803. mz_system,mz_analytics,materialize,mz_internal,mz_prepared_statement_history,SELECT,NO,YES
  3804. mz_system,mz_analytics,materialize,mz_internal,mz_statement_lifecycle_history,SELECT,NO,YES
  3805. mz_system,mz_analytics,materialize,mz_internal,mz_recent_activity_log_redacted,SELECT,NO,YES
  3806. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_recent_sql_text_redacted,SELECT,NO,YES
  3807. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_prepared_statement_history,SELECT,NO,YES
  3808. mz_system,mz_monitor,materialize,mz_internal,mz_statement_execution_history_redacted,SELECT,NO,YES
  3809. mz_system,mz_support,materialize,mz_internal,mz_statement_execution_history_redacted,SELECT,NO,YES
  3810. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_statement_lifecycle_history,SELECT,NO,YES
  3811. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_recent_activity_log_redacted,SELECT,NO,YES
  3812. mz_system,mz_analytics,materialize,mz_internal,mz_statement_execution_history_redacted,SELECT,NO,YES
  3813. mz_system,mz_monitor_redacted,materialize,mz_internal,mz_statement_execution_history_redacted,SELECT,NO,YES
  3814. COMPLETE 49
  3815. simple conn=mz_system,user=mz_system
  3816. SELECT COUNT(*) >= 166 FROM information_schema.role_table_grants WHERE grantee = 'PUBLIC'
  3817. ----
  3818. t
  3819. COMPLETE 1
  3820. simple conn=mz_system,user=mz_system
  3821. SELECT COUNT(*) >= 304 FROM information_schema.role_table_grants WHERE grantee = 'mz_system'
  3822. ----
  3823. t
  3824. COMPLETE 1
  3825. # Check that predefined roles can't be altered.
  3826. simple conn=mz_system,user=mz_system
  3827. GRANT SELECT ON t TO mz_monitor
  3828. ----
  3829. db error: ERROR: role name "mz_monitor" is reserved
  3830. DETAIL: The role prefixes "mz_" and "pg_" are reserved for system roles.