public static Set<GrantInfo> listTablePrivileges(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { List<GrantInfo> grants = metadata.listTablePrivileges(session, prefix); Set<SchemaTableName> allowedTables = accessControl.filterTables( session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), grants.stream().map(GrantInfo::getSchemaTableName).collect(toImmutableSet())); return grants.stream() .filter(grantInfo -> allowedTables.contains(grantInfo.getSchemaTableName())) .collect(toImmutableSet()); }
@Override public List<QualifiedObjectName> listViews(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); Set<QualifiedObjectName> views = new LinkedHashSet<>(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); ConnectorSession connectorSession = session.toConnectorSession(connectorId); metadata.listViews(connectorSession, prefix.getSchemaName()).stream() .map(convertFromSchemaTableName(prefix.getCatalogName())) .filter(prefix::matches) .forEach(views::add); } } return ImmutableList.copyOf(views); }
@Override public List<QualifiedObjectName> listTables(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); Set<QualifiedObjectName> tables = new LinkedHashSet<>(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); ConnectorSession connectorSession = session.toConnectorSession(connectorId); metadata.listTables(connectorSession, prefix.getSchemaName()).stream() .map(convertFromSchemaTableName(prefix.getCatalogName())) .filter(prefix::matches) .forEach(tables::add); } } return ImmutableList.copyOf(tables); }
public static Map<SchemaTableName, List<ColumnMetadata>> listTableColumns(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { Map<SchemaTableName, List<ColumnMetadata>> tableColumns = metadata.listTableColumns(session, prefix).entrySet().stream() .collect(toImmutableMap(entry -> entry.getKey().asSchemaTableName(), Entry::getValue)); Set<SchemaTableName> allowedTables = accessControl.filterTables( session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), tableColumns.keySet()); ImmutableMap.Builder<SchemaTableName, List<ColumnMetadata>> result = ImmutableMap.builder(); for (Entry<SchemaTableName, List<ColumnMetadata>> entry : tableColumns.entrySet()) { if (allowedTables.contains(entry.getKey())) { result.put(entry); } } return result.build(); } }
public static Set<GrantInfo> listTablePrivileges(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { List<GrantInfo> grants = metadata.listTablePrivileges(session, prefix); Set<SchemaTableName> allowedTables = accessControl.filterTables( session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), grants.stream().map(GrantInfo::getSchemaTableName).collect(toImmutableSet())); return grants.stream() .filter(grantInfo -> allowedTables.contains(grantInfo.getSchemaTableName())) .collect(toImmutableSet()); }
public static Set<SchemaTableName> listTables(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { Set<SchemaTableName> tableNames = metadata.listTables(session, prefix).stream() .map(QualifiedObjectName::asSchemaTableName) .collect(toImmutableSet()); return accessControl.filterTables(session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), tableNames); }
public static Set<SchemaTableName> listViews(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { Set<SchemaTableName> tableNames = metadata.listViews(session, prefix).stream() .map(QualifiedObjectName::asSchemaTableName) .collect(toImmutableSet()); return accessControl.filterTables(session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), tableNames); }
public static Set<SchemaTableName> listTables(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { Set<SchemaTableName> tableNames = metadata.listTables(session, prefix).stream() .map(QualifiedObjectName::asSchemaTableName) .collect(toImmutableSet()); return accessControl.filterTables(session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), tableNames); }
public static Set<SchemaTableName> listViews(Session session, Metadata metadata, AccessControl accessControl, QualifiedTablePrefix prefix) { Set<SchemaTableName> tableNames = metadata.listViews(session, prefix).stream() .map(QualifiedObjectName::asSchemaTableName) .collect(toImmutableSet()); return accessControl.filterTables(session.getRequiredTransactionId(), session.getIdentity(), prefix.getCatalogName(), tableNames); }
@Override public List<GrantInfo> listTablePrivileges(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); SchemaTablePrefix tablePrefix = prefix.asSchemaTablePrefix(); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); ImmutableSet.Builder<GrantInfo> grantInfos = ImmutableSet.builder(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); ConnectorSession connectorSession = session.toConnectorSession(catalogMetadata.getConnectorId()); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); grantInfos.addAll(metadata.listTablePrivileges(connectorSession, tablePrefix)); } } return ImmutableList.copyOf(grantInfos.build()); }
@Override public List<GrantInfo> listTablePrivileges(Session session, QualifiedTablePrefix prefix) { requireNonNull(prefix, "prefix is null"); SchemaTablePrefix tablePrefix = prefix.asSchemaTablePrefix(); Optional<CatalogMetadata> catalog = getOptionalCatalogMetadata(session, prefix.getCatalogName()); ImmutableSet.Builder<GrantInfo> grantInfos = ImmutableSet.builder(); if (catalog.isPresent()) { CatalogMetadata catalogMetadata = catalog.get(); ConnectorSession connectorSession = session.toConnectorSession(catalogMetadata.getConnectorId()); for (ConnectorId connectorId : catalogMetadata.listConnectorIds()) { ConnectorMetadata metadata = catalogMetadata.getMetadataFor(connectorId); grantInfos.addAll(metadata.listTablePrivileges(connectorSession, tablePrefix)); } } return ImmutableList.copyOf(grantInfos.build()); }
@Test public void testCatalog() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog"); assertEquals("catalog", tableName.getCatalogName()); assertFalse(tableName.hasSchemaName()); assertFalse(tableName.hasTableName()); }
@Test public void testCatalog() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog"); assertEquals("catalog", tableName.getCatalogName()); assertFalse(tableName.hasSchemaName()); assertFalse(tableName.hasTableName()); }
@Test public void testTable() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog", "schema", "table"); assertEquals("catalog", tableName.getCatalogName()); assertTrue(tableName.hasSchemaName()); assertEquals("schema", tableName.getSchemaName().get()); assertTrue(tableName.hasTableName()); assertEquals("table", tableName.getTableName().get()); }
@Test public void testSchema() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog", "schema"); assertEquals("catalog", tableName.getCatalogName()); assertTrue(tableName.hasSchemaName()); assertEquals("schema", tableName.getSchemaName().get()); assertFalse(tableName.hasTableName()); }
@Test public void testTable() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog", "schema", "table"); assertEquals("catalog", tableName.getCatalogName()); assertTrue(tableName.hasSchemaName()); assertEquals("schema", tableName.getSchemaName().get()); assertTrue(tableName.hasTableName()); assertEquals("table", tableName.getTableName().get()); }
@Test public void testSchema() { QualifiedTablePrefix tableName = new QualifiedTablePrefix("catalog", "schema"); assertEquals("catalog", tableName.getCatalogName()); assertTrue(tableName.hasSchemaName()); assertEquals("schema", tableName.getSchemaName().get()); assertFalse(tableName.hasTableName()); }
private InternalTable buildTables(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_TABLES)); for (QualifiedTablePrefix prefix : prefixes) { Set<SchemaTableName> tables = listTables(session, metadata, accessControl, prefix); Set<SchemaTableName> views = listViews(session, metadata, accessControl, prefix); for (SchemaTableName name : union(tables, views)) { // if table and view names overlap, the view wins String type = views.contains(name) ? "VIEW" : "BASE TABLE"; table.add( prefix.getCatalogName(), name.getSchemaName(), name.getTableName(), type); } } return table.build(); }
private InternalTable buildTablePrivileges(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_TABLE_PRIVILEGES)); for (QualifiedTablePrefix prefix : prefixes) { List<GrantInfo> grants = ImmutableList.copyOf(listTablePrivileges(session, metadata, accessControl, prefix)); for (GrantInfo grant : grants) { table.add( grant.getGrantor().map(PrestoPrincipal::getName).orElse(null), grant.getGrantor().map(principal -> principal.getType().toString()).orElse(null), grant.getGrantee().getName(), grant.getGrantee().getType().toString(), prefix.getCatalogName(), grant.getSchemaTableName().getSchemaName(), grant.getSchemaTableName().getTableName(), grant.getPrivilegeInfo().getPrivilege().name(), grant.getPrivilegeInfo().isGrantOption() ? "YES" : "NO", grant.getWithHierarchy().map(withHierarchy -> withHierarchy ? "YES" : "NO").orElse(null)); } } return table.build(); }
private InternalTable buildTablePrivileges(Session session, Set<QualifiedTablePrefix> prefixes) { InternalTable.Builder table = InternalTable.builder(informationSchemaTableColumns(TABLE_TABLE_PRIVILEGES)); for (QualifiedTablePrefix prefix : prefixes) { List<GrantInfo> grants = ImmutableList.copyOf(listTablePrivileges(session, metadata, accessControl, prefix)); for (GrantInfo grant : grants) { table.add( grant.getGrantor().map(PrestoPrincipal::getName).orElse(null), grant.getGrantor().map(principal -> principal.getType().toString()).orElse(null), grant.getGrantee().getName(), grant.getGrantee().getType().toString(), prefix.getCatalogName(), grant.getSchemaTableName().getSchemaName(), grant.getSchemaTableName().getTableName(), grant.getPrivilegeInfo().getPrivilege().name(), grant.getPrivilegeInfo().isGrantOption() ? "YES" : "NO", grant.getWithHierarchy().map(withHierarchy -> withHierarchy ? "YES" : "NO").orElse(null)); } } return table.build(); }