One can create several roles at once:
MariaDB [test]> create role r1, r2;
|
Query OK, 0 rows affected (0.01 sec)
|
|
One can grant multiple privileges to multiple users at once:
MariaDB [test]> grant SELECT,INSERT on db.* to foo@localhost, bar@localhost;
|
Query OK, 0 rows affected (0.00 sec)
|
|
But one cannot grant multiple roles at once:
MariaDB [test]> grant r1, r2 to foo@localhost;
|
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' r2 to foo@localhost' at line 1
|
SQL standard seems to think that it should work.
{"report":{"fcp":930.3999999761581,"ttfb":187.30000001192093,"pageVisibility":"visible","entityId":31620,"key":"jira.project.issue.view-issue","isInitial":true,"threshold":1000,"elementTimings":{},"userDeviceMemory":8,"userDeviceProcessors":64,"apdex":0.5,"journeyId":"c28b4ce0-953b-44dc-856d-887a1f0cf33f","navigationType":0,"readyForUser":1011.8000000119209,"redirectCount":0,"resourceLoadedEnd":1041.6000000238419,"resourceLoadedStart":194.19999998807907,"resourceTiming":[{"duration":185.80000001192093,"initiatorType":"link","name":"https://jira.mariadb.org/s/2c21342762a6a02add1c328bed317ffd-CDN/lu2bu7/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/css/_super/batch.css","startTime":194.19999998807907,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":194.19999998807907,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":380,"responseStart":0,"secureConnectionStart":0},{"duration":185.69999998807907,"initiatorType":"link","name":"https://jira.mariadb.org/s/7ebd35e77e471bc30ff0eba799ebc151-CDN/lu2bu7/820016/12ta74/8679b4946efa1a0bb029a3a22206fb5d/_/download/contextbatch/css/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":194.5,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":194.5,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":380.19999998807907,"responseStart":0,"secureConnectionStart":0},{"duration":194.69999998807907,"initiatorType":"script","name":"https://jira.mariadb.org/s/fbf975c0cce4b1abf04784eeae9ba1f4-CDN/lu2bu7/820016/12ta74/0a8bac35585be7fc6c9cc5a0464cd4cf/_/download/contextbatch/js/_super/batch.js?locale=en","startTime":194.69999998807907,"connectEnd":194.69999998807907,"connectStart":194.69999998807907,"domainLookupEnd":194.69999998807907,"domainLookupStart":194.69999998807907,"fetchStart":194.69999998807907,"redirectEnd":0,"redirectStart":0,"requestStart":194.69999998807907,"responseEnd":389.39999997615814,"responseStart":389.39999997615814,"secureConnectionStart":194.69999998807907},{"duration":230.19999998807907,"initiatorType":"script","name":"https://jira.mariadb.org/s/099b33461394b8015fc36c0a4b96e19f-CDN/lu2bu7/820016/12ta74/8679b4946efa1a0bb029a3a22206fb5d/_/download/contextbatch/js/jira.browse.project,project.issue.navigator,jira.view.issue,jira.general,jira.global,atl.general,-_super/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&locale=en&slack-enabled=true","startTime":194.80000001192093,"connectEnd":194.80000001192093,"connectStart":194.80000001192093,"domainLookupEnd":194.80000001192093,"domainLookupStart":194.80000001192093,"fetchStart":194.80000001192093,"redirectEnd":0,"redirectStart":0,"requestStart":194.80000001192093,"responseEnd":425,"responseStart":425,"secureConnectionStart":194.80000001192093},{"duration":234.4000000357628,"initiatorType":"script","name":"https://jira.mariadb.org/s/94c15bff32baef80f4096a08aceae8bc-CDN/lu2bu7/820016/12ta74/c92c0caa9a024ae85b0ebdbed7fb4bd7/_/download/contextbatch/js/atl.global,-_super/batch.js?locale=en","startTime":195.19999998807907,"connectEnd":195.19999998807907,"connectStart":195.19999998807907,"domainLookupEnd":195.19999998807907,"domainLookupStart":195.19999998807907,"fetchStart":195.19999998807907,"redirectEnd":0,"redirectStart":0,"requestStart":195.19999998807907,"responseEnd":429.60000002384186,"responseStart":429.60000002384186,"secureConnectionStart":195.19999998807907},{"duration":234.80000001192093,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bu7/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-en/jira.webresources:calendar-en.js","startTime":195.30000001192093,"connectEnd":195.30000001192093,"connectStart":195.30000001192093,"domainLookupEnd":195.30000001192093,"domainLookupStart":195.30000001192093,"fetchStart":195.30000001192093,"redirectEnd":0,"redirectStart":0,"requestStart":195.30000001192093,"responseEnd":430.10000002384186,"responseStart":430.10000002384186,"secureConnectionStart":195.30000001192093},{"duration":235,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bu7/820016/12ta74/1.0/_/download/batch/jira.webresources:calendar-localisation-moment/jira.webresources:calendar-localisation-moment.js","startTime":195.5,"connectEnd":195.5,"connectStart":195.5,"domainLookupEnd":195.5,"domainLookupStart":195.5,"fetchStart":195.5,"redirectEnd":0,"redirectStart":0,"requestStart":195.5,"responseEnd":430.5,"responseStart":430.5,"secureConnectionStart":195.5},{"duration":340.60000002384186,"initiatorType":"link","name":"https://jira.mariadb.org/s/b04b06a02d1959df322d9cded3aeecc1-CDN/lu2bu7/820016/12ta74/a2ff6aa845ffc9a1d22fe23d9ee791fc/_/download/contextbatch/css/jira.global.look-and-feel,-_super/batch.css","startTime":195.69999998807907,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":195.69999998807907,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":536.3000000119209,"responseStart":0,"secureConnectionStart":0},{"duration":235.19999998807907,"initiatorType":"script","name":"https://jira.mariadb.org/rest/api/1.0/shortcuts/820016/47140b6e0a9bc2e4913da06536125810/shortcuts.js?context=issuenavigation&context=issueaction","startTime":195.80000001192093,"connectEnd":195.80000001192093,"connectStart":195.80000001192093,"domainLookupEnd":195.80000001192093,"domainLookupStart":195.80000001192093,"fetchStart":195.80000001192093,"redirectEnd":0,"redirectStart":0,"requestStart":195.80000001192093,"responseEnd":431,"responseStart":431,"secureConnectionStart":195.80000001192093},{"duration":340.39999997615814,"initiatorType":"link","name":"https://jira.mariadb.org/s/3ac36323ba5e4eb0af2aa7ac7211b4bb-CDN/lu2bu7/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/css/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.css?jira.create.linked.issue=true","startTime":196,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":196,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":536.3999999761581,"responseStart":0,"secureConnectionStart":0},{"duration":235.5,"initiatorType":"script","name":"https://jira.mariadb.org/s/3339d87fa2538a859872f2df449bf8d0-CDN/lu2bu7/820016/12ta74/d176f0986478cc64f24226b3d20c140d/_/download/contextbatch/js/com.atlassian.jira.projects.sidebar.init,-_super,-project.issue.navigator,-jira.view.issue/batch.js?jira.create.linked.issue=true&locale=en","startTime":196.10000002384186,"connectEnd":196.10000002384186,"connectStart":196.10000002384186,"domainLookupEnd":196.10000002384186,"domainLookupStart":196.10000002384186,"fetchStart":196.10000002384186,"redirectEnd":0,"redirectStart":0,"requestStart":196.10000002384186,"responseEnd":431.60000002384186,"responseStart":431.60000002384186,"secureConnectionStart":196.10000002384186},{"duration":433.69999998807907,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bu7/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-js/jira.webresources:bigpipe-js.js","startTime":197.19999998807907,"connectEnd":197.19999998807907,"connectStart":197.19999998807907,"domainLookupEnd":197.19999998807907,"domainLookupStart":197.19999998807907,"fetchStart":197.19999998807907,"redirectEnd":0,"redirectStart":0,"requestStart":197.19999998807907,"responseEnd":630.8999999761581,"responseStart":630.8999999761581,"secureConnectionStart":197.19999998807907},{"duration":772.5999999642372,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bu7/820016/12ta74/1.0/_/download/batch/jira.webresources:bigpipe-init/jira.webresources:bigpipe-init.js","startTime":197.30000001192093,"connectEnd":197.30000001192093,"connectStart":197.30000001192093,"domainLookupEnd":197.30000001192093,"domainLookupStart":197.30000001192093,"fetchStart":197.30000001192093,"redirectEnd":0,"redirectStart":0,"requestStart":197.30000001192093,"responseEnd":969.8999999761581,"responseStart":969.8999999761581,"secureConnectionStart":197.30000001192093},{"duration":82.70000004768372,"initiatorType":"xmlhttprequest","name":"https://jira.mariadb.org/rest/webResources/1.0/resources","startTime":548.8999999761581,"connectEnd":548.8999999761581,"connectStart":548.8999999761581,"domainLookupEnd":548.8999999761581,"domainLookupStart":548.8999999761581,"fetchStart":548.8999999761581,"redirectEnd":0,"redirectStart":0,"requestStart":548.8999999761581,"responseEnd":631.6000000238419,"responseStart":631.6000000238419,"secureConnectionStart":548.8999999761581},{"duration":216.80000001192093,"initiatorType":"link","name":"https://jira.mariadb.org/s/d5715adaadd168a9002b108b2b039b50-CDN/lu2bu7/820016/12ta74/be4b45e9cec53099498fa61c8b7acba4/_/download/contextbatch/css/jira.project.sidebar,-_super,-project.issue.navigator,-jira.general,-jira.browse.project,-jira.view.issue,-jira.global,-atl.general,-com.atlassian.jira.projects.sidebar.init/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":824.6999999880791,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":824.6999999880791,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1041.5,"responseStart":0,"secureConnectionStart":0},{"duration":216.20000004768372,"initiatorType":"link","name":"https://jira.mariadb.org/s/50bc9be5bfead1a25e72c1a9338c94f6-CDN/lu2bu7/820016/12ta74/e108c7645258ccb43280ed3404e3e949/_/download/contextbatch/css/com.atlassian.jira.plugins.jira-development-integration-plugin:0,-_super,-jira.view.issue,-jira.global,-jira.general,-jira.browse.project,-project.issue.navigator,-atl.general/batch.css?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":825.3999999761581,"connectEnd":0,"connectStart":0,"domainLookupEnd":0,"domainLookupStart":0,"fetchStart":825.3999999761581,"redirectEnd":0,"redirectStart":0,"requestStart":0,"responseEnd":1041.6000000238419,"responseStart":0,"secureConnectionStart":0},{"duration":305.69999998807907,"initiatorType":"script","name":"https://jira.mariadb.org/s/d41d8cd98f00b204e9800998ecf8427e-CDN/lu2bu7/820016/12ta74/e65b778d185daf5aee24936755b43da6/_/download/contextbatch/js/browser-metrics-plugin.contrib,-_super,-project.issue.navigator,-jira.view.issue,-atl.general/batch.js?agile_global_admin_condition=true&jag=true&jira.create.linked.issue=true&slack-enabled=true","startTime":826.6999999880791,"connectEnd":826.6999999880791,"connectStart":826.6999999880791,"domainLookupEnd":826.6999999880791,"domainLookupStart":826.6999999880791,"fetchStart":826.6999999880791,"redirectEnd":0,"redirectStart":0,"requestStart":826.6999999880791,"responseEnd":1132.3999999761581,"responseStart":1132.3999999761581,"secureConnectionStart":826.6999999880791}],"fetchStart":0,"domainLookupStart":0,"domainLookupEnd":0,"connectStart":0,"connectEnd":0,"requestStart":31,"responseStart":187,"responseEnd":188,"domLoading":191,"domInteractive":1069,"domContentLoadedEventStart":1069,"domContentLoadedEventEnd":1112,"domComplete":1347,"loadEventStart":1347,"loadEventEnd":1348,"userAgent":"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)","marks":[{"name":"bigPipe.sidebar-id.start","time":1054.3999999761581},{"name":"bigPipe.sidebar-id.end","time":1055.199999988079},{"name":"bigPipe.activity-panel-pipe-id.start","time":1055.3999999761581},{"name":"bigPipe.activity-panel-pipe-id.end","time":1057.300000011921},{"name":"activityTabFullyLoaded","time":1135.3999999761581}],"measures":[],"correlationId":"6517ce407a1ba0","effectiveType":"4g","downlink":10,"rtt":0,"serverDuration":99,"dbReadsTimeInMs":13,"dbConnsTimeInMs":21,"applicationHash":"9d11dbea5f4be3d4cc21f03a88dd11d8c8687422","experiments":[]}}
I've started working on this and I'm somewhat stuck at the moment with the following grammar extension issue:
I've redefined GRANT grant_role TO .... to
GRANT role_list TO ...
This leads to 7 reduce/reduce conflicts, because:
We define
object_privilege_list:
object_privilege
| object_privilege_list ',' object_privilege
role_list:
grant_role
| role_list ',' grant_role
Within these two rules we allow for keywords such as EVENT, EXECUTE, FILE, PROCESS, RELOAD, SHUTDOWN.
Technically, the two grant statements should be unambigous:
GRANT EVENT, EXECUTE ON .....
GRANT EVENT, EXECUTE TO .....
These 2 statements are different. The first one refers to object privileges, while the other one refers to role grants. Bison finds these to be ambiguous because it needs to make a decision on which rule (object_privilege_list or role_list) to use, when it encounters the ',' (comma) token.
The decision would be clear, if the parser would look for the TO or ON keyword, but the lookahead token only looks forward one step.
Possible solutions:
Do not allow EVENT, EXECUTE, FILE, etc. as role names. (It will break people's existing databases on update).
Redefine both rules to account for this overlap. The downside to this approach is that it requires a pretty big amount of changes.