Hi Ryan and Austin, Thanks for your suggestions. I've updated the FLIP with the following additional info -
1. *table.secret-store.kind* key to register the SecretStore in a yaml file 2. *updateSecret* method in WritableSecretStore interface Thanks, Mayank On Thu, Jul 17, 2025 at 5:42 PM Austin Cawley-Edwards < austin.caw...@gmail.com> wrote: > Hey all, > > Thanks for the nice flip all! I’m just reading through – had one question > on the ALTER CONNECTION implementation flow. Would it make sense for the > WritableSecretStore to expose a method for updating a secret by ID, so it > can be done atomically? Else, would we need to call delete and create > again, potentially introducing concurrent resolution errors? > > Best, > Austin > > On Thu, Jul 17, 2025 at 13:07 Ryan van Huuksloot > <ryan.vanhuuksl...@shopify.com.invalid> wrote: > > > Hi Mayank, > > > > Thanks for updating the FLIP. Overall it looks good to me. > > > > One question I had related to how someone could choose the SecretStore > they > > want to use if they use something like the SQL Gateway as the entrypoint > on > > top of a remote Session cluster. I don't see an explicit way to set the > > SecretStore in the FLIP. > > I assume we'll do it similar to the CatalogStore but I wanted to call > this > > out. > > > > table.catalog-store.kind: filetable.catalog-store.file.path: > > file:///path/to/catalog/store/ > > > > Ryan van Huuksloot > > Staff Engineer, Infrastructure | Streaming Platform > > [image: Shopify] > > <https://www.shopify.com/?utm_medium=salessignatures&utm_source=hs_email > > > > > > > > On Wed, Jul 16, 2025 at 2:22 PM Mayank Juneja <mayankjunej...@gmail.com> > > wrote: > > > > > Hi everyone, > > > > > > Thanks for your valuable inputs. I have updated the FLIP with the ideas > > > proposed earlier in the thread. Looking forward to your feedback. > > > https://cwiki.apache.org/confluence/x/cYroF > > > > > > Best, > > > Mayank > > > > > > On Fri, Jun 27, 2025 at 2:59 AM Leonard Xu <xbjt...@gmail.com> wrote: > > > > > > > Quick response, thanks Mayank, Hao and Timo for the effort. The new > > > > proposal looks well, +1 from my side. > > > > > > > > Could you draft(update) current FLIP docs thus we can have some > > specific > > > > discussions later? > > > > > > > > > > > > Best, > > > > Leonard > > > > > > > > > > > > > 2025 6月 26 15:06,Timo Walther <twal...@apache.org> 写道: > > > > > > > > > > Hi everyone, > > > > > > > > > > sorry for the late reply, feature freeze kept me busy. Mayank, Hao > > and > > > I > > > > synced offline and came up we an improved proposal. Before we update > > the > > > > FLIP let me summarize the most important key facts that hopefully > > address > > > > most concerns: > > > > > > > > > > 1) SecretStore > > > > > - Similar to CatalogStore, we introduce a SecretStore as the > highest > > > > level in TableEnvironment. > > > > > - SecretStore is initialized with options and potentially > environment > > > > variables. Including > EnvironmentSettings.withSecretStore(SecretStore). > > > > > - The SecretStore is pluggable and discovered using the regular > > > > factory-approach. > > > > > - For example, it could implement Azure Key Vault or other cloud > > > > provider secrets stores. > > > > > - Goal: Flink and Flink catalogs do not have to deal with sensitive > > > data. > > > > > > > > > > 2) Connections > > > > > - Connections are catalog objects identified with 3-part > identifiers. > > > > 3-part identifiers are crucial for managability of larger projects > and > > > > align with existing catalog objects. > > > > > - They contain connection details, e.g. URL, query parameters, and > > > other > > > > configuration. > > > > > - They do not contain secrets, but only pointers to secrets in the > > > > SecretStore. > > > > > > > > > > 3) Connection DDL > > > > > > > > > > CREATE [TEMPORARY] CONNECTION mycat.mydb.OpenAPI WITH ( > > > > > 'type' = 'basic' | 'bearer' | 'jwt' | 'oauth' | ..., > > > > > ... > > > > > ) > > > > > > > > > > - Connection type is pluggable and discovered using the regular > > > > factory-approach. > > > > > - The factory extracts secrets and puts them into SecretStore. > > > > > - The factory only leaves non-confidential options left that can be > > > > stored in a catalog. > > > > > > > > > > When executing: > > > > > CREATE [TEMPORARY] CONNECTION mycat.mydb.OpenAPI WITH ( > > > > > 'type' = 'basic', > > > > > 'url' = 'api.example.com', > > > > > 'username' = 'bob', > > > > > 'password' = 'xyz' > > > > > ) > > > > > > > > > > The catalog will receive something similar to: > > > > > CREATE [TEMPORARY] CONNECTION mycat.mydb.OpenAPI WITH ( > > > > > 'type' = 'basic', > > > > > 'url' = 'api.example.com', > > > > > 'secret.store' = 'azure-key-vault' > > > > > 'secret.id' = 'secretId' > > > > > ) > > > > > > > > > > - However, the exact property design is up to the connection > factory. > > > > > > > > > > 4) Connection Usage > > > > > > > > > > CREATE TABLE t (...) USING CONNECTION mycat.mydb.OpenAPI; > > > > > > > > > > - MODEL, FUNCTION, TABLE DDL will support USING CONNECTION keyword > > > > similar to BigQuery. > > > > > - The connection will be provided in a table/model > provider/function > > > > definition factory. > > > > > > > > > > 5) CatalogStore / Catalog Initialization > > > > > > > > > > Catalog store or catalog can make use of SecretStore to retrieve > > > initial > > > > credentials for bootstrapping. All objects lower then catalog > > > store/catalog > > > > can then use connections. If you think we still need system level > > > > connections, we can support CREATE SYSTEM CONNECTION GlobalName WITH > > (..) > > > > similar to SYSTEM functions directly store in a ConnectioManager in > > > > TableEnvironment. But for now I would suggest to start simple with > > > > per-catalog connections and later evolve the design. > > > > > > > > > > Dealing with secrets is a very sensitive topic and I'm clearly not > an > > > > expert on it. This is why we should try to push the problem to > existing > > > > solutions and don't start storing secrets in Flink in any way. Thus, > > the > > > > interfaces will be defined very generic. > > > > > > > > > > Looking forward to your feedback. > > > > > > > > > > Cheers, > > > > > Timo > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On 09.06.25 04:01, Leonard Xu wrote: > > > > >> Thanks Timo for joining this thread. > > > > >> I agree that this feature is needed by the community; the current > > > > disagreement is only about the implementation method or solution. > > > > >> Your thoughts looks generally good to me, looking forward to your > > > > proposal. > > > > >> Best, > > > > >> Leonard > > > > >>> 2025 6月 6 22:46,Timo Walther <twal...@apache.org> 写道: > > > > >>> > > > > >>> Hi everyone, > > > > >>> > > > > >>> thanks for this healthy discussion. Looking at high number of > > > > participants, it looks like we definitely want this feature. We just > > need > > > > to figure out the "how". > > > > >>> > > > > >>> This reminds me very much of the discussion we had for CREATE > > > > FUNCTION. There, we discussed whether functions should be named > > globally > > > or > > > > catalog-specific. In the end, we decided for both `CREATE SYSTEM > > > FUNCTION` > > > > and `CREATE FUNCTION`, satisfying both the data platform team of an > > > > organization (which might provide system functions) and individual > data > > > > teams or use cases (scoped by catalog/database). > > > > >>> > > > > >>> Looking at other modern vendors like Snowflake there is SECRET > > > (scoped > > > > to schema) [1] and API INTEGRATION [2] (scoped to account). So also > > other > > > > vendors offer global and per-team / per-use case connections details. > > > > >>> > > > > >>> In general, I think fitting connections into the existing > concepts > > > for > > > > catalog objects (with three-part identifier) makes managing them > > easier. > > > > But I also see the need for global defaults. > > > > >>> > > > > >>> Btw keep in mind that a catalog implementation should only store > > > > metadata. Similar how a CatalogTable doesn't store the actual data, a > > > > CatalogConnection should not store the credentials. It should only > > offer > > > a > > > > factory that allows for storing and retrieving them. In real world > > > > scenarios a factory is most likely backed by a product like Azure Key > > > Vault. > > > > >>> > > > > >>> So code-wise having a ConnectionManager that behaves similar to > > > > FunctionManager sounds reasonable. > > > > >>> > > > > >>> +1 for having special syntax instead of using properties. This > > allows > > > > to access connections in tables, models, functions. And catalogs, if > we > > > > agree to have global ones as well. > > > > >>> > > > > >>> What do you think? > > > > >>> > > > > >>> Let me spend some more thoughts on this and come back with a > > concrete > > > > proposal by early next week. > > > > >>> > > > > >>> Cheers, > > > > >>> Timo > > > > >>> > > > > >>> [1] > https://docs.snowflake.com/en/sql-reference/sql/create-secret > > > > >>> [2] > > > > > https://docs.snowflake.com/en/sql-reference/sql/create-api-integration > > > > >>> > > > > >>> On 04.06.25 10:47, Leonard Xu wrote: > > > > >>>> Hey,Mayank > > > > >>>> Please see my feedback as following: > > > > >>>> 1. One of the motivations of this FLIP is to improve security. > > > > However, the current design stores all connection information in the > > > > catalog, > > > > >>>> and each Flink SQL job reads from the catalog during > compilation. > > > The > > > > connection information is passed between SQL Gateway and the > > > > >>>> catalog in plaintext, which actually introduces new security > > risks. > > > > >>>> 2. The name "Connection" should be changed to something like > > > > ConnectionSpec to clearly indicate that it is a object containing > only > > > > static > > > > >>>> properties without a lifecycle. Putting aside the naming issue, > I > > > > think the current model and hierarchy design is somewhat strange. > > Storing > > > > >>>> various kinds of connections (e.g., Kafka, MySQL) in the same > > > Catalog > > > > with hierarchical identifiers like > catalog-name.db-name.connection-name > > > > >>>> raises the following questions: > > > > >>>> (1) What is the purpose of this hierarchical structure of > > Connection > > > > object ? > > > > >>>> (2) If we can use a Connection to create a MySQL table, why > can't > > we > > > > use a Connection to create a MySQL Catalog? > > > > >>>> 3. Regarding the connector usage examples given in this FLIP: > > > > >>>> ```sql > > > > >>>> 1 -- Example 2: Using connection for jdbc tables > > > > >>>> 2 CREATE OR REPLACE CONNECTION mysql_customer_db > > > > >>>> 3 WITH ( > > > > >>>> 4 'type' = 'jdbc', > > > > >>>> 5 'jdbc.url' = 'jdbc:mysql:// > > > > customer-db.example.com:3306/customerdb', > > > > >>>> 6 'jdbc.connection.ssl.enabled' = 'true' > > > > >>>> 7 ); > > > > >>>> 8 > > > > >>>> 9 CREATE TABLE customers ( > > > > >>>> 10 customer_id INT, > > > > >>>> 11 PRIMARY KEY (customer_id) NOT ENFORCED > > > > >>>> 12 ) WITH ( > > > > >>>> 13 'connector' = 'jdbc', > > > > >>>> 14 'jdbc.connection' = 'mysql_customer_db', > > > > >>>> 15 'jdbc.connection.ssl.enabled' = 'true', > > > > >>>> 16 'jdbc.connection.max-retry-timeout' = '60s', > > > > >>>> 17 'jdbc.table-name' = 'customers', > > > > >>>> 18 'jdbc.lookup.cache' = 'PARTIAL' > > > > >>>> 19 ); > > > > >>>> ``` > > > > >>>> I see three issues from SQL semantics and Connector > compatibility > > > > perspectives: > > > > >>>> (1) Look at line 14: `mysql_customer_db` is an object identifier > > of > > > a > > > > CONNECTION defined in SQL. However, this identifier is referenced > > > > >>>> via a string value inside the table’s WITH clause, which > feel > > > > hack for me. > > > > >>>> (2) Look at lines 14–16: the use of the specific prefix > > > > `jdbc.connection` will confuse users because `connection.xx` maybe > > > already > > > > used as > > > > >>>> a prefix for existing configuration items. > > > > >>>> (3) Look at lines 14–18: Why do all existing configuration > options > > > > need to be prefixed with `jdbc`, even they’re not related to > Connection > > > > properties? > > > > >>>> This completely changes user habits — is it backward compatible? > > > > >>>> In my opinion, Connection should be a model independent of both > > > > Catalog and Table, and can be referenced by all > catalog/table/udf/model > > > > object. > > > > >>>> It should be managed by a Component such as a ConnectionManager > to > > > > enable reuse. For security purposes, authentication mechanisms could > > > > >>>> be supported within the ConnectionManager. > > > > >>>> Best, > > > > >>>> Leonard > > > > >>>>> 2025 6月 4 02:04,Martijn Visser <martijnvis...@apache.org> 写道: > > > > >>>>> > > > > >>>>> Hi all, > > > > >>>>> > > > > >>>>> First of all, I think having a Connection resource is something > > > that > > > > will > > > > >>>>> be beneficial for Apache Flink. I could see that being extended > > in > > > > the > > > > >>>>> future to allow for easier secret handling [1]. > > > > >>>>> In my mental mind, I'm comparing this proposal against SQL/MED > > from > > > > the ISO > > > > >>>>> standard [2]. I do think that SQL/MED isn't a very user > friendly > > > > syntax > > > > >>>>> though, looking at Postgres for example [3]. > > > > >>>>> > > > > >>>>> I think it's a valid question if Connection should be > considered > > > > with a > > > > >>>>> catalog or database-level scope. @Ryan can you share something > > > more, > > > > since > > > > >>>>> you've mentioned "Note: I much prefer catalogs for this case. > > Which > > > > is what > > > > >>>>> we use internally to manage connection properties". It looks > like > > > > there > > > > >>>>> isn't a strong favourable approach looking at other vendors > > (like, > > > > >>>>> Databricks does scopes it on a Unity catalog, Snowflake on a > > > database > > > > >>>>> level). > > > > >>>>> > > > > >>>>> Also looking forward to Leonard's input. > > > > >>>>> > > > > >>>>> Best regards, > > > > >>>>> > > > > >>>>> Martijn > > > > >>>>> > > > > >>>>> [1] https://issues.apache.org/jira/browse/FLINK-36818 > > > > >>>>> [2] https://www.iso.org/standard/84804.html > > > > >>>>> [3] > > https://www.postgresql.org/docs/current/sql-createserver.html > > > > >>>>> > > > > >>>>> On Fri, May 30, 2025 at 5:07 AM Leonard Xu <xbjt...@gmail.com> > > > > wrote: > > > > >>>>> > > > > >>>>>> Hey Mayank. > > > > >>>>>> > > > > >>>>>> Thanks for the FLIP, I went through this FLIP quickly and > found > > > some > > > > >>>>>> issues which I think we > > > > >>>>>> need to deep discuss later. As we’re on a short Dragon boat > > > > Festival, > > > > >>>>>> could you kindly hold > > > > >>>>>> on this thread? and we will back to continue the FLIP discuss. > > > > >>>>>> > > > > >>>>>> Best, > > > > >>>>>> Leonard > > > > >>>>>> > > > > >>>>>> > > > > >>>>>>> 2025 4月 29 23:07,Mayank Juneja <mayankjunej...@gmail.com> > 写道: > > > > >>>>>>> > > > > >>>>>>> Hi all, > > > > >>>>>>> > > > > >>>>>>> I would like to open up for discussion a new FLIP-529 [1]. > > > > >>>>>>> > > > > >>>>>>> Motivation: > > > > >>>>>>> Currently, Flink SQL handles external connectivity by > defining > > > > endpoints > > > > >>>>>>> and credentials in table configuration. This approach > prevents > > > > >>>>>> reusability > > > > >>>>>>> of these connections and makes table definition less secure > by > > > > exposing > > > > >>>>>>> sensitive information. > > > > >>>>>>> We propose the introduction of a new "connection" resource in > > > > Flink. This > > > > >>>>>>> will be a pluggable resource configured with a remote > endpoint > > > and > > > > >>>>>>> associated access key. Once defined, connections can be > reused > > > > across > > > > >>>>>> table > > > > >>>>>>> definitions, and eventually for model definition (as > discussed > > in > > > > >>>>>> FLIP-437) > > > > >>>>>>> for inference, enabling seamless and secure integration with > > > > external > > > > >>>>>>> systems. > > > > >>>>>>> The connection resource will provide a new, optional way to > > > manage > > > > >>>>>> external > > > > >>>>>>> connectivity in Flink. Existing methods for table definitions > > > will > > > > remain > > > > >>>>>>> unchanged. > > > > >>>>>>> > > > > >>>>>>> [1] https://cwiki.apache.org/confluence/x/cYroF > > > > >>>>>>> > > > > >>>>>>> Best Regards, > > > > >>>>>>> Mayank Juneja > > > > >>>>>> > > > > >>>>>> > > > > >>> > > > > > > > > > > > > > > > > > > > -- > > > *Mayank Juneja* > > > Product Manager | Data Streaming and AI > > > > > > -- *Mayank Juneja* Product Manager | Data Streaming and AI