Hi Leonard, Thanks for the feedback and offline sync yesterday.
> I think connection is a very common need for most catalogs like MySQLCatalog、KafkaCatalog、HiveCatalog and so on, all of these catalogs need a connection. I added `TEMPORARY SYSTEM` connection so it's a global level connection which can be used for Catalog creation. After syncing with Timo, we propose to store it first in memory like `TEMPORARY SYSTEM FUNCTION` since this FLIP is already introducing lots of concepts and interfaces. We can provide `SYSTEM` connection and related interfaces to persist it in following up FLIPs. > In this case, I think reducing connector development cost is more important than making is explicit, the connector knows which options is sensitive or not. Sure. I updated the FLIP to merge connection options with table options so it's easier for current connectors. > I hope the BasicConnectionFactory can be a common one that can feed most common users case, otherwise encrypt all options is a good idea. I updated to `DefaultConnectionFactory` which handles most of the secret keys. Thanks, Hao On Mon, Jul 28, 2025 at 6:13 AM Leonard Xu <xbjt...@gmail.com> wrote: > Hey, Hao > > Please see my comments as follows: > > >> 2. I think we can also modify the create catalog ddl syntax. > > > > ``` > > CREATE CATALOG cat USING CONNECTION mycat.mydb.mysql_prod > > WITH ( > > 'type' = 'jdbc' > > ); > > ``` > > > > Does `mycat.mydb.mysql_prod` exist in another catalog? This feels like a > > chicken-egg problem. I think for connections to be used for catalog > > creation, it needs to be system connection similar to system function > which > > exist outside of CatalogManager. Maybe we can defer this to later > > functionality? > > I think connection is a very common need for most catalogs like > MySQLCatalog、KafkaCatalog、HiveCatalog and so on, all of these catalogs need > a connection. > > > >> 3. It seems the connector factory should merge the with options and > > connection options together and then create the source/sink. It's > > better that framework can merge all these options and connectors don't > need > > any codes. > > > > I think it's better to separate connections with table options and make > it > > explicit. Reasons is: the connection here should be a decrypted one. It's > > sensitive and should be handled carefully regarding logging, usage etc. > > Mixing with original table options makes it hard to do. But the Flip used > > `CatalogConnection` which is an encrypted one. I'll update it to > > `SensitveConnection`. > >> (4)Framework-level Resolution : +1 to Shengkai's point about having the > > framework (DynamicTableFactory) return complete options to reduce > connector > > adaptation cost. > > > > Please see my explanation for Shengkai's similar question. > > In this case, I think reducing connector development cost is more > important than making is explicit, the connector knows which options is > sensitive or not. > > > >> 4. Why we need to introduce ConnectionFactory? I think connection is > like > > CatalogTable. It should hold the basic information and all information in > > the connection should be stored into secret store. > > > > The main reason is to enable user defined connection handling for > different > > types. For example, if connection type is `basic`, the corresponding > > factory can handle basic type secrets (e.g. extract username/password > from > > connection options and do encryption). > > > >> (2) Configurability of SECRET_FIELDS : Could the hardcoded SECRET_FIELDS > > in BasicConnectionFactory be made configurable (e.g., 'token' vs > > 'accessKey') for better connector compatibility? > > > > This depends on `ConnectionFactory` implementation and can be self > defined > > by user. > > I hope the BasicConnectionFactory can be a common one that can feed most > common users case, otherwise encrypt all options is a good idea. > > Btw, I also want to push the FLIP forward and start a vote ASAP, thus a > meeting is welcome if you think it can help finalizing the discussion > thread. > > > Best, > Leonard > > > > > > >> Hi friends > >> > >> I like the updated FLIP goals, that’s what I want. I’ve some feedback: > >> > >> (1) Minor: Interface Hierarchy : Why doesn't WritableSecretStore extend > >> SecretStore? > >> (2) Configurability of SECRET_FIELDS : Could the hardcoded SECRET_FIELDS > >> in BasicConnectionFactory be made configurable (e.g., 'token' vs > >> 'accessKey') for better connector compatibility? > >> (3)Inconsistent Return Types : ConnectionFactory#resolveConnection > returns > >> SensitiveConnection, while BasicConnectionFactory#resolveConnection > returns > >> Map<String, String>. Should these be aligned? > >> (4)Framework-level Resolution : +1 to Shengkai's point about having the > >> framework (DynamicTableFactory) return complete options to reduce > connector > >> adaptation cost. > >> (5)Secret ID Handling : When no encryption is needed, secretId is null > >> (from secrets.isEmpty() ? null : secretStore.storeSecret(secrets)). This > >> behavior should be explicitly documented in the interfaces. > >> > >> Best, > >> Leonard > >> > >>> 2025 7月 24 11:44,Shengkai Fang <fskm...@gmail.com> 写道: > >>> > >>> hi. > >>> > >>> Sorry for the late reply. I just have some questions: > >>> > >>> 1. Why SecretStoreFactory#open throws a CatalogException? I think the > >>> exteranl system can not handle this exception. > >>> > >>> 2. I think we can also modify the create catalog ddl syntax. > >>> > >>> ``` > >>> CREATE CATALOG cat USING CONNECTION mycat.mydb.mysql_prod > >>> WITH ( > >>> 'type' = 'jdbc' > >>> ); > >>> ``` > >>> > >>> 3. It seems the connector factory should merge the with options and > >>> connection options together and then create the source/sink. It's > >>> better that framework can merge all these options and connectors don't > >> need > >>> any codes. > >>> > >>> 4. Why we need to introduce ConnectionFactory? I think connection is > like > >>> CatalogTable. It should hold the basic information and all information > in > >>> the connection should be stored into secret store. > >>> > >>> > >>> Best, > >>> Shengkai > >>> > >>> > >>> Timo Walther <twal...@apache.org> 于2025年7月22日周二 22:04写道: > >>> > >>>> Hi Mayank, > >>>> > >>>> Thanks for updating the FLIP and clearly documenting our discussion. > >>>> > >>>> +1 for moving forward with the vote, unless there are objections from > >>>> others. > >>>> > >>>> Cheers, > >>>> Timo > >>>> > >>>> On 22.07.25 02:14, Mayank Juneja wrote: > >>>>> 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 > >>>>>>>> > >>>>>>> > >>>>>> > >>>>> > >>>>> > >>>> > >>>> > >> > >> > >