@Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } GrantInfo grantInfo = (GrantInfo) o; return Objects.equals(privilegeInfo, grantInfo.getPrivilegeInfo()) && Objects.equals(grantee, grantInfo.getIdentity()) && Objects.equals(schemaTableName, grantInfo.getSchemaTableName()) && Objects.equals(grantor, grantInfo.getGrantor()) && Objects.equals(withHierarchy, grantInfo.getWithHierarchy()); } }
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<GrantInfo> listTablePrivileges(ConnectorSession session, SchemaTablePrefix schemaTablePrefix) { ImmutableList.Builder<GrantInfo> grantInfos = ImmutableList.builder(); for (SchemaTableName tableName : listTables(session, schemaTablePrefix)) { Set<PrivilegeInfo> privileges = metastore.getTablePrivileges(session.getUser(), tableName.getSchemaName(), tableName.getTableName()).stream() .map(HivePrivilegeInfo::toPrivilegeInfo) .flatMap(Set::stream) .collect(toImmutableSet()); grantInfos.add( new GrantInfo( privileges, session.getIdentity(), tableName, Optional.empty(), // Can't access grantor Optional.empty())); // Can't access withHierarchy } return grantInfos.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) { for (PrivilegeInfo privilegeInfo : grant.getPrivilegeInfo()) { table.add( grant.getGrantor().orElse(null), grant.getIdentity().getUser(), prefix.getCatalogName(), grant.getSchemaTableName().getSchemaName(), grant.getSchemaTableName().getTableName(), privilegeInfo.getPrivilege().name(), privilegeInfo.isGrantOption(), grant.getWithHierarchy().orElse(null)); } } } return table.build(); }
@Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } GrantInfo grantInfo = (GrantInfo) o; return Objects.equals(privilegeInfo, grantInfo.getPrivilegeInfo()) && Objects.equals(grantee, grantInfo.getIdentity()) && Objects.equals(schemaTableName, grantInfo.getSchemaTableName()) && Objects.equals(grantor, grantInfo.getGrantor()) && Objects.equals(withHierarchy, grantInfo.getWithHierarchy()); } }