clickhouse: load views for users with limited permissions #1076

This commit is contained in:
SPRINX0\prochazka
2025-04-02 09:48:35 +02:00
parent 0bd7d23114
commit 9a9b18a3ef
4 changed files with 16 additions and 2 deletions

View File

@@ -354,6 +354,7 @@ export class DatabaseAnalyser {
logger.error(extractErrorLogData(err, { template }), 'Error running analyser query'); logger.error(extractErrorLogData(err, { template }), 'Error running analyser query');
return { return {
rows: [], rows: [],
isError: true,
}; };
} }
} }

View File

@@ -34,7 +34,10 @@ class Analyser extends DatabaseAnalyser {
this.feedback({ analysingMessage: 'Loading columns' }); this.feedback({ analysingMessage: 'Loading columns' });
const columns = await this.analyserQuery('columns', ['tables', 'views']); const columns = await this.analyserQuery('columns', ['tables', 'views']);
this.feedback({ analysingMessage: 'Loading views' }); this.feedback({ analysingMessage: 'Loading views' });
const views = await this.analyserQuery('views', ['views']); let views = await this.analyserQuery('views', ['views']);
if (views?.isError) {
views = await this.analyserQuery('viewsNoDefinition', ['views']);
}
const res = { const res = {
tables: tables.rows.map((table) => ({ tables: tables.rows.map((table) => ({
@@ -64,7 +67,7 @@ class Analyser extends DatabaseAnalyser {
...col, ...col,
...extractDataType(col.dataType), ...extractDataType(col.dataType),
})), })),
createSql: `CREATE VIEW "${view.pureName}"\nAS\n${view.viewDefinition}`, createSql: view.viewDefinition ? `CREATE VIEW "${view.pureName}"\nAS\n${view.viewDefinition}` : '',
})), })),
}; };
this.feedback({ analysingMessage: null }); this.feedback({ analysingMessage: null });

View File

@@ -1,11 +1,13 @@
const columns = require('./columns'); const columns = require('./columns');
const tables = require('./tables'); const tables = require('./tables');
const views = require('./views'); const views = require('./views');
const viewsNoDefinition = require('./viewsNoDefinition');
const tableModifications = require('./tableModifications'); const tableModifications = require('./tableModifications');
module.exports = { module.exports = {
columns, columns,
tables, tables,
views, views,
viewsNoDefinition,
tableModifications, tableModifications,
}; };

View File

@@ -0,0 +1,8 @@
module.exports = `
select
tables.name as "pureName",
tables.uuid as "objectId",
tables.metadata_modification_time as "contentHash"
from system.tables
where tables.database='#DATABASE#' and tables.uuid =OBJECT_ID_CONDITION and tables.engine = 'View'
`;