Admin: Permissions: Data Permissions : Limit Access to MySQL Tables / Views Not working

Just started using Metabase yesterday and today I’m in love.

However, I’m having problem limiting a group’s access to a specific set of MySQL (AWS RDS) tables, even though the same operation works for the sample (H2) database tables.

When I go to change the red X from “no access” to “limit access” it just hangs. Here are a few things that might help diagnose the problem:

The URL changes to /admin/permissions/databases/2/schemas/null/tables
It looks like the null in the second-to-last (null) path parameter is what’s causing the problem.

when I inspect the /database?include=tables request in the browser’s developer console, I see that each of the tables has schema:null in the JSON response for the MySQL database. In the sample H2 database, it’s “PUBLIC”

{description: “VIEW”, entity_type: “entity/GenericTable”, schema: null, show_in_getting_started: false…}

I can’t see any way to set the schema to not be null for that database / set of tables.

The following errors are in the browser console:

Uncaught TypeError: Cannot read property ‘tables’ of null
at app-main.bundle.js?f24695780b695904f509:5
at vendor.bundle.js?f24695780b695904f509:1
at vendor.bundle.js?f24695780b695904f509:1
at vendor.bundle.js?f24695780b695904f509:1
at vendor.bundle.js?f24695780b695904f509:1
at Function.mapToProps (app-main.bundle.js?f24695780b695904f509:5)
at i (vendor.bundle.js?f24695780b695904f509:1)
at Function.i.mapToProps (vendor.bundle.js?f24695780b695904f509:1)
at i (vendor.bundle.js?f24695780b695904f509:1)
at vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ app-main.bundle.js?f24695780b695904f509:5
(anonymous) @ vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ app-main.bundle.js?f24695780b695904f509:5
i @ vendor.bundle.js?f24695780b695904f509:1
i.mapToProps @ vendor.bundle.js?f24695780b695904f509:1
i @ vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ vendor.bundle.js?f24695780b695904f509:1
run @ vendor.bundle.js?f24695780b695904f509:1
i.initSelector @ vendor.bundle.js?f24695780b695904f509:1
Connect(PermissionsEditor) @ vendor.bundle.js?f24695780b695904f509:1
_constructComponentWithoutOwner @ vendor.bundle.js?f24695780b695904f509:1
_constructComponent @ vendor.bundle.js?f24695780b695904f509:1
mountComponent @ vendor.bundle.js?f24695780b695904f509:1
mountComponent @ vendor.bundle.js?f24695780b695904f509:1
updateChildren @ vendor.bundle.js?f24695780b695904f509:1
_reconcilerUpdateChildren @ vendor.bundle.js?f24695780b695904f509:1
_updateChildren @ vendor.bundle.js?f24695780b695904f509:1
updateChildren @ vendor.bundle.js?f24695780b695904f509:1
_updateDOMChildren @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
updateChildren @ vendor.bundle.js?f24695780b695904f509:1
_reconcilerUpdateChildren @ vendor.bundle.js?f24695780b695904f509:1
_updateChildren @ vendor.bundle.js?f24695780b695904f509:1
updateChildren @ vendor.bundle.js?f24695780b695904f509:1
_updateDOMChildren @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
performUpdateIfNecessary @ vendor.bundle.js?f24695780b695904f509:1
performUpdateIfNecessary @ vendor.bundle.js?f24695780b695904f509:1
b @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
M @ vendor.bundle.js?f24695780b695904f509:1
closeAll @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
batchedUpdates @ vendor.bundle.js?f24695780b695904f509:1
batchedUpdates @ vendor.bundle.js?f24695780b695904f509:1
dispatchEvent @ vendor.bundle.js?f24695780b695904f509:1

vendor.bundle.js?f24695780b695904f509:1 Uncaught (in promise) TypeError: Cannot read property ‘getHostNode’ of null
at Object.getHostNode (vendor.bundle.js?f24695780b695904f509:1)
at c.getHostNode (vendor.bundle.js?f24695780b695904f509:1)
at Object.getHostNode (vendor.bundle.js?f24695780b695904f509:1)
at Object.updateChildren (vendor.bundle.js?f24695780b695904f509:1)
at Z._reconcilerUpdateChildren (vendor.bundle.js?f24695780b695904f509:1)
at Z._updateChildren (vendor.bundle.js?f24695780b695904f509:1)
at Z.updateChildren (vendor.bundle.js?f24695780b695904f509:1)
at Z._updateDOMChildren (vendor.bundle.js?f24695780b695904f509:1)
at Z.updateComponent (vendor.bundle.js?f24695780b695904f509:1)
at Z.receiveComponent (vendor.bundle.js?f24695780b695904f509:1)
getHostNode @ vendor.bundle.js?f24695780b695904f509:1
getHostNode @ vendor.bundle.js?f24695780b695904f509:1
getHostNode @ vendor.bundle.js?f24695780b695904f509:1
updateChildren @ vendor.bundle.js?f24695780b695904f509:1
_reconcilerUpdateChildren @ vendor.bundle.js?f24695780b695904f509:1
_updateChildren @ vendor.bundle.js?f24695780b695904f509:1
updateChildren @ vendor.bundle.js?f24695780b695904f509:1
_updateDOMChildren @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
receiveComponent @ vendor.bundle.js?f24695780b695904f509:1
_updateRenderedComponent @ vendor.bundle.js?f24695780b695904f509:1
_performComponentUpdate @ vendor.bundle.js?f24695780b695904f509:1
updateComponent @ vendor.bundle.js?f24695780b695904f509:1
performUpdateIfNecessary @ vendor.bundle.js?f24695780b695904f509:1
performUpdateIfNecessary @ vendor.bundle.js?f24695780b695904f509:1
b @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
M @ vendor.bundle.js?f24695780b695904f509:1
close @ vendor.bundle.js?f24695780b695904f509:1
closeAll @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
M @ vendor.bundle.js?f24695780b695904f509:1
closeAll @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
batchedUpdates @ vendor.bundle.js?f24695780b695904f509:1
e @ vendor.bundle.js?f24695780b695904f509:1
a @ vendor.bundle.js?f24695780b695904f509:1
enqueueSetState @ vendor.bundle.js?f24695780b695904f509:1
s.setState @ vendor.bundle.js?f24695780b695904f509:1
i.onStateChange @ vendor.bundle.js?f24695780b695904f509:1
notify @ vendor.bundle.js?f24695780b695904f509:1
e.notifyNestedSubs @ vendor.bundle.js?f24695780b695904f509:1
i.onStateChange @ vendor.bundle.js?f24695780b695904f509:1
g @ vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ app-main.bundle.js?f24695780b695904f509:5
dispatch @ vendor.bundle.js?f24695780b695904f509:1
(anonymous) @ app-main.bundle.js?f24695780b695904f509:5
u @ vendor.bundle.js?f24695780b695904f509:1
g._invoke @ vendor.bundle.js?f24695780b695904f509:1
e. @ vendor.bundle.js?f24695780b695904f509:1
r @ app-main.bundle.js?f24695780b695904f509:5
(anonymous) @ app-main.bundle.js?f24695780b695904f509:5
Promise.then (async)
r @ app-main.bundle.js?f24695780b695904f509:5
(anonymous) @ app-main.bundle.js?f24695780b695904f509:5
(anonymous) @ app-main.bundle.js?f24695780b695904f509:5
a.type @ app-main.bundle.js?f24695780b695904f509:5
(anonymous) @ app-main.bundle.js?f24695780b695904f509:5
(anonymous) @ vendor.bundle.js?f24695780b695904f509:1
a @ app-main.bundle.js?f24695780b695904f509:5
onChange @ app-main.bundle.js?f24695780b695904f509:5
onClick @ app-main.bundle.js?f24695780b695904f509:5
i @ vendor.bundle.js?f24695780b695904f509:1
s @ vendor.bundle.js?f24695780b695904f509:1
executeDispatchesInOrder @ vendor.bundle.js?f24695780b695904f509:1
d @ vendor.bundle.js?f24695780b695904f509:1
f @ vendor.bundle.js?f24695780b695904f509:1
e.exports @ vendor.bundle.js?f24695780b695904f509:1
processEventQueue @ vendor.bundle.js?f24695780b695904f509:1
handleTopLevel @ vendor.bundle.js?f24695780b695904f509:1
f @ vendor.bundle.js?f24695780b695904f509:1
perform @ vendor.bundle.js?f24695780b695904f509:1
batchedUpdates @ vendor.bundle.js?f24695780b695904f509:1
batchedUpdates @ vendor.bundle.js?f24695780b695904f509:1
dispatchEvent @ vendor.bundle.js?f24695780b695904f509:1

troubleshooting details from console:

{
“browser-info”: {
“language”: “en-US”,
“platform”: “Linux x86_64”,
“userAgent”: “Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36”,
“vendor”: “Google Inc.”
},
“system-info”: {
“file.encoding”: “UTF-8”,
“java.runtime.name”: “OpenJDK Runtime Environment”,
“java.runtime.version”: “1.8.0_242-8u242-b08-0ubuntu3~18.04-b08”,
“java.vendor”: “Private Build”,
“java.vendor.url”: “http://java.oracle.com/”,
“java.version”: “1.8.0_242”,
“java.vm.name”: “OpenJDK 64-Bit Server VM”,
“java.vm.version”: “25.242-b08”,
“os.name”: “Linux”,
“os.version”: “4.15.0-1065-aws”,
“user.language”: “en”,
“user.timezone”: “Etc/UTC”
},
“metabase-info”: {
“databases”: [
“mysql”,
“h2”
],
“hosting-env”: “unknown”,
“application-database”: “h2”,
“application-database-details”: {
“database”: {
“name”: “H2”,
“version”: “1.4.197 (2018-03-18)”
},
“jdbc-driver”: {
“name”: “H2 JDBC Driver”,
“version”: “1.4.197 (2018-03-18)”
}
},
“run-mode”: “prod”,
“version”: {
“tag”: “v0.35.3”,
“date”: “2020-04-21”,
“branch”: “release-0.35.x”,
“hash”: “1d424cb”
},
“settings”: {
“report-timezone”: “US/Pacific”
}
}
}

Hi @MartinCron
Click the “View tables” on the left instead. There’s an issue open:
https://github.com/metabase/metabase/issues/12372 - upvote by clicking :+1: on the first post

Thanks! That’s exactly it. Will attempt the workaround.

I upvoted the open issue.

Unfortunately, The workaround isn’t working. If I expand the “View Tables” on the left, I do see the tables and the page doesn’t lock up, but I can’t actually make the changes.

For a single table, I click on the red “X” and select “Grant unrestricted access” I get a confirmation dialog with “Change access to this database to limited?” and “Are you sure you want to do this?” I click “change” and the “save changes” button in the top right, but the changes are not persisted.

No console errors, just fails silently.

1 Like

@MartinCron Thanks for the update - I’ve updated the issue and changed priority. There’s going to be a 0.35.4, which fixes this, but I cannot give a timeline.
Seems like the only workaround currently is to either manually edit your metadata (not recommended!), or downgrade to 0.34.3 to make your permission changes and then upgrade again (remember to backup first!)

The downgrade to 0.34.3 worked, thanks. I assume that if I watch the releases on github I’ll be notified when 0.35.4 is out?

@MartinCron Correct. But I would recommend watching the issues you want to track - done in the sidebar of an issue under Notification.