Thank you everybody for the participation. TLDR from this thread:
- rate limiting is out of scope, indeed valuable but should be treated more robustly outside this CEP - CREATE GENERATED ROLE WITH password = '123' as well as CREATE ROLE abc WITH GENERATED PASSWORD will for sure work - an operator will be able to specify prefix and / or suffix to generated role name in case of default UUIDRoleNameGenerator. It will be also possible to specify length of randomly generated role name string - It will be possible to return custom response in CQL in case integrators will need to represent the response differently I think enough time passed for everybody to participate in the discussion so I would just move on and start the voting thread soon. Regards On Wed, Sep 10, 2025 at 11:57 PM Yifan Cai <yc25c...@gmail.com> wrote: > Thanks for confirming. > > The tabular output is copy-pasted from the CEP and only for illustration. > There is no need to print the information that is already known. > > - Yifan > > On Wed, Sep 10, 2025 at 2:40 PM Štefan Miklošovič <smikloso...@apache.org> > wrote: > >> But yes, the statements as you put it will work, of course. >> >> On Wed, Sep 10, 2025 at 11:33 PM Yifan Cai <yc25c...@gmail.com> wrote: >> >>> CEP looks good and the feature is useful for automation. >>> >>> Just a quick question, will the following two DCL statements work? >>> >>> CREATE ROLE my_role WITH GENERATED PASSWORD; >>> generated_password | role_name >>> --------------------+---------------------------------- >>> 0zdHJ,]dW[s6 | my_role >>> >>> CREATE GENERATED ROLE WITH PASSWORD = '42'; >>> generated_password | role_name >>> --------------------+---------------------------------- >>> 42 | cbaeea62551d41dbb26a349428ccd741 >>> >>> - Yifan >>> >>> On Wed, Sep 10, 2025 at 11:21 AM Venkata Harikrishna Nukala < >>> n.v.harikrishna.apa...@gmail.com> wrote: >>> >>>> Thanks for the CEP! I think it is a good idea. Wondering if user >>>> defined functions can be leveraged here. A user can define a function that >>>> returns a role name. If create role statement can call this function, then >>>> get the role name and create a role with it. This way operators can create >>>> and pick up any role name generation function to get the role names. These >>>> functions can accept multiple arguments if required (based on complexity of >>>> requirement/business logic). Probably we can leverage UDFs for passwords as >>>> well. >>>> >>>> On Wed, Sep 10, 2025 at 6:04 AM Jaydeep Chovatia < >>>> chovatia.jayd...@gmail.com> wrote: >>>> >>>>> >What I suggest instead is to add default methods to IRoleManager, >>>>> telling how the response in CQL should look like when a password / >>>>> username >>>>> is generated. The default implementation would return a response >>>>> containing >>>>> generated password / user name if any and it would return null if this >>>>> feature is not used. >>>>> Yeah, default methods would do. By default, it would show response on >>>>> console, and one can configure it to show *null *(if not used) or >>>>> implement their own version and return vault path, etc. >>>>> >>>>> Jaydeep >>>>> >>>>> On Tue, Sep 9, 2025 at 9:18 AM Štefan Miklošovič < >>>>> smikloso...@apache.org> wrote: >>>>> >>>>>> Hi Jaydeep, >>>>>> >>>>>> I was trying to model what you have described and I do not think it >>>>>> is a good approach. First of all, if you have a secret sink, you have to >>>>>> have a secret source. If you save something to e.g. vault, then you also >>>>>> need to read it back so you can provide the credential / password upon >>>>>> login attempts to compare with hashed password from cqlsh. >>>>>> >>>>>> But this whole concept of sinks / sources is already done. Sink is >>>>>> our CassandraRoleManager / IRoleManager which has e.g. "createRole" >>>>>> method >>>>>> (among others). Source is PasswordAuthenticator / IAuthenticator, which >>>>>> reads a password from a table. >>>>>> >>>>>> So what you want to do, like custom sinks, is doable when you >>>>>> implement your own IRoleManager and IAuthenticator where implementations >>>>>> would talk to your target environment. It is completely transparent from >>>>>> Cassandra's point of view. You can then delegate this already as this >>>>>> functionality is already pluggable. >>>>>> >>>>>> Your concern about showing credentials in CQL response is something >>>>>> which is happening on a different level. >>>>>> >>>>>> What I suggest instead is to add default methods to IRoleManager, >>>>>> telling how the response in CQL should look like when a password / >>>>>> username >>>>>> is generated. The default implementation would return a response >>>>>> containing >>>>>> generated password / user name if any and it would return null if this >>>>>> feature is not used. >>>>>> >>>>>> Then, in your custom IRoleManager talking to a vault, you would >>>>>> create the role however you please and you would return from that method >>>>>> what you want CQL response to a user to look like. >>>>>> >>>>>> Basically, the abstraction of sinks is unnecessary in this situation. >>>>>> >>>>>> Regards >>>>>> >>>>>> On Tue, Sep 9, 2025 at 3:36 AM Jaydeep Chovatia < >>>>>> chovatia.jayd...@gmail.com> wrote: >>>>>> >>>>>>> First off, I want to say that the current scope of CEP-55 is a >>>>>>> really good start. The proposal to support generated role/user names >>>>>>> (building on CEP-24) addresses real security and operational pain >>>>>>> points, >>>>>>> and I think this addition will be very useful to operators at scale. >>>>>>> >>>>>>> One thought I had: do you think we could extend this CEP a little >>>>>>> further to improve secret handling? >>>>>>> >>>>>>> At the moment, generated passwords are returned directly to the >>>>>>> client/console. While this works, it also means operators must take care >>>>>>> not to leak these values into logs, CI/CD pipelines, or audit trails. In >>>>>>> security-sensitive deployments, this is often a blocker. >>>>>>> >>>>>>> *Suggestion:* >>>>>>> Introduce a concept of a *“Secret Sink”* for generated credentials: >>>>>>> >>>>>>> - >>>>>>> >>>>>>> *Default sink:* Cassandra’s existing system_auth tables (current >>>>>>> behavior, fully backward compatible). >>>>>>> - >>>>>>> >>>>>>> *Pluggable extension:* Operators can configure a SecretSink >>>>>>> implementation >>>>>>> that writes secrets directly into a vault of their choice (e.g., >>>>>>> HashiCorp >>>>>>> Vault, AWS Secrets Manager, GCP Secret Manager). >>>>>>> - >>>>>>> >>>>>>> *Client view:* Instead of receiving the plaintext password, the >>>>>>> client would receive a reference/handle (e.g., >>>>>>> vault://kv/cass/prod/roles/abc123) that applications can resolve >>>>>>> via their secret manager. >>>>>>> >>>>>>> This way, operators who are fine with today’s behavior can keep it, >>>>>>> while those with stricter requirements can enable secret redaction and >>>>>>> externalized storage. >>>>>>> >>>>>>> Do folks think it makes sense to consider this as part of CEP-55, or >>>>>>> perhaps as a follow-up CEP once the base functionality is in place? >>>>>>> >>>>>>> Jaydeep >>>>>>> >>>>>>> On Mon, Sep 8, 2025 at 2:28 PM Francisco Guerrero < >>>>>>> fran...@apache.org> wrote: >>>>>>> >>>>>>>> Hi Stefan, >>>>>>>> >>>>>>>> Thanks for bringing this CEP for discussion. I think it's a good >>>>>>>> feature, but >>>>>>>> I would like to have the ability to define some suffix or prefix to >>>>>>>> the name of >>>>>>>> the role. Thinking from an operator point of view, this would help >>>>>>>> to visually >>>>>>>> identify the type of role we are generating. Let's say you have a >>>>>>>> role that is >>>>>>>> allowed to read and write data to the cluster, then I'd like to >>>>>>>> either prefix or >>>>>>>> suffix the role name with _read_write. And if I have a read only >>>>>>>> user, I'd like >>>>>>>> to do the same with the _read_only suffix. I haven't really thought >>>>>>>> through >>>>>>>> about what the grammar would look like if we were to support >>>>>>>> prefixes/suffixes, but this is one idea: >>>>>>>> >>>>>>>> cassandra@cqlsh> CREATE GENERATED ROLE WITH SUFFIX _read_only; >>>>>>>> >>>>>>>> generated_role_name >>>>>>>> ---------------------------------------- >>>>>>>> b97ef7fcfd_read_only >>>>>>>> >>>>>>>> I think this makes the role name less cryptic and more operator >>>>>>>> friendly. >>>>>>>> >>>>>>>> Let me know your thoughts on this. >>>>>>>> >>>>>>>> Best, >>>>>>>> - Francisco >>>>>>>> >>>>>>>> On 2025/09/08 20:14:26 Dinesh Joshi wrote: >>>>>>>> > This is a great feature to have Stefan. Like you already pointed, >>>>>>>> it pairs >>>>>>>> > really well with CEP-24. I am only concerned about scripts going >>>>>>>> crazy and >>>>>>>> > generating way too many accounts. Do you have any plans for >>>>>>>> throttling or >>>>>>>> > placing a limit on the number of auto-generated accounts that >>>>>>>> could be >>>>>>>> > created by an admin? >>>>>>>> > >>>>>>>> > It would be nice if these accounts could be TTL'd after a set >>>>>>>> period of >>>>>>>> > time of inactivity. I'm thinking from a testing standpoint where >>>>>>>> you want >>>>>>>> > to create a fresh account and not worry about cleaning up because >>>>>>>> Cassandra >>>>>>>> > could TTL it automatically. I recognize this will expand the >>>>>>>> scope of your >>>>>>>> > CEP and I'll be happy to work on contributing to it. >>>>>>>> Alternatively, if you >>>>>>>> > think it might be better to have this as a separate CEP that's ok >>>>>>>> too. >>>>>>>> > >>>>>>>> > Thanks, >>>>>>>> > >>>>>>>> > Dinesh >>>>>>>> > >>>>>>>> > On Mon, Sep 8, 2025 at 6:35 AM Štefan Miklošovič < >>>>>>>> smikloso...@apache.org> >>>>>>>> > wrote: >>>>>>>> > >>>>>>>> > > Hi list, >>>>>>>> > > >>>>>>>> > > I would like to propose CEP-55. It is about the ability to >>>>>>>> create users / >>>>>>>> > > roles without specifying names ourselves. >>>>>>>> > > >>>>>>>> > > This is a very handy feature for systems where we want to have >>>>>>>> a way for >>>>>>>> > > the system to generate user names / role names for us by some >>>>>>>> predefined >>>>>>>> > > manner. If there is a company deploying clusters in some >>>>>>>> automated manner / >>>>>>>> > > on demand, the creation of user names / roles is left to an >>>>>>>> operator to >>>>>>>> > > figure out. This task can be delegated to cluster and user name >>>>>>>> / role name >>>>>>>> > > would be returned as part of CQL response. >>>>>>>> > > >>>>>>>> > > This feature might be also used e.g. for demo / evaluation >>>>>>>> purposes, for >>>>>>>> > > creation of technical users where role names do not matter, or >>>>>>>> for >>>>>>>> > > increased security where role names would not be leaked in logs. >>>>>>>> > > >>>>>>>> > > This is quite a powerful technique, especially with CEP-24 / >>>>>>>> password >>>>>>>> > > generation, where an operator just has to execute: >>>>>>>> > > >>>>>>>> > > CREATE GENERATED USER WITH GENERATED PASSWORD; >>>>>>>> > > >>>>>>>> > > and both (valid) name and password would be returned. >>>>>>>> > > >>>>>>>> > > (1) >>>>>>>> > > >>>>>>>> https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-55+Generated+role+names >>>>>>>> > > >>>>>>>> > >>>>>>>> >>>>>>>