Hi Robert,

> There is already a way to rotate credentials [...]

I do not think so.

Currently, Polaris allows only the Principal itself to rotate the
credential it owns.
Admin / root cannot rotate credentials for another Principal.

Cheers,
Dmitri.



On Mon, Jul 21, 2025 at 4:32 AM Robert Stupp <sn...@snazy.de> wrote:

> There is already a way to rotate credentials, so I am not sure what
> the benefit of a "reset password" workflow would be.
>
> I do see the disadvantage that 0.9 doesn't have "external IdP"
> support, but 1.0 has it. I also see that you have trouble with keeping
> both versions alive. However, we have to be extremely careful with
> everything related to security.
> From what I understand from this thread, all feature requests are
> something that IdPs do support, so I do not see a reason to mirror
> those kinds of functionality in Polaris.
>
> The ask for "set client ID and secret" implies the need for the strong
> auditing capabilities, password strength, expiry, automatic rotation,
> etc
> A feature like "reset password" is a full workflow implying the need
> to manage expiring "reset password tokens" including sending emails,
> managing user identities, etc
>
> Overall, that's IMHO all not in the scope of a catalog.
>
>
> On Wed, Jul 16, 2025 at 9:24 AM Arun Suri
> <arun.s...@fivetran.com.invalid> wrote:
> >
> > I’m aligned with the phased approach you’ve outlined: supporting password
> > resets for existing principals now, while steadily enhancing IdP support
> > and making it the default over time
> > I will go ahead with making changes based on the discussions
> > Thank you for the suggestions
> >
> >
> > On Tue, Jul 15, 2025 at 10:12 PM Dmitri Bourlatchkov <di...@apache.org>
> > wrote:
> >
> > > I support Robert's proposal to leverage external IdPs in Polaris.
> > >
> > > However, Arun's use case also has merit, IMHO, because it enables
> existing
> > > deployments to migrate to newer Polaris versions, while keeping the old
> > > Polaris Principals.
> > >
> > > Migrating to an external IdP, while valuable from a security
> perspective,
> > > is a big deployment change.
> > >
> > > Perhaps we could implement the password reset request for existing
> Polaris
> > > Principals, while gradually enhancing support for external IdPs and
> making
> > > it default at some point.
> > >
> > > Cheers,
> > > Dmitri.
> > >
> > > On Tue, Jul 15, 2025 at 6:07 AM Robert Stupp <sn...@snazy.de> wrote:
> > >
> > > > Hi all,
> > > >
> > > > Writing the following with my "nasty security guy" hat on:
> > > >
> > > > Generally speaking, storing secrets is a quite sensitive topic that
> > > > deserves a lot of attention upfront, during the initial
> implementation
> > > > and for all changes related to it. What we already have in Polaris is
> > > > IMHO strictly speaking not enough, because it lacks the ability to
> > > > automatically rotate secrets and targeted logging/auditing
> > > > functionality. It's overall okay-ish. With the ability to provide
> > > > secrets comes another requirement to ensure that secrets are strong
> > > > enough and new permission checks and feature flags, which make the
> > > > code more complex.
> > > >
> > > > The mentioned requirements are the core domain of what IdPs do (for
> > > > example the OSS projects Keycloak, Authelia).
> > > >
> > > > From the Polaris's project PoV I think we should not go down that
> > > > route but leverage IdPs to do this for us. Mistakes and oversights in
> > > > the domain of secrets are common sources for vulnerabilities.
> > > >
> > > > On Mon, Jul 14, 2025 at 5:42 PM Dmitri Bourlatchkov <
> di...@apache.org>
> > > > wrote:
> > > > >
> > > > > Hi Arun,
> > > > >
> > > > > After writing my previous email I realised that we might be able to
> > > > support
> > > > > your use case via REST API by implementing admin-base password
> reset
> > > > [624].
> > > > >
> > > > > The flow would be:
> > > > > 1) create a principal using current ID (random client ID/secret)
> > > > > 2) set your own client ID / secret via the password reset API (new)
> > > > >
> > > > > Would this work from your POV?
> > > > >
> > > > > As for me, it helps to isolate rare admin-level principal
> manipulation
> > > > from
> > > > > the mainstream principal API, which IMHO, is a good idea from a
> general
> > > > > security perspective.
> > > > >
> > > > > Also, since we allow user-provided client IDs (after this change),
> it
> > > > would
> > > > > make sense to allow resetting them without re-creating the
> principal,
> > > > hence
> > > > > the new "reset" API.
> > > > >
> > > > > [624] https://github.com/apache/polaris/issues/624
> > > > >
> > > > > Cheers,
> > > > > Dmitri.
> > > > >
> > > > > On Mon, Jul 14, 2025 at 11:29 AM Dmitri Bourlatchkov <
> di...@apache.org
> > > >
> > > > > wrote:
> > > > >
> > > > > > Thanks for volunteering to make a PR for this, Arun! Looking
> forward
> > > > to it.
> > > > > >
> > > > > > As discussed, please consider securing the extra capability via
> (new)
> > > > > > permission checks. I'd think it might be worth it to also have a
> > > > feature
> > > > > > flag to control the new functionality.
> > > > > >
> > > > > > Re: External IdP - most of the authentication code is already in
> > > > `main`.
> > > > > > There are a few remaining dangling pieces related to connecting
> > > > external
> > > > > > users to Polaris roles, though, IIRC.
> > > > > >
> > > > > > Cheers,
> > > > > > Dmitri.
> > > > > >
> > > > > > On Mon, Jul 14, 2025 at 6:34 AM Arun Suri <
> arun.s...@fivetran.com
> > > > .invalid>
> > > > > > wrote:
> > > > > >
> > > > > >> Thanks for the detailed response Dimitri and Yufei!
> > > > > >>
> > > > > >> I agree with making the PR to support user-defined client ID and
> > > > secret
> > > > > >> via
> > > > > >> the REST API, along with appropriate access checks and possibly
> > > > > >> introducing
> > > > > >> a new permission type/config. I will work on this
> > > > > >>
> > > > > >> REST fits better with our tooling as it has fewer dependencies
> and
> > > > > >> complications compared to the JAR-based Admin CLI. We also
> believe
> > > > > >> building
> > > > > >> our migration logic in a neutral way (e.g., using the REST API)
> is
> > > > more
> > > > > >> robust—no matter how the tools evolve, the API remains the
> stable
> > > > > >> contract.
> > > > > >>
> > > > > >> As for external IdP delegation, it's something we're open to
> > > exploring
> > > > > >> down
> > > > > >> the line, though we understand it's still relatively new in
> Polaris
> > > > > >>
> > > > > >> Thanks,
> > > > > >>
> > > > > >> On Sun, Jul 13, 2025 at 1:28 AM Yufei Gu <flyrain...@gmail.com>
> > > > wrote:
> > > > > >>
> > > > > >> > The use case of passing secrets via REST is definitely valid,
> and
> > > > this
> > > > > >> use
> > > > > >> > case is not the only one we should be considering. Other
> concrete
> > > > > >> scenarios
> > > > > >> > include:
> > > > > >> >
> > > > > >> >    1. Catalog federation, where Polaris needs to store
> credentials
> > > > to
> > > > > >> >    connect to remote catalogs (e.g., Hive, Glue, Unity
> Catalog).
> > > > > >> >    2. S3-compatible storage without STS support, where Polaris
> > > must
> > > > > >> persist
> > > > > >> >    static access keys and secrets to enable read/write
> operations.
> > > > > >> >
> > > > > >> > Given these needs, I think it's the right time to formalize
> our
> > > > > >> approach to
> > > > > >> > secret management by integrating Polaris with established
> secret
> > > > > >> managers
> > > > > >> > such as HashiCorp Vault, AWS Secrets Manager, Azure Key
> Vault, and
> > > > > >> Google
> > > > > >> > Cloud Secret Manager.
> > > > > >> >
> > > > > >> > While using the admin tool to inject secrets is a workable
> > > > short-term
> > > > > >> > solution, it’s best treated as a stopgap.
> > > > > >> >
> > > > > >> > The good news is that the secret management interface was
> > > > introduced in
> > > > > >> the
> > > > > >> > Polari core already,
> > > > > >> >
> > > > > >> >
> > > > > >>
> > > >
> > >
> https://github.com/apache/polaris/blob/main/polaris-core/src/main/java/org/apache/polaris/core/secrets/UserSecretsManager.java
> > > > > >> > ,
> > > > > >> > we may just need to provide wrapper implementations for
> different
> > > > secret
> > > > > >> > managers.
> > > > > >> >
> > > > > >> >
> > > > > >> > Yufei
> > > > > >> >
> > > > > >> >
> > > > > >> > On Thu, Jul 10, 2025 at 12:52 PM Dmitri Bourlatchkov <
> > > > di...@apache.org>
> > > > > >> > wrote:
> > > > > >> >
> > > > > >> > > Thanks for providing more context, Arun!
> > > > > >> > >
> > > > > >> > > I do not object to adding user-provided client ID and
> secret to
> > > > the
> > > > > >> REST
> > > > > >> > > API. However, I personally maintain my opinion that this
> kind of
> > > > > >> > operation
> > > > > >> > > fits better with the Admin Tool, given the current state of
> the
> > > > > >> project.
> > > > > >> > I
> > > > > >> > > wonder what other community members think on this topic,
> too.
> > > > > >> > >
> > > > > >> > > If we go with updating the current REST API, then limiting
> > > access
> > > > to
> > > > > >> > > explicit client ID and secret parameters via access checks
> will
> > > > > >> certainly
> > > > > >> > > make sense. We may need a new permission type for this, I
> guess.
> > > > > >> > >
> > > > > >> > > Do you have the capacity to make a PR for this?
> > > > > >> > >
> > > > > >> > > Regarding the Admin Tool, is the difficulty in the fact
> that it
> > > > is a
> > > > > >> CLI
> > > > > >> > > tool that requires a JVM and your existing tooling is based
> on
> > > > > >> HTTP/REST
> > > > > >> > > and is not written in java? Just trying to understand the
> > > overall
> > > > use
> > > > > >> > case
> > > > > >> > > better.
> > > > > >> > >
> > > > > >> > > Your point about the external vault makes me wonder whether
> you
> > > > might
> > > > > >> be
> > > > > >> > > interested in running an IdP server (e.g. keycloak) in your
> > > infra
> > > > and
> > > > > >> > > making Polaris delegate user management to that system.
> There's
> > > > some
> > > > > >> > > existing support for that, but I'm not sure if anyone tried
> it
> > > > > >> end-to-end
> > > > > >> > > without any custom code on the server side (it is certainly
> > > > possible
> > > > > >> with
> > > > > >> > > custom code).
> > > > > >> > >
> > > > > >> > > Thanks,
> > > > > >> > > Dmitri.
> > > > > >> > >
> > > > > >> > > On Thu, Jul 10, 2025 at 3:30 PM Arun Suri <
> > > arun.s...@fivetran.com
> > > > > >> > .invalid>
> > > > > >> > > wrote:
> > > > > >> > >
> > > > > >> > > >  Hey Dmitri and Robert,
> > > > > >> > > >
> > > > > >> > > >
> > > > > >> > > > *To clarify our use case further:*
> > > > > >> > > >
> > > > > >> > > >
> > > > > >> > > > This isn't a one-time migration for us. We're migrating
> our
> > > > > >> *customers*
> > > > > >> > > > from
> > > > > >> > > > Polaris 0.9 (EclipseLink) to Polaris 1.0 (JDBC) gradually.
> > > > During
> > > > > >> this
> > > > > >> > > > process, we’ll be *running both catalog servers in
> parallel*,
> > > > with
> > > > > >> 1.0
> > > > > >> > > > acting as a *secondary/fallback* catalog.
> > > > > >> > > >
> > > > > >> > > > Our strategy involves:
> > > > > >> > > >
> > > > > >> > > >    - Registering the same tables in both 0.9 and 1.0
> > > > > >> > > >    - Using the *same *clientId* and *clientSecret in both
> > > > catalogs
> > > > > >> to
> > > > > >> > > >    ensure clients can authenticate seamlessly
> > > > > >> > > >    - Allowing us to *switch traffic between the two
> catalogs*,
> > > > and
> > > > > >> roll
> > > > > >> > > >    back instantly if needed
> > > > > >> > > >
> > > > > >> > > > This setup requires credential continuity — not just for
> > > > migration,
> > > > > >> but
> > > > > >> > > to
> > > > > >> > > > enable *safe rollback and zero-downtime cutover*. Using
> > > > different
> > > > > >> > > > credentials across catalogs versions would break this
> flow and
> > > > > >> require
> > > > > >> > > deep
> > > > > >> > > > client coordination to rotate secrets, which is not
> feasible
> > > at
> > > > > >> scale.
> > > > > >> > > >
> > > > > >> > > >
> > > > > >> > > > *Regarding your question, Dmitri: *I wonder how your
> tooling
> > > > could
> > > > > >> > obtain
> > > > > >> > > > Principals' secrets from the old
> > > > > >> > > >
> > > > > >> > > > Polaris instance for use as the new Principal creation
> request
> > > > > >> > parameter
> > > > > >> > > >
> > > > > >> > > > - We store the credentials in an external Vault as well.
> So we
> > > > are
> > > > > >> not
> > > > > >> > > > reading them from the old Polaris instance, but do have
> access
> > > > to
> > > > > >> them.
> > > > > >> > > >
> > > > > >> > > >
> > > > > >> > > > We did consider raw table copying, but the differences in
> > > > schema and
> > > > > >> > > > hashing logic between 0.9 and 1.0 make that risky — and
> harder
> > > > to
> > > > > >> > > > validate/test it completely due to unknown risks.
> > > > > >> > > >
> > > > > >> > > > So our goal with this proposal is to:
> > > > > >> > > >
> > > > > >> > > >    - Enable a *safe, service-admin only way* to inject
> known
> > > > > >> > credentials
> > > > > >> > > >    via the API during the transition phase with
> validations of
> > > > > >> course
> > > > > >> > > >    - Keep this functionality configurable.
> > > > > >> > > >
> > > > > >> > > > We’re not trying to expand Polaris into a full IdP — just
> to
> > > > > >> provide a
> > > > > >> > > > secure and practical bridge between versions. So the
> change
> > > > seems
> > > > > >> fine
> > > > > >> > to
> > > > > >> > > > us.
> > > > > >> > > >
> > > > > >> > > > Happy to iterate on the proposal  in a future sync
> > > > > >> > > >
> > > > > >> > > > On Wed, Jul 9, 2025 at 3:49 AM Dmitri Bourlatchkov <
> > > > > >> di...@apache.org>
> > > > > >> > > > wrote:
> > > > > >> > > >
> > > > > >> > > > > Hi Arun,
> > > > > >> > > > >
> > > > > >> > > > > Thank you for starting this discussion!
> > > > > >> > > > >
> > > > > >> > > > > I did some poking about Keycloak and it looks like
> Keycloak
> > > > allows
> > > > > >> > > > > user-provided Client IDs.
> > > > > >> > > > >
> > > > > >> > > > > I think it should be fine for Polaris to accept
> > > user-provided
> > > > > >> Client
> > > > > >> > > IDs
> > > > > >> > > > in
> > > > > >> > > > > the Principal management API. I suppose we may want to
> > > impose
> > > > some
> > > > > >> > > > > restrictions in terms of special characters, but in
> general
> > > a
> > > > > >> > > > > previous Polaris Client ID should be valid as an input
> > > > parameter
> > > > > >> when
> > > > > >> > > > > creating a new Principal.
> > > > > >> > > > >
> > > > > >> > > > > I think it should also be fine for Polaris to accept
> > > > user-provided
> > > > > >> > > Client
> > > > > >> > > > > Secrets (passwords) when creating Principals.
> > > > > >> > > > >
> > > > > >> > > > > That said, from my POV using the Admin Tool is still
> > > > preferable
> > > > > >> for
> > > > > >> > > > > migration use cases.
> > > > > >> > > > >
> > > > > >> > > > > My main argument in favour of the Admin Tool is that the
> > > whole
> > > > > >> > > migration
> > > > > >> > > > > process is a deployment type of activity when the
> Polaris
> > > > service
> > > > > >> is
> > > > > >> > > > > configured for the first time. Ideally, Polaris data
> would
> > > > follow
> > > > > >> a
> > > > > >> > > > backup
> > > > > >> > > > > / restore process (not currently implemented) where the
> old
> > > > > >> > instance's
> > > > > >> > > > data
> > > > > >> > > > > is exported into a file, which is then imported into
> the new
> > > > > >> instance
> > > > > >> > > > > before it is started for the first time.
> > > > > >> > > > >
> > > > > >> > > > > I wonder how your tooling could obtain Principals'
> secrets
> > > > from
> > > > > >> the
> > > > > >> > old
> > > > > >> > > > > Polaris instance for use as the new Principal creation
> > > request
> > > > > >> > > parameter.
> > > > > >> > > > >
> > > > > >> > > > > Cheers,
> > > > > >> > > > > Dmitri.
> > > > > >> > > > >
> > > > > >> > > > > On Tue, Jul 8, 2025 at 9:02 AM Arun Suri <
> > > > arun.s...@fivetran.com
> > > > > >> > > > .invalid>
> > > > > >> > > > > wrote:
> > > > > >> > > > >
> > > > > >> > > > > > Hi all,
> > > > > >> > > > > >
> > > > > >> > > > > > Following up on the suggestion from the discussion
> here
> > > > > >> > > > > > <
> > > > > >> > >
> > > >
> https://github.com/apache/polaris/issues/1929#issuecomment-3045487786
> > > > > >> > > > >
> > > > > >> > > > > > — thank you for the feedback so far.
> > > > > >> > > > > >
> > > > > >> > > > > > We’re currently migrating our self-hosted Polaris
> service
> > > > from
> > > > > >> > > version
> > > > > >> > > > > 0.9
> > > > > >> > > > > > (EclipseLink-based metastore) to version 1.0
> (JDBC-based
> > > > > >> > metastore).
> > > > > >> > > As
> > > > > >> > > > > > part of this transition, we need to preserve the
> existing
> > > > > >> > `clientId`
> > > > > >> > > > and
> > > > > >> > > > > > `clientSecret` credentials for registered principals.
> > > > > >> > > > > > These credentials are already embedded in customer
> > > > workflows.
> > > > > >> > > Rotating
> > > > > >> > > > > them
> > > > > >> > > > > > during migration would create disruptions and require
> > > > cross-team
> > > > > >> > > > > > coordination with clients — making both rollout and
> > > rollback
> > > > > >> > > > > significantly
> > > > > >> > > > > > more complex.
> > > > > >> > > > > >
> > > > > >> > > > > > We understand the security implications of allowing
> > > > arbitrary
> > > > > >> > > > credentials
> > > > > >> > > > > > to be passed in an API request. That said, we believe
> this
> > > > > >> > capability
> > > > > >> > > > can
> > > > > >> > > > > > be introduced safely and in a tightly controlled
> manner.
> > > For
> > > > > >> > example:
> > > > > >> > > > > >
> > > > > >> > > > > > - Restricting this functionality to service admin
> only.
> > > > > >> > > > > > - Ensuring all credential transmissions occur only
> over
> > > > HTTPS
> > > > > >> > > > > > - Clearly documenting that this is strictly for
> > > > > >> > *migration/bootstrap
> > > > > >> > > > use
> > > > > >> > > > > > cases*, not for production use
> > > > > >> > > > > > - Disabling this functionality by default in publicly
> > > hosted
> > > > > >> > > > deployments
> > > > > >> > > > > > - Ensuring credentials are never logged (e.g., in
> > > > observability
> > > > > >> > > systems
> > > > > >> > > > > > like logs or traces)
> > > > > >> > > > > >
> > > > > >> > > > > > Our goal is not to weaken the system's security
> > > guarantees,
> > > > but
> > > > > >> to
> > > > > >> > > > > provide
> > > > > >> > > > > > a practical and secure migration path where credential
> > > > > >> continuity
> > > > > >> > is
> > > > > >> > > > > > essential. Since there are a lot of DB schema changes
> > > > involved,
> > > > > >> > > Manual
> > > > > >> > > > > > insertion into the metastore isn't ideal either, due
> to
> > > > > >> potential
> > > > > >> > > > > > inconsistencies in hashing or salting logic across
> > > versions
> > > > —
> > > > > >> > > > increasing
> > > > > >> > > > > > operational risk.
> > > > > >> > > > > >
> > > > > >> > > > > > *### Proposal*
> > > > > >> > > > > >
> > > > > >> > > > > > We propose extending the existing `createPrincipal`
> API to
> > > > > >> > optionally
> > > > > >> > > > > > accept `clientId` and `clientSecret` fields, with the
> > > above
> > > > > >> > > safeguards
> > > > > >> > > > in
> > > > > >> > > > > > place.
> > > > > >> > > > > >
> > > > > >> > > > > > We would appreciate your feedback on this proposal
> and are
> > > > > >> happy to
> > > > > >> > > > > > contribute a patch once there’s alignment. We’re also
> open
> > > > to
> > > > > >> > > > discussing
> > > > > >> > > > > > this during the next Polaris Community Sync if
> helpful.
> > > > > >> > > > > >
> > > > > >> > > > > > Arun Suri
> > > > > >> > > > > >
> > > > > >> > > > > > Senior Software Engineer
> > > > > >> > > > > >
> > > > > >> > > > > > He/him/his
> > > > > >> > > > > >
> > > > > >> > > > > > Engineering | Fivetran
> > > > > >> > > > > > arun.s...@fivetran.com
> > > > > >> > > > > > fivetran.com <//fivetran.com>
> > > > > >> > > > > > <http://www.fivetran.com>
> > > > > >> > > > > > [image: facebook] <https://www.facebook.com/Fivetran/
> >
> > > > [image:
> > > > > >> > > > twitter]
> > > > > >> > > > > > <
> > > > > >> > > > > >
> > > > > >> > > > >
> > > > > >> > > >
> > > > > >> > >
> > > > > >> >
> > > > > >>
> > > >
> > >
> https://twitter.com/fivetran?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
> > > > > >> > > > > > >
> > > > > >> > > > > > [image:
> > > > > >> > > > > > linkedin] <https://www.linkedin.com/company/fivetran>
> > > > [image:
> > > > > >> > > > instagram]
> > > > > >> > > > > > <https://www.instagram.com/fivetran_ig/>
> > > > > >> > > > > >
> > > > > >> > > > >
> > > > > >> > > >
> > > > > >> > > >
> > > > > >> > > > --
> > > > > >> > > > Arun Suri
> > > > > >> > > >
> > > > > >> > > > Senior Software Engineer
> > > > > >> > > >
> > > > > >> > > > He/him/his
> > > > > >> > > >
> > > > > >> > > > Engineering | Fivetran
> > > > > >> > > > arun.s...@fivetran.com
> > > > > >> > > > fivetran.com <//fivetran.com>
> > > > > >> > > > <http://www.fivetran.com>
> > > > > >> > > > [image: facebook] <https://www.facebook.com/Fivetran/>
> > > [image:
> > > > > >> > twitter]
> > > > > >> > > > <
> > > > > >> > > >
> > > > > >> > >
> > > > > >> >
> > > > > >>
> > > >
> > >
> https://twitter.com/fivetran?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
> > > > > >> > > > >
> > > > > >> > > > [image:
> > > > > >> > > > linkedin] <https://www.linkedin.com/company/fivetran>
> [image:
> > > > > >> > instagram]
> > > > > >> > > > <https://www.instagram.com/fivetran_ig/>
> > > > > >> > > >
> > > > > >> > >
> > > > > >> >
> > > > > >>
> > > > > >>
> > > > > >> --
> > > > > >> Arun Suri
> > > > > >>
> > > > > >> Senior Software Engineer
> > > > > >>
> > > > > >> He/him/his
> > > > > >>
> > > > > >> Engineering | Fivetran
> > > > > >> arun.s...@fivetran.com
> > > > > >> fivetran.com <//fivetran.com>
> > > > > >> <http://www.fivetran.com>
> > > > > >> [image: facebook] <https://www.facebook.com/Fivetran/> [image:
> > > > twitter]
> > > > > >> <
> > > > > >>
> > > >
> > >
> https://twitter.com/fivetran?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
> > > > > >> >
> > > > > >> [image:
> > > > > >> linkedin] <https://www.linkedin.com/company/fivetran> [image:
> > > > instagram]
> > > > > >> <https://www.instagram.com/fivetran_ig/>
> > > > > >>
> > > > > >
> > > >
> > >
> >
> >
> > --
> > Arun Suri
> >
> > Senior Software Engineer
> >
> > He/him/his
> >
> > Engineering | Fivetran
> > arun.s...@fivetran.com
> > fivetran.com <//fivetran.com>
> > <http://www.fivetran.com>
> > [image: facebook] <https://www.facebook.com/Fivetran/> [image: twitter]
> > <
> https://twitter.com/fivetran?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor
> >
> > [image:
> > linkedin] <https://www.linkedin.com/company/fivetran> [image: instagram]
> > <https://www.instagram.com/fivetran_ig/>
>

Reply via email to