apache/cassandra · error · UnauthorizedException
Only superusers are allowed to alter access from CIDR…
Error message
Only superusers are allowed to alter access from CIDR groups.
What it means
Cassandra throws this UnauthorizedException when a non-superuser role attempts ALTER ROLE while specifying CIDR-group access (cidrPermissions). Only superusers may grant or revoke access from CIDR groups, as enforced in AlterRoleStatement.authorize.
Solutions
- Log in as (or grant superuser to, via an existing superuser) a superuser role before altering CIDR group access
- Split the statement: perform non-CIDR attribute changes with the current role and delegate only CIDR changes to a superuser
- Enable and configure CIDR authorization in cassandra.yaml and verify the executing role's superuser status with LIST ROLES
Example fix
// before
ALTER ROLE service_role WITH CIDR GROUPS = {'office_net'};
// after
-- run as superuser, e.g. cassandra or another super role
ALTER ROLE service_role WITH CIDR GROUPS = {'office_net'}; Defensive patterns
Strategy: try-catch
Validate before calling
// before executing
boolean isSuper = session.execute("LIST ROLES").all().stream()
.filter(r -> r.getString("role").equals(currentUser))
.anyMatch(AuthenticatedUser::isSuper); // or check via RoleResource
if (!isSuper && cql.contains("CIDR GROUPS")) throw new IllegalStateException("superuser required for CIDR changes"); Try / catch
try { session.execute(alterCql); }
catch (com.datastax.driver.core.exceptions.UnauthorizedException e) {
if (e.getMessage().contains("CIDR groups")) { /* escalate to superuser session and retry */ }
} Prevention
- Check LIST ROLES to confirm superuser status before altering CIDR groups
- Keep CIDR group changes in a superuser-only operational runbook
When it happens
Trigger: Executing ALTER ROLE ... WITH CIDR GROUPS ... (cidrPermissions != null) while logged in as a role whose isSuper() is false, even if that role has ALTER permission on the target role resource.
Common situations: A security admin role without superuser status tries to tighten or widen CIDR network restrictions for a role; role hierarchy assumptions (admin role assumed to be super) after migration from older Cassandra versions where CIDR permissions did not exist.
Understand the failure class
Background: Permission denied / not authorized / 403 Forbidden: access-control rejections when the caller lacks the required role, grant, or ownership — this error's family across 18 libraries.
Related errors
- Access denied
- Access Denied
- Granting permissions on system keyspaces is strictly…
- keyspace is not user-modifiable.
- Only superusers can drop a role with superuser status
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/081e1719143eb680.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/cql3/statements/AlterRoleStatement.java:113
}
public void authorize(ClientState state) throws UnauthorizedException
{
AuthenticatedUser user = state.getUser();
boolean isSuper = user.isSuper();
if (opts.getSuperuser().isPresent() && user.getRoles().contains(role))
throw new UnauthorizedException("You aren't allowed to alter your own superuser " +
"status or that of a role granted to you");
if (opts.getSuperuser().isPresent() && !isSuper)
throw new UnauthorizedException("Only superusers are allowed to alter superuser status");
if (dcPermissions != null && !isSuper)
throw new UnauthorizedException("Only superusers are allowed to alter access to datacenters.");
if (cidrPermissions != null && !isSuper)
throw new UnauthorizedException("Only superusers are allowed to alter access from CIDR groups.");
// superusers can do whatever else they like
if (isSuper)
return;
// a role may only modify the subset of its own attributes as determined by IRoleManager#alterableOptions
if (user.getName().equals(role.getRoleName()))
{
for (Option option : opts.getOptions().keySet())
{
if (!DatabaseDescriptor.getRoleManager().alterableOptions().contains(option))
throw new UnauthorizedException(String.format("You aren't allowed to alter %s", option));
}
}
else
{
// if not attempting to alter another role, ensure we have ALTER permissions on it
super.checkPermission(state, Permission.ALTER, role);View on GitHub (pinned to 88fd0f6a0e)