Don’t know why is_superuser was not set to true for acquired superusers. Now if 
we change it, may break existing tools/scripts/understanding of customers, so 
do we want to update current understanding of is_superuser column or introduce 
a new column or option instead?


> On Feb 29, 2024, at 11:30 AM, Štefan Miklošovič <stefan.mikloso...@gmail.com> 
> wrote:
> 
> Why don't we just update the is_superuser column of a role when it 
> effectively achieves a superuser status when it is granted some superuser 
> role? Similarly, we would remove its superuser status when there are no 
> superuser roles granted to it anymore.
> 
> I think that at least for the second case (when a superuser role is revoked 
> and there is none anymore), there would need to be some transaction because 
> as it checks if there are any superuser roles or not to set it to false, 
> somebody else might grant that superuser role to it again so we might end up 
> with having is_superuser set to false while it might still have a superuser 
> role granted.
> 
> I am not sure if this is achievable and I am sorry if this was already 
> answered / rejected elsewhere.
> 
> On Thu, Feb 29, 2024 at 11:33 AM <shailajako...@icloud.com 
> <mailto:shailajako...@icloud.com>> wrote:
>> Hi Maxwell,
>> 
>> Currently system_auth.roles table doesn’t have acquired superuser info 
>> available in columns to filter on it. Below is the system_auth.roles table 
>> for the example I have listed in the previous email. If you notice, though 
>> role1 and role11 acquired superuser status through grants, is_superuser 
>> column is False for these roles and acquired superuser status is not 
>> apparent directly from the columns of this table. member_of column shows 
>> immediate parent/grant of a given role. But these grants can result in a 
>> huge tree of roles hierarchy and there may be a role anywhere up in the 
>> hierarchy which is a superuser.
>> 
>> cassandra@cqlsh> select * from system_auth.roles;
>> 
>>  role      | can_login | is_superuser | member_of  | salted_hash
>> -----------+-----------+--------------+------------+--------------------------------------------------------------
>>      role2 |     False |        False |       null |                         
>>                                 null
>>     role11 |     False |        False |  {'role1'} |                         
>>                                 null
>>     super1 |     False |         True |       null |                         
>>                                 null
>>      role1 |     False |        False | {'super1'} |                         
>>                                 null
>> 
>> 
>> Thanks,
>> Shailaja
>> 
>> 
>>> On Feb 29, 2024, at 2:11 AM, guo Maxwell <cclive1...@gmail.com 
>>> <mailto:cclive1...@gmail.com>> wrote:
>>> 
>>> Hi , 
>>>  1. can this cql "SELECT role from system_auth.roles where is_superuser = 
>>> True ALLOW FILTERING ;"  meet your needs if the user to execute the cql 
>>> have the right to do so  ?
>>>  2. I think may be we can also add the ability to filter on list role/user 
>>> grammar, for example : list user where super = True;
>>> 
>>> 
>>> 
>>> Shailaja Koppu <s_ko...@apple.com <mailto:s_ko...@apple.com>> 于2024年2月28日周三 
>>> 20:40写道:
>>>> 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
>>>> 
>>>> 
>>>> 
>> 

Reply via email to