-
Notifications
You must be signed in to change notification settings - Fork 6.9k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Query cache is not isolated across different databases #64136
Comments
Why this example is so over complicated ? It reproduces with any query https://fiddle.clickhouse.com/7ae271e9-e866-4187-a6d6-e84e89a8910e |
@rschu1ze result is incorrect with the cache enabled https://fiddle.clickhouse.com/b79e57c1-e687-4985-9489-17eb1ff20a94 In some sense this is a CVE, because an unauthorized user can peek a data. |
Even more minimal repro: https://fiddle.clickhouse.com/6661f07d-1372-4088-a0ea-9ff0d20090f3 Yes, the user can peek data from tables/columns without having SELECT privileges (assigned directly or by a role). The source of the problem is that the query cache is based on comparing query ASTs. The same identifier in two ASTs can mean different things ... The right fix would be to compare the representation with resolved identifiers produced by the Analyzer. It would be a bigger rewrite, however. A quickfix would be to introduce a privilege for running queries with the query cache. This basically recognizes that the query cache usage can be a security risk (this would also be documented) and must be explicitly enabled by assigning the corresponding privilege. Such a privilege would be similar in spirit to the INTROSPECTION privilege. Not sure what is the best route here, let me discuss internally. EDIT: After discussion, we'll go with the quickfix (#64199, will also be backported), and for |
Tested on 24.3.2.23 (official build).
Describe the unexpected behaviour
Query cache is used for the same tables created in different databases when no database alias is used.
How to reproduce
Prepare debug environment and data:
Now test query cache:
Expected behavior
I expect the query cache to be aware that I'm selecting the data from another table (same table name in another database).
The text was updated successfully, but these errors were encountered: