Hi Team, Currently LIST ROLES command doesn’t indicate if a role has superuser privilege, if acquired through a grant in roles hierarchy (LIST ROLES has super column true only if the role is created with SUPERUSER=true). For example, in the below example, super1 is a superuser, role1 acquired superuser status through grant of super1 and role11 acquired superuser status through grant of role1. LIST ROLES output has super column true only for super1.
cassandra@cqlsh> create role super1 WITH SUPERUSER = true; cassandra@cqlsh> create role role1; cassandra@cqlsh> create role role11; cassandra@cqlsh> create role role2; cassandra@cqlsh> grant super1 to role1; cassandra@cqlsh> grant role1 to role11; cassandra@cqlsh> list roles; role | super | login | options | datacenters -----------+-------+-------+---------+------------- role1 | False | False | {} | ALL role11 | False | False | {} | ALL role2 | False | False | {} | ALL super1 | True | False | {} | ALL One way to check has a role acquired superuser status is by running LIST ROLES of <rolename> and looking for at least one row with super column true. This works fine to check superuser status of a given role. cassandra@cqlsh> list roles of role11; role | super | login | options | datacenters --------+-------+-------+---------+------------- role1 | False | False | {} | ALL role11 | False | False | {} | ALL super1 | True | False | {} | ALL But if we need to get list of all roles having superuser status (acquired through grant as well), there is no easy way to retrieve this from C*. This can be a requirement for an external service interacting with C* and performing their own checks (for example, Sidecar). So I am proposing a new CQL command LIST SUPERUSERS, which lists all roles having superuser status (acquired as well). We will ensure that the user running this command has DESCRIBE permission on root roles resource, i.e, to run this command user must be either a superuser or granted DESCRIBE permission on ALL ROLES. Here is the Jira <https://issues.apache.org/jira/browse/CASSANDRA-19417> and sample output for the above example. cassandra@cqlsh> list superusers; role ----------- role1 role11 super1 Alternatives thought of so far, - LIST ROLES SUPERUSERSONLY - LIST ROLES superuseronly=true - LIST USERS superuseronly=true command : I have a question here, is LIST USERS command deprecated? I see this link saying that https://docs.datastax.com/en/cql-oss/3.3/cql/cql_reference/cqlListUsers.html. if LIST USERS and LISR ROLES commands are same, why don’t we just pick one so we don’t have to maintain two different commands ? - LIST ROLES command default i.e, without NORECURSIVE clause : to print super column true for acquired superusers as well, but this may break existing tools/scripts of customers as we are changing the default behavior I prefer LIST SUPERUSERS command because - This command looks neat and simple and we don’t have to worry about handling/breaking other options/columns supported by these existing commands. For example we don’t have to worry about handling/breaking OF clause of LIST ROLES command. And any new options we add to these commands in the future, don’t have to worry about handling/breaking of SUPERUSERS option. Please let me know your thoughts on this. Thanks, Shailaja