From 5e3b5065a65482060d99d6de5db37f3dc467dc26 Mon Sep 17 00:00:00 2001 From: Florian Eiden Date: Wed, 11 Oct 2023 13:35:41 -0700 Subject: [PATCH 01/10] Fix description --- website/docs/docs/cloud/manage-access/set-up-bigquery-oauth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/manage-access/set-up-bigquery-oauth.md b/website/docs/docs/cloud/manage-access/set-up-bigquery-oauth.md index 516a340c951..73de602e2ba 100644 --- a/website/docs/docs/cloud/manage-access/set-up-bigquery-oauth.md +++ b/website/docs/docs/cloud/manage-access/set-up-bigquery-oauth.md @@ -1,6 +1,6 @@ --- title: "Set up BigQuery OAuth" -description: "Learn how dbt Cloud administrators can use licenses and seats to control access in a dbt Cloud account." +description: "Learn how dbt Cloud administrators can use BigQuery OAuth to control access in a dbt Cloud account" id: "set-up-bigquery-oauth" --- From 31b3ab08d13018c279438ad908b642758dd16923 Mon Sep 17 00:00:00 2001 From: Florian Eiden Date: Wed, 11 Oct 2023 15:43:58 -0700 Subject: [PATCH 02/10] Add Databricks OAuth doc --- .../manage-access/set-up-databricks-oauth.md | 68 ++++++++++++++++++ .../DBX-auth/dbt-databricks-oauth-user.png | Bin 0 -> 29475 bytes .../DBX-auth/dbt-databricks-oauth.png | Bin 0 -> 41206 bytes 3 files changed, 68 insertions(+) create mode 100644 website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md create mode 100644 website/static/img/docs/dbt-cloud/using-dbt-cloud/dbt-cloud-enterprise/DBX-auth/dbt-databricks-oauth-user.png create mode 100644 website/static/img/docs/dbt-cloud/using-dbt-cloud/dbt-cloud-enterprise/DBX-auth/dbt-databricks-oauth.png diff --git a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md new file mode 100644 index 00000000000..de0e7155f53 --- /dev/null +++ b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md @@ -0,0 +1,68 @@ +--- +title: "Set up Databricks OAuth" +description: "Learn how dbt Cloud administrators can use Databricks OAuth to control access in a dbt Cloud account." +id: "set-up-databricks-oauth" +--- + +:::info Enterprise Feature + +This guide describes a feature of the dbt Cloud Enterprise plan. If you’re interested in learning more about an Enterprise plan, contact us at sales@getdbt.com. + +::: + +dbt Cloud supports developer OAuth ([OAuth for partner solutions](https://docs.databricks.com/en/integrations/manage-oauth.html)) with Databricks, providing an additional layer of security for dbt enterprise users. When Databricks OAuth is enabled for a dbt Cloud project, all dbt Cloud developers must authenticate with Databricks in order to use the dbt Cloud IDE. The project's deployment environments will still leverage the Databricks authentication method set at the environment level. + + +### Configure Databricks OAuth (Databricks admin) + +To get started, you will need to [add dbt as an OAuth application](https://docs.databricks.com/en/integrations/configure-oauth-dbt.html) with Databricks, in 2 steps: + +- On your terminal, [authenticate to the Databricks Account API](https://docs.databricks.com/en/integrations/configure-oauth-dbt.html#authenticate-to-the-account-api) with the Databricks CLI. You authenticate via: + - OAuth for users ([prerequisites](https://docs.databricks.com/en/dev-tools/auth.html#oauth-u2m-auth)) + - Oauth for service principals ([prerequisites](https://docs.databricks.com/en/dev-tools/auth.html#oauth-m2m-auth)) + - Username and password (must be account admin) +- In that terminal still, **add dbt Cloud as an OAuth application** using `curl` and the [OAuth Customm App Integration API](https://docs.databricks.com/api/account/customappintegration/create) + +For that second step, here is a sample snippet with username/password: + +```BASH +curl -u USERNAME:PASSWORD https://accounts.cloud.databricks.com/api/2.0/accounts/ACCOUNT_ID/oauth2/custom-app-integrations -d '{"redirect_urls": ["https://YOUR_ACCESS_URL/callback", "https://YOUR_ACCESS_URL/complete/databricks"], "confidential": true, "name": "NAME", "scopes": ["sql", "offline_access"]}' +``` + +Replacing the parameters with: + +| Config | Value | +| ------ | ----- | +| **USERNAME** | Your Databricks username (account admin level) | +| **PASSWORD** | Your Databricks password (account admin level) | +| **ACCOUNT_ID** | Your Databricks [account ID](https://docs.databricks.com/en/administration-guide/account-settings/index.html#locate-your-account-id) | +| **YOUR_ACCESS_URL** | The [appropriate Access URL](/docs/cloud/about-cloud/regions-ip-addresses) for your dbt Cloud account region and plan | +| **NAME** | The integration name (i.e 'databricks-dbt-cloud') + +The API response will include the `client_id` and `client_secret` required in the following step. At this time this is the only way to get the secret, the integration will need to be [deleted](https://docs.databricks.com/api/account/customappintegration/delete) and re-created if the secret is lost. + + +### Configure the Connection in dbt Cloud (dbt Cloud project admin) + +Now that you have an OAuth app set up in Databricks, you'll need to add the client ID and secret to dbt Cloud. To do so: + - go to Settings by clicking the gear in the top right. + - on the left, select **Projects** under **Account Settings** + - choose your project from the list + - select **Connection** to edit the connection details + - add the `OAuth Client ID` and `OAuth Client Secret`` from the Databricks OAuth app under the **Optional Settings** section + + + +### Authenticating to Databricks (dbt Cloud IDE developer) + +Once the Databricks connection via OAuth is set up for a dbt Cloud project, each dbt Cloud user will need to authenticate with Databricks in order to use the IDE. To do so: + +- Click the gear icon at the top right and select **Profile settings**. +- Select **Credentials**. +- Choose your project from the list +- Select `OAuth` as the authentication method, save +- Finalize by clicking the **Connect Databricks Account** button + + + +You will then be redirected to Databricks and asked to approve the connection. This redirects you back to dbt Cloud. You should now be an authenticated Databricks user, ready to use the dbt Cloud IDE. diff --git a/website/static/img/docs/dbt-cloud/using-dbt-cloud/dbt-cloud-enterprise/DBX-auth/dbt-databricks-oauth-user.png b/website/static/img/docs/dbt-cloud/using-dbt-cloud/dbt-cloud-enterprise/DBX-auth/dbt-databricks-oauth-user.png new file mode 100644 index 0000000000000000000000000000000000000000..aecf99d726a560942eba0859bcaee4caf83d9818 GIT binary patch literal 29475 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%0Dmbh<2DIDtceM)!giCTvgGK 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 literal 0 HcmV?d00001 diff --git a/website/static/img/docs/dbt-cloud/using-dbt-cloud/dbt-cloud-enterprise/DBX-auth/dbt-databricks-oauth.png b/website/static/img/docs/dbt-cloud/using-dbt-cloud/dbt-cloud-enterprise/DBX-auth/dbt-databricks-oauth.png new file mode 100644 index 0000000000000000000000000000000000000000..bb32fab2afbd8a5a919783674bc63598e32af08d GIT binary patch literal 41206 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

vun?wpRYJSuD;a*MjY=d@?7igE zw3~}#`er3kj>VG!M^OU0yf}rg7$L(#-(kZ+iag8iiy8GTN3~aQLC~FQAHB*r^1TErCMl>z5*B~(R=p32! zkzo)c*`+>UV5)TF0B}I1W=QFw|0iXFhlEew<~n9iVhIJ8zi>Q)3!FWu1os&a_xR7~ z@8r29+nJ@^U#D#{H+#=EZ1&Xe`__Kw_p>VFrY@HODbvw$g)b1l zgrxJT(U4c5nyzAy@yB?=u#za>@UK%_?#s1l?@b9MsH%t}n%}$sI+=ZVSbBQD$vQjV z*=JgdRrO^|Y=MB>Teg`}*EpjU1=1Z%(()Q+P$-cA=u4gydQI#!S2*~gV5drc|uFyiH-Js6EnVF~hWl+{29>aY48w&d4^{gb3I&Ibo-Yz&)u zNxI^bVdXJh-vYhl_W?8vl_H+P!?U#OXA(1~t8$klXg#|(gEh&WxDa|5>63OxZ$M59 zN%47!Jz!*xMU0O|em62P&K>vcCn|VM(wWW^v+;QITCH>CTRNSGhN1~Ep;GH@_y+fY zpj3Jg$nuk+c0pVi)w1XsKgvPevP{u_Z%SB0N^Q^SjECP>M(4GX)fRMuj3n-`a+sJn z2z*u)4sOCsYQ>KTlfITRi}?6;Ju%hH^!qQLna!uiw#mXT4>PVmvv3Vq+nJd8!>d3s zk>u3%3aR!S3~LrYtX&N$CLJGQ$3m3k8{;K3x9VetlQMS{2v~i1LX(eS3Oi^2>hu>q zLVfoIHGW~h$Lt4uOuz@|#o=zu#@b3_R&zl|Tex)QDe%RVwXKH@7&qtoD zz;$1!8DqSBzvW^Tb7>{MovM9H0&bHHg&D!EF3HsNEWm^jZ6XyX#A_nu0b+`%=gbQ# zRt%Ya2%c`9PtnAG!@<(;=<>?@L94B{-pS#D1ReWaTA+s-^CnR5uCo-^dDZv~(oTl8 zRLcD+!*N#958LyLdL4}&OAT+8Hj+vz{ls{H{3?0rcE#ip(b)@2u*{mT>VXoNDUoesTf^ ze0O_`K~LYz_<_~|0aHXI*_bBBHQBfZc7O2`G8YFu=U!Ko?$;OP?26g`(E(VSbj~NW zy}VZ0*VNxWUQ|(dyZW2)&%pqZ$N8$5p2aLahml;WSZ)mxH*l9R`@cA43Z9S?igo0( zaF%mxM60KQTeyhRKO&z4JPKL2U1yFe$V|mpu*l?MQJWEWHufKF4j}KQokG^u(7cN; z7~leJblZ#Xxw9E4>%o;v_cM`K^Qp+*RmGM=KDI9M>aprrD?gRsOm3PsM Date: Wed, 11 Oct 2023 15:59:34 -0700 Subject: [PATCH 03/10] Add beta disclaimer --- .../docs/cloud/manage-access/set-up-databricks-oauth.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md index de0e7155f53..870f8c015b8 100644 --- a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md +++ b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md @@ -12,6 +12,15 @@ This guide describes a feature of the dbt Cloud Enterprise plan. If you’re int dbt Cloud supports developer OAuth ([OAuth for partner solutions](https://docs.databricks.com/en/integrations/manage-oauth.html)) with Databricks, providing an additional layer of security for dbt enterprise users. When Databricks OAuth is enabled for a dbt Cloud project, all dbt Cloud developers must authenticate with Databricks in order to use the dbt Cloud IDE. The project's deployment environments will still leverage the Databricks authentication method set at the environment level. +:::tip Beta Feature + +Databricks OAuth support in dbt Cloud is a [beta feature](/docs/dbt-versions/product-lifecycles#dbt-cloud) and subject to change without notification. More updates to this feature coming soon. + +Current constraints / limitations: +- Databricks OAuth applications are in public preview +- The current experience requires the IDE to be restarted every hour (refresh token limited to 1h) + +::: ### Configure Databricks OAuth (Databricks admin) From 1c3e9e09a51db7816e5455a95f92eb2ecf9d6d68 Mon Sep 17 00:00:00 2001 From: Florian Eiden Date: Thu, 12 Oct 2023 08:46:31 -0700 Subject: [PATCH 04/10] Callback and token fix --- .../docs/docs/cloud/manage-access/set-up-databricks-oauth.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md index 870f8c015b8..0557cfb7d3c 100644 --- a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md +++ b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md @@ -18,7 +18,7 @@ Databricks OAuth support in dbt Cloud is a [beta feature](/docs/dbt-versions/pro Current constraints / limitations: - Databricks OAuth applications are in public preview -- The current experience requires the IDE to be restarted every hour (refresh token limited to 1h) +- The current experience requires the IDE to be restarted every hour (access tokens expire after 1 hour) ::: @@ -35,7 +35,7 @@ To get started, you will need to [add dbt as an OAuth application](https://docs. For that second step, here is a sample snippet with username/password: ```BASH -curl -u USERNAME:PASSWORD https://accounts.cloud.databricks.com/api/2.0/accounts/ACCOUNT_ID/oauth2/custom-app-integrations -d '{"redirect_urls": ["https://YOUR_ACCESS_URL/callback", "https://YOUR_ACCESS_URL/complete/databricks"], "confidential": true, "name": "NAME", "scopes": ["sql", "offline_access"]}' +curl -u USERNAME:PASSWORD https://accounts.cloud.databricks.com/api/2.0/accounts/ACCOUNT_ID/oauth2/custom-app-integrations -d '{"redirect_urls": ["https://YOUR_ACCESS_URL", "https://YOUR_ACCESS_URL/complete/databricks"], "confidential": true, "name": "NAME", "scopes": ["sql", "offline_access"]}' ``` Replacing the parameters with: From 1dc427f9a336755b1b733779689a63aff9f47969 Mon Sep 17 00:00:00 2001 From: Florian Eiden Date: Thu, 12 Oct 2023 09:02:22 -0700 Subject: [PATCH 05/10] Add workaround --- .../docs/docs/cloud/manage-access/set-up-databricks-oauth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md index 0557cfb7d3c..3edfb7f6adb 100644 --- a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md +++ b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md @@ -18,7 +18,7 @@ Databricks OAuth support in dbt Cloud is a [beta feature](/docs/dbt-versions/pro Current constraints / limitations: - Databricks OAuth applications are in public preview -- The current experience requires the IDE to be restarted every hour (access tokens expire after 1 hour) +- The current experience requires the IDE to be restarted every hour (access tokens expire after 1 hour - [workaround](https://docs.databricks.com/en/integrations/manage-oauth.html#override-the-default-token-lifetime-policy-for-dbt-core-power-bi-or-tableau-desktop)) ::: From 322806c6e56fe14e59fae35a395f7d85bf4a4288 Mon Sep 17 00:00:00 2001 From: Ly Nguyen Date: Thu, 12 Oct 2023 10:01:08 -0700 Subject: [PATCH 06/10] Add new page to sidebar --- website/sidebars.js | 1 + 1 file changed, 1 insertion(+) diff --git a/website/sidebars.js b/website/sidebars.js index 538575ed0f8..d70b8c1c4fe 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -90,6 +90,7 @@ const sidebarSettings = { label: "OAuth with data platforms", items: [ "docs/cloud/manage-access/set-up-snowflake-oauth", + "docs/cloud/manage-access/set-up-databricks-oauth", "docs/cloud/manage-access/set-up-bigquery-oauth", ], }, // oauth From 1be478f33330d2ea7cc613af4ac594e0aea5e2b1 Mon Sep 17 00:00:00 2001 From: Florian Eiden Date: Thu, 12 Oct 2023 16:09:27 -0700 Subject: [PATCH 07/10] Update website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md Co-authored-by: Leona B. Campbell <3880403+runleonarun@users.noreply.github.com> --- .../docs/docs/cloud/manage-access/set-up-databricks-oauth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md index 3edfb7f6adb..82401b0a7de 100644 --- a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md +++ b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md @@ -10,7 +10,7 @@ This guide describes a feature of the dbt Cloud Enterprise plan. If you’re int ::: -dbt Cloud supports developer OAuth ([OAuth for partner solutions](https://docs.databricks.com/en/integrations/manage-oauth.html)) with Databricks, providing an additional layer of security for dbt enterprise users. When Databricks OAuth is enabled for a dbt Cloud project, all dbt Cloud developers must authenticate with Databricks in order to use the dbt Cloud IDE. The project's deployment environments will still leverage the Databricks authentication method set at the environment level. +dbt Cloud supports developer OAuth ([OAuth for partner solutions](https://docs.databricks.com/en/integrations/manage-oauth.html)) with Databricks, providing an additional layer of security for dbt enterprise users. When you enable Databricks OAuth for a dbt Cloud project, all dbt Cloud developers must authenticate with Databricks in order to use the dbt Cloud IDE. The project's deployment environments will still leverage the Databricks authentication method set at the environment level. :::tip Beta Feature From aeebaafa8c7042041c723da5d43a4d44b7a32b2c Mon Sep 17 00:00:00 2001 From: Florian Eiden Date: Thu, 12 Oct 2023 16:09:34 -0700 Subject: [PATCH 08/10] Update website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md Co-authored-by: Leona B. Campbell <3880403+runleonarun@users.noreply.github.com> --- .../docs/docs/cloud/manage-access/set-up-databricks-oauth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md index 82401b0a7de..826451f3d79 100644 --- a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md +++ b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md @@ -16,7 +16,7 @@ dbt Cloud supports developer OAuth ([OAuth for partner solutions](https://docs.d Databricks OAuth support in dbt Cloud is a [beta feature](/docs/dbt-versions/product-lifecycles#dbt-cloud) and subject to change without notification. More updates to this feature coming soon. -Current constraints / limitations: +Current limitations: - Databricks OAuth applications are in public preview - The current experience requires the IDE to be restarted every hour (access tokens expire after 1 hour - [workaround](https://docs.databricks.com/en/integrations/manage-oauth.html#override-the-default-token-lifetime-policy-for-dbt-core-power-bi-or-tableau-desktop)) From 4564074012a3465977a35b7d6252b5645a2feda6 Mon Sep 17 00:00:00 2001 From: Florian Eiden Date: Thu, 12 Oct 2023 16:10:52 -0700 Subject: [PATCH 09/10] Apply suggestions from code review Co-authored-by: Leona B. Campbell <3880403+runleonarun@users.noreply.github.com> --- .../manage-access/set-up-databricks-oauth.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md index 826451f3d79..e6b68dd0987 100644 --- a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md +++ b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md @@ -17,7 +17,7 @@ dbt Cloud supports developer OAuth ([OAuth for partner solutions](https://docs.d Databricks OAuth support in dbt Cloud is a [beta feature](/docs/dbt-versions/product-lifecycles#dbt-cloud) and subject to change without notification. More updates to this feature coming soon. Current limitations: -- Databricks OAuth applications are in public preview +- Databrick's OAuth applications are in public preview - The current experience requires the IDE to be restarted every hour (access tokens expire after 1 hour - [workaround](https://docs.databricks.com/en/integrations/manage-oauth.html#override-the-default-token-lifetime-policy-for-dbt-core-power-bi-or-tableau-desktop)) ::: @@ -26,21 +26,21 @@ Current limitations: To get started, you will need to [add dbt as an OAuth application](https://docs.databricks.com/en/integrations/configure-oauth-dbt.html) with Databricks, in 2 steps: -- On your terminal, [authenticate to the Databricks Account API](https://docs.databricks.com/en/integrations/configure-oauth-dbt.html#authenticate-to-the-account-api) with the Databricks CLI. You authenticate via: +1. From your terminal, [authenticate to the Databricks Account API](https://docs.databricks.com/en/integrations/configure-oauth-dbt.html#authenticate-to-the-account-api) with the Databricks CLI. You authenticate using: - OAuth for users ([prerequisites](https://docs.databricks.com/en/dev-tools/auth.html#oauth-u2m-auth)) - Oauth for service principals ([prerequisites](https://docs.databricks.com/en/dev-tools/auth.html#oauth-m2m-auth)) - Username and password (must be account admin) -- In that terminal still, **add dbt Cloud as an OAuth application** using `curl` and the [OAuth Customm App Integration API](https://docs.databricks.com/api/account/customappintegration/create) +2. In the same terminal, **add dbt Cloud as an OAuth application** using `curl` and the [OAuth Custom App Integration API](https://docs.databricks.com/api/account/customappintegration/create) -For that second step, here is a sample snippet with username/password: +For the second step, you can use this example `curl` to authenticate with your username and password, replacing values as defined in the following table: -```BASH +```shell curl -u USERNAME:PASSWORD https://accounts.cloud.databricks.com/api/2.0/accounts/ACCOUNT_ID/oauth2/custom-app-integrations -d '{"redirect_urls": ["https://YOUR_ACCESS_URL", "https://YOUR_ACCESS_URL/complete/databricks"], "confidential": true, "name": "NAME", "scopes": ["sql", "offline_access"]}' ``` -Replacing the parameters with: +These parameters and descriptions will help you authenticate with your username and password: -| Config | Value | +| Parameter | Description | | ------ | ----- | | **USERNAME** | Your Databricks username (account admin level) | | **PASSWORD** | Your Databricks password (account admin level) | @@ -58,7 +58,7 @@ Now that you have an OAuth app set up in Databricks, you'll need to add the clie - on the left, select **Projects** under **Account Settings** - choose your project from the list - select **Connection** to edit the connection details - - add the `OAuth Client ID` and `OAuth Client Secret`` from the Databricks OAuth app under the **Optional Settings** section + - add the `OAuth Client ID` and `OAuth Client Secret` from the Databricks OAuth app under the **Optional Settings** section @@ -69,7 +69,7 @@ Once the Databricks connection via OAuth is set up for a dbt Cloud project, each - Click the gear icon at the top right and select **Profile settings**. - Select **Credentials**. - Choose your project from the list -- Select `OAuth` as the authentication method, save +- Select `OAuth` as the authentication method, and click **Save** - Finalize by clicking the **Connect Databricks Account** button From 27c204450ec7b4b07ea29d5fa9676f1bc07cc37c Mon Sep 17 00:00:00 2001 From: "Leona B. Campbell" <3880403+runleonarun@users.noreply.github.com> Date: Thu, 12 Oct 2023 17:22:51 -0700 Subject: [PATCH 10/10] Update website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md --- .../docs/docs/cloud/manage-access/set-up-databricks-oauth.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md index e6b68dd0987..679133b7844 100644 --- a/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md +++ b/website/docs/docs/cloud/manage-access/set-up-databricks-oauth.md @@ -48,7 +48,7 @@ These parameters and descriptions will help you authenticate with your username | **YOUR_ACCESS_URL** | The [appropriate Access URL](/docs/cloud/about-cloud/regions-ip-addresses) for your dbt Cloud account region and plan | | **NAME** | The integration name (i.e 'databricks-dbt-cloud') -The API response will include the `client_id` and `client_secret` required in the following step. At this time this is the only way to get the secret, the integration will need to be [deleted](https://docs.databricks.com/api/account/customappintegration/delete) and re-created if the secret is lost. +After running the `curl`, you'll get an API response that includes the `client_id` and `client_secret` required in the following section. At this time, this is the only way to retrieve the secret. If you lose the secret, then the integration needs to be [deleted](https://docs.databricks.com/api/account/customappintegration/delete) and re-created. ### Configure the Connection in dbt Cloud (dbt Cloud project admin)