Merge branch 'cassandra-4.1' into cassandra-5.0

* cassandra-4.1:
  allow grant permission on virtual keyspaces
This commit is contained in:
Francisco Guerrero 2025-04-18 09:16:35 -07:00
commit b83fef6efa
3 changed files with 18 additions and 1 deletions

View File

@ -1,4 +1,5 @@
5.0.5
* Grant permission on keyspaces system_views and system_virtual_schema not possible (CASSANDRA-20171)
* Avoid purging deletions in RowFilter when reconciliation is required (CASSANDRA-20541)
* Fixed multiple single-node SAI query bugs relating to static columns (CASSANDRA-20338)
* Upgrade com.datastax.cassandra:cassandra-driver-core:3.11.5 to org.apache.cassandra:cassandra-driver-core:3.12.1 (CASSANDRA-17231)

View File

@ -24,6 +24,7 @@ import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
import org.apache.cassandra.schema.Schema;
import org.apache.cassandra.schema.SchemaConstants;
/**
* The primary type of resource in Cassandra.
@ -249,7 +250,8 @@ public class DataResource implements IResource
return true;
case KEYSPACE:
case ALL_TABLES:
return Schema.instance.getKeyspaces().contains(keyspace);
return SchemaConstants.isVirtualSystemKeyspace(keyspace) ||
Schema.instance.getKeyspaces().contains(keyspace);
case TABLE:
return Schema.instance.getTableMetadata(keyspace, table) != null;
}

View File

@ -36,6 +36,7 @@ import org.apache.cassandra.db.SystemKeyspace;
import org.apache.cassandra.schema.Schema;
import org.apache.cassandra.schema.SchemaConstants;
import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.service.CassandraDaemon;
import org.apache.cassandra.transport.ProtocolVersion;
import static java.lang.String.format;
@ -60,6 +61,7 @@ public class GrantAndRevokeTest extends CQLTester
CQLTester.setUpClass();
requireAuthentication();
requireNetwork();
CassandraDaemon.getInstanceForTesting().setupVirtualKeyspaces();
}
@After
@ -473,6 +475,18 @@ public class GrantAndRevokeTest extends CQLTester
executeNet(ProtocolVersion.CURRENT, "INSERT INTO system.peers_v2(peer, peer_port, data_center) VALUES ('127.0.100.100', 7012, 'invalid_dc')");
}
@Test
public void testGrantOnVirtualKeyspaces() throws Throwable
{
useSuperUser();
executeNet(String.format("CREATE ROLE %s WITH LOGIN = TRUE AND password='%s'", user, pass));
executeNet(ProtocolVersion.CURRENT, format("GRANT SELECT PERMISSION ON KEYSPACE system_virtual_schema TO %s", user));
executeNet(ProtocolVersion.CURRENT, format("GRANT SELECT PERMISSION ON KEYSPACE system_views TO %s", user));
executeNet(ProtocolVersion.CURRENT, format("REVOKE SELECT PERMISSION ON KEYSPACE system_virtual_schema FROM %s", user));
executeNet(ProtocolVersion.CURRENT, format("REVOKE SELECT PERMISSION ON KEYSPACE system_views FROM %s", user));
}
private void maybeReadSystemTables(boolean superuser) throws Throwable
{
if (superuser)