使用客戶自行管理的 Microsoft Active Directory (CMAD)

本頁面說明如何使用客戶自行管理的 Microsoft Active Directory (也稱為客戶自行管理的 AD (CMAD)):

  • 整合 SQL Server 適用的 Cloud SQL 與 CMAD。
  • 使用 Active Directory (AD) 使用者連線至執行個體。

與 CMAD 整合的 Cloud SQL 執行個體除了 SQL 驗證外,也支援 Windows 驗證。

事前準備

建立具備 Windows 驗證功能的執行個體

您可以在建立執行個體時,為執行個體啟用 Windows 驗證,藉此與 CMAD 整合。如要整合,請選擇要加入執行個體的網域。如果無法加入網域,就無法建立執行個體。

在準備建立啟用 Windows 驗證的執行個體時,請參閱提示和限制與替代方案。

雖然您可以選擇使用公開 IP,但 Cloud SQL 執行個體也必須能存取私人 IP。

請使用下列任一選項,建立與 CMAD 整合的執行個體,並啟用 Windows 驗證。如要瞭解建立執行個體的基本指令,請參閱「建立執行個體」。

gcloud

如要建立具備 CMAD 的執行個體,請執行下列指令:

  gcloud sql instances create INSTANCE_NAME \
  --database-version=DATABASE_VERSION \
  --root-password=PASSWORD \
  --active-directory-domain=DOMAIN \
  --active-directory-mode=CUSTOMER_MANAGED_ACTIVE_DIRECTORY \
  --active-directory-organizational-unit="OU=CLOUD_OU,DC=DC1,DC=DC2" \
  --active-directory-secret-manager-key=projects/PROJECT_ID/secrets/SECRET_NAME \
  --active-directory-dns-servers=IP1,IP2 \
  --cpu=CPU \
  --memory=MEMORY  \
  --network=NETWORK

更改下列內容:

  • INSTANCE_NAME:要建立的 SQL Server 適用的 Cloud SQL 執行個體名稱。
  • DATABASE_VERSION:要使用的資料庫版本,例如 SQLSERVER_2019_STANDARD。
  • DOMAIN:要使用的網域名稱,例如 myaddomain.com。
  • CUSTOMER_MANAGED_ACTIVE_DIRECTORY:表示網域的模式。如果網域是由 Google 建立及擁有,請輸入 MANAGED_ACTIVE_DIRECTORY。 如果網域是由使用者建立及擁有,請輸入 CUSTOMER_MANAGED_ACTIVE_DIRECTORY。
  • CLOUD_OU:要使用的組織單位名稱。例如,CLOUDOU。您可以視需要輸入多個組織單位。
  • DC1:用於組織單位辨別名稱的第一個網域元件。例如,DOMAIN。您可以視需要輸入多個網域元件。
  • DC2:用於組織單位辨別名稱的第二個網域元件。例如,COM。--active-directory-organizational-unit 旗標的完整值可能如下所示:"OU=CLOUDOU,DC=DOMAIN,DC=COM"。您可以視需要輸入多個網域元件。
  • PROJECT_ID:執行個體所在的專案 ID。
  • SECRET_NAME:要使用的 Secret。
  • IP1:要使用的第一個 DNS 伺服器 IP 位址,例如 10.20.30.40。您可以視需要輸入多個 IP 位址。
  • IP2:要使用的第二個 DNS 伺服器 IP 位址,例如 20.30.40.50。您可以視需要輸入多個 IP 位址。
  • CPU:要指派給執行個體的 CPU 數量。
  • MEMORY:要指派給執行個體的記憶體容量。
  • NETWORK:執行個體要連線的網路名稱,例如 projects/my-gcp-project-123/global/networks/my-production-vpc。

REST v1

如要建立具備 CMAD 的執行個體,請使用 users:insert 方法傳送 POST 要求。

使用任何要求資料之前,請先修改下列項目的值:

更改下列內容:

  • DATABASE_VERSION:要使用的資料庫版本,例如 SQLSERVER_2019_STANDARD。
  • INSTANCE_NAME:要建立的 SQL Server 適用的 Cloud SQL 執行個體名稱。
  • REGION:要存放執行個體的區域,例如 us-central1。
  • PASSWORD:執行個體的密碼。
  • MACHINE_TYPE:要用於執行個體的機器類型,例如 db-n1-standard-8。
  • NETWORK:執行個體要連線的網路名稱,例如 projects/my-gcp-project-123/global/networks/my-production-vpc。
  • DOMAIN:要使用的網域名稱,例如 myaddomain.com。
  • CUSTOMER_MANAGED_ACTIVE_DIRECTORY:表示網域的模式。如果網域是由 Google 建立及擁有,請輸入 MANAGED_ACTIVE_DIRECTORY。 如果網域是由使用者建立及擁有,請輸入 CUSTOMER_MANAGED_ACTIVE_DIRECTORY。
  • CLOUD_OU:要使用的組織單位名稱。例如,CLOUDOU。您可以視需要輸入多個組織單位。
  • DC1:用於組織單位辨別名稱的第一個網域元件。例如,DOMAIN。您可以視需要輸入多個網域元件。
  • DC2:用於組織單位辨別名稱的第二個網域元件。例如,COM。--active-directory-organizational-unit 旗標的完整值可能如下所示:"OU=CLOUDOU,DC=DOMAIN,DC=COM"。您可以視需要輸入多個網域元件。
  • PROJECT_ID:執行個體所在的專案 ID。
  • SECRET_NAME:要使用的 Secret。
  • IP1:要使用的第一個 DNS 伺服器 IP 位址,例如 10.20.30.40。您可以視需要輸入多個 IP 位址。
  • IP2:要使用的第二個 DNS 伺服器 IP 位址,例如 20.30.40.50。您可以視需要輸入多個 IP 位址。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID

JSON 要求主體:

{
   "databaseVersion":"DATABASE_VERSION",
   "name":"INSTANCE_NAME",
   "region":"REGION",
   "rootPassword":"PASSWORD",
   "settings":{
      "tier":"MACHINE-TYPE",
      "ipConfiguration":{
         "privateNetwork":"NETWORK"
      },
      "activeDirectoryConfig":{
         "domain":"DOMAIN"
         "mode": "CUSTOMER_MANAGED_ACTIVE_DIRECTORY",
         "organizational_unit":"OU=CLOUDOU,DC=DC1,DC=DC2"
         "admin_credential_secret_name":"projects/PROJECT_ID/secrets/SECRET_NAME"
         "dns_servers":"IP1,IP2"
      }
   }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

如要建立具備 CMAD 的執行個體,請使用 users:insert 方法傳送 POST 要求。

使用任何要求資料之前,請先修改下列項目的值:

更改下列內容:

  • DATABASE_VERSION:要使用的資料庫版本,例如 SQLSERVER_2019_STANDARD。
  • INSTANCE_NAME:要建立的 SQL Server 適用的 Cloud SQL 執行個體名稱。
  • REGION:要存放執行個體的區域,例如 us-central1。
  • PASSWORD:執行個體的密碼。
  • MACHINE_TYPE:要用於執行個體的機器類型,例如 db-n1-standard-8。
  • NETWORK:執行個體要連線的網路名稱,例如 projects/my-gcp-project-123/global/networks/my-production-vpc。
  • DOMAIN:要使用的網域名稱,例如 myaddomain.com。
  • CUSTOMER_MANAGED_ACTIVE_DIRECTORY:表示網域的模式。如果網域是由 Google 建立及擁有,請輸入 MANAGED_ACTIVE_DIRECTORY。 如果網域是由使用者建立及擁有,請輸入 CUSTOMER_MANAGED_ACTIVE_DIRECTORY。
  • CLOUD_OU:要使用的組織單位名稱。例如,CLOUDOU。您可以視需要輸入多個組織單位。
  • DC1:用於組織單位辨別名稱的第一個網域元件。例如,DOMAIN。您可以視需要輸入多個網域元件。
  • DC2:用於組織單位辨別名稱的第二個網域元件。例如,COM。--active-directory-organizational-unit 旗標的完整值可能如下所示:"OU=CLOUDOU,DC=DOMAIN,DC=COM"。您可以視需要輸入多個網域元件。
  • PROJECT_ID:執行個體所在的專案 ID。
  • SECRET_NAME:要使用的 Secret。
  • IP1:要使用的第一個 DNS 伺服器 IP 位址,例如 10.20.30.40。您可以視需要輸入多個 IP 位址。
  • IP2:要使用的第二個 DNS 伺服器 IP 位址,例如 20.30.40.50。您可以視需要輸入多個 IP 位址。

HTTP 方法和網址:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

JSON 要求主體:

{
   "databaseVersion":"DATABASE_VERSION",
   "name":"INSTANCE_NAME",
   "region":"REGION",
   "rootPassword":"PASSWORD",
   "settings":{
      "tier":"MACHINE-TYPE",
      "ipConfiguration":{
         "privateNetwork":"NETWORK"
      },
      "activeDirectoryConfig":{
         "domain":"DOMAIN"
         "mode": "CUSTOMER_MANAGED_ACTIVE_DIRECTORY",
         "organizational_unit":"OU=CLOUDOU,DC=DC1,DC=DC2"
         "admin_credential_secret_name":"projects/PROJECT_ID/secrets/SECRET_NAME"
         "dns_servers":"IP1,IP2"
      }
   }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME",
  "status": "RUNNING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "startTime": "2023-06-14T18:48:35.499Z",
  "operationType": "CREATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

更新執行個體並啟用 Windows 驗證

您可以更新現有執行個體的網域,例如變更或新增網域。

如需更新執行個體的一般資訊,請參閱「編輯執行個體」。

如果執行個體目前已加入 CMAD 網域,則會先退出該網域,再加入新網域。如果更新失敗,執行個體可能不會再加入任何網域。

gcloud

以下是更新現有執行個體的指令範例。這個指令會新增或取代網域。將 --active-directory-domain=DOMAIN 傳遞至指令,如下所示:

  gcloud sql instances patch INSTANCE_NAME \
  --active-directory-domain=DOMAIN \
  --active-directory-mode=CUSTOMER_MANAGED_ACTIVE_DIRECTORY \
  --active-directory-organizational-unit="OU=CLOUDOU,DC=DOMAIN,DC=COM" \
  --active-directory-secret-manager-key=projects/PROJECT_ID/secrets/SECRET_NAME \
  --active-directory-dns-servers=IP1,IP2

更改下列內容:

  • INSTANCE_NAME:要更新的 SQL Server 適用的 Cloud SQL 執行個體名稱。
  • DOMAIN:要使用的網域名稱,例如 myaddomain.com。
  • CUSTOMER_MANAGED_ACTIVE_DIRECTORY:表示網域的模式。如果網域是由 Google 建立及擁有,請輸入 MANAGED_ACTIVE_DIRECTORY。 如果網域是由使用者建立及擁有,請輸入 CUSTOMER_MANAGED_ACTIVE_DIRECTORY。
  • CLOUD_OU:要使用的組織單位名稱。例如,CLOUDOU。您可以視需要輸入多個組織單位。
  • DC1:用於組織單位辨別名稱的第一個網域元件。例如,DOMAIN。您可以視需要輸入多個網域元件。
  • DC2:用於組織單位辨別名稱的第二個網域元件。例如,COM。--active-directory-organizational-unit 旗標的完整值可能如下所示:"OU=CLOUDOU,DC=DOMAIN,DC=COM"。您可以視需要輸入多個網域元件。
  • PROJECT_ID:執行個體所在的專案 ID。
  • SECRET_NAME:與執行個體相關聯的密鑰。
  • IP1:要使用的第一個 DNS 伺服器 IP 位址,例如 10.20.30.40。您可以視需要輸入多個 IP 位址。
  • IP2:要使用的第二個 DNS 伺服器 IP 位址,例如 20.30.40.50。您可以視需要輸入多個 IP 位址。

REST v1

如要更新 CMAD 執行個體,請使用 users:insert 方法傳送 PATCH 要求。

使用任何要求資料之前,請先修改下列項目的值:

  • DOMAIN:要使用的網域名稱,例如 myaddomain.com。
  • CUSTOMER_MANAGED_ACTIVE_DIRECTORY:表示網域的模式。如果網域是由 Google 建立及擁有,請輸入 MANAGED_ACTIVE_DIRECTORY。 如果網域是由使用者建立及擁有,請輸入 CUSTOMER_MANAGED_ACTIVE_DIRECTORY。
  • CLOUD_OU:要使用的組織單位名稱。例如,CLOUDOU。您可以視需要輸入多個組織單位。
  • DC1:用於組織單位辨別名稱的第一個網域元件。例如,DOMAIN。您可以視需要輸入多個網域元件。
  • DC2:用於組織單位辨別名稱的第二個網域元件。例如,COM。--active-directory-organizational-unit 旗標的完整值可能如下所示:"OU=CLOUDOU,DC=DOMAIN,DC=COM"。您可以視需要輸入多個網域元件。
  • PROJECT_ID:執行個體所在的專案 ID。
  • SECRET_NAME:與執行個體相關聯的密鑰。
  • IP1:要使用的第一個 DNS 伺服器 IP 位址,例如 10.20.30.40。您可以視需要輸入多個 IP 位址。
  • IP2:要使用的第二個 DNS 伺服器 IP 位址,例如 20.30.40.50。您可以視需要輸入多個 IP 位址。

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_ID

JSON 要求主體:

{
    "settings":{
        "activeDirectoryConfig":{
          "domain":"DOMAIN"
          "mode": "CUSTOMER_MANAGED_ACTIVE_DIRECTORY",
          "organizational_unit":"OU=CLOUDOU,DC=DC1,DC=DC2"
          "admin_credential_secret_name":"projects/PROJECT_ID/secrets/SECRET_NAME"
          "dns_servers":"IP1,IP2"
        }
    }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

如要更新 CMAD 執行個體,請使用 users:insert 方法傳送 PATCH 要求。

使用任何要求資料之前,請先修改下列項目的值:

  • DOMAIN:要使用的網域名稱,例如 myaddomain.com。
  • CUSTOMER_MANAGED_ACTIVE_DIRECTORY:表示網域的模式。如果網域是由 Google 建立及擁有,請輸入 MANAGED_ACTIVE_DIRECTORY。 如果網域是由使用者建立及擁有,請輸入 CUSTOMER_MANAGED_ACTIVE_DIRECTORY。
  • CLOUD_OU:要使用的組織單位名稱。例如,CLOUDOU。您可以視需要輸入多個組織單位。
  • DC1:用於組織單位辨別名稱的第一個網域元件。例如,DOMAIN。您可以視需要輸入多個網域元件。
  • DC2:用於組織單位辨別名稱的第二個網域元件。例如,COM。--active-directory-organizational-unit 旗標的完整值可能如下所示:"OU=CLOUDOU,DC=DOMAIN,DC=COM"。您可以視需要輸入多個網域元件。
  • PROJECT_ID:執行個體所在的專案 ID。
  • SECRET_NAME:與執行個體相關聯的密鑰。
  • IP1:要使用的第一個 DNS 伺服器 IP 位址,例如 10.20.30.40。您可以視需要輸入多個 IP 位址。
  • IP2:要使用的第二個 DNS 伺服器 IP 位址,例如 20.30.40.50。您可以視需要輸入多個 IP 位址。

HTTP 方法和網址:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID

JSON 要求主體:

{
    "settings":{
        "activeDirectoryConfig":{
          "domain":"DOMAIN"
          "mode": "CUSTOMER_MANAGED_ACTIVE_DIRECTORY",
          "organizational_unit":"OU=CLOUDOU,DC=DC1,DC=DC2"
          "admin_credential_secret_name":"projects/PROJECT_ID/secrets/SECRET_NAME"
          "dns_servers":"IP1,IP2"
        }
    }
}

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "UPDATE",
  "name": "OPERATION_ID",
  "targetId": "INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

在 Managed Service for Microsoft Active Directory 和 CMAD 之間遷移

如要將執行個體從與 Managed Microsoft AD 整合,遷移至與 CMAD 整合,請使用下列 gcloud CLI 指令:

  gcloud sql instances patch INSTANCE_NAME \
  --active-directory-domain=DOMAIN \
  --active-directory-mode=CUSTOMER_MANAGED_ACTIVE_DIRECTORY \
  --active-directory-organizational-unit="OU=CLOUDOU,DC=DOMAIN,DC=COM" \
  --active-directory-secret-manager-key=projects/PROJECT_ID/secrets/SECRET_NAME \
  --active-directory-dns-servers=IP1,IP2

更改下列內容:

  • INSTANCE_NAME:要修改的 SQL Server 適用的 Cloud SQL 執行個體名稱。
  • DOMAIN:要使用的網域名稱,例如 myaddomain.com。
  • CUSTOMER_MANAGED_ACTIVE_DIRECTORY:表示網域的模式。如果網域是由 Google 建立及擁有,請輸入 MANAGED_ACTIVE_DIRECTORY。 如果網域是由使用者建立及擁有,請輸入 CUSTOMER_MANAGED_ACTIVE_DIRECTORY。
  • CLOUD_OU:要使用的組織單位名稱。例如,CLOUDOU。您可以視需要輸入多個組織單位。
  • DC1:用於組織單位辨別名稱的第一個網域元件。例如,DOMAIN。您可以視需要輸入多個網域元件。
  • DC2:用於組織單位辨別名稱的第二個網域元件。例如,COM。--active-directory-organizational-unit 旗標的完整值可能如下所示:"OU=CLOUDOU,DC=DOMAIN,DC=COM"。您可以視需要輸入多個網域元件。
  • PROJECT_ID:執行個體所在的專案 ID。
  • SECRET_NAME:與執行個體相關聯的密鑰。
  • IP1:要使用的第一個 DNS 伺服器 IP 位址,例如 10.20.30.40。您可以視需要輸入多個 IP 位址。
  • IP2:要使用的第二個 DNS 伺服器 IP 位址,例如 20.30.40.50。您可以視需要輸入多個 IP 位址。

以使用者身分連線至執行個體

如果是 SQL Server 適用的 Cloud SQL,預設使用者為 sqlserver。

將執行個體與 CMAD 整合後,您可以使用 sqlserver 使用者連線至執行個體,如下所示:

  1. 依據 Windows 使用者或群組建立 SQL Server 登入,如下所示:
          CREATE LOGIN [domain\user_or_group] FROM WINDOWS
        
  2. 使用 Windows 驗證和執行個體 DNS 名稱登入執行個體。可指定的執行個體 DNS 名稱範例如下:
    • 以下範例說明如何透過私人 IP 連線:
            private.myinstance.us-central1.myproject.cloudsql.mydomain.com
            
    • 顯示透過公開 IP 連線的範例:
              public.myinstance.us-central1.myproject.cloudsql.mydomain.com
              
    • 以下範例說明如何透過 Cloud SQL Auth Proxy 連線:
              proxy.myinstance.us-central1.myproject.cloudsql.mydomain.com
              

      詳情請參閱「搭配使用 Cloud SQL Auth Proxy 和 Windows 驗證」。

如果使用執行個體 IP 位址,則必須設定 Kerberos 用戶端,支援 IP 主機名稱。Cloud SQL 不支援使用透過信任關係連結的網域 IP 位址登入。

搭配使用 Cloud SQL Auth Proxy 和 Windows 驗證

您可以搭配 CMAD 整合使用 Cloud SQL Auth Proxy。

開始之前,請先詳閱下列事項:

Windows 驗證步驟

如要瞭解如何啟動 Cloud SQL Auth Proxy,請參閱「啟動 Cloud SQL Auth Proxy」。

如要使用 Windows 驗證,必須在通訊埠 1433 執行 Cloud SQL Auth Proxy。如要將預先定義的服務主體名稱 (SPN) 項目對應至 Cloud SQL Auth Proxy 位址,請使用下列指令:

Proxy.[instance].[location].[project].cloudsql.[domain]

在本機執行 Cloud SQL Auth Proxy

如果您在本機執行 Cloud SQL Auth Proxy,請使用主機檔案將下列項目對應至 127.0.0.1:

Proxy.[instance].[location].[project].cloudsql.[domain]

舉例來說,您可以在主機檔案 (例如 c:\windows\system32\drivers\etc\hosts) 中新增下列內容:

127.0.0.1 proxy.[instance].[location].[project].cloudsql.[domain]

在該範例中,您可以使用下列指令執行 Cloud SQL Auth Proxy,並在 127.0.0.1:1433 上提供:

cloud-sql-proxy.exe --credentials-file credential.json project:name

在非本機環境執行 Cloud SQL Auth Proxy

如要在外部執行 Cloud SQL Auth Proxy,請按照「在本機執行 Cloud SQL Auth Proxy」中的操作說明進行,但請使用主機檔案中的其他項目。

具體來說,如果非本機主機是 MyOtherHost,您可以在主機檔案中新增下列內容:

127.0.0.1 MyOtherHost proxy.[instance].[location].[project].cloudsql.[domain]

排解用戶端 NTLM 備用機制問題

如果您使用 Windows 驗證和執行個體 IP 位址登入執行個體,則必須設定 Kerberos 用戶端,以支援 IP 主機名稱。

Cloud SQL 不支援 NTLM 驗證,但部分 Kerberos 用戶端可能會嘗試改用 NTLM 驗證。如本節所述,如果您嘗試使用 SQL Server Management Studio (SSMS) 連線,並出現下列錯誤訊息,可能的原因是 NTLM 備用:

Login failed. The login is from an untrusted domain and cannot be used with
Integrated authentication. (Microsoft SQL Server, Error: 18452)

NTLM 是 Microsoft 的一組驗證安全性通訊協定。詳情請參閱「改用 NTLM 的原因」。

驗證 Windows 用戶端的 NTLM 備用機制

如要確認 NTLM 備用機制是否導致錯誤,請在 Windows 終端機中完成下列步驟:

  1. 使用要用的地端部署憑證登入。請勿使用 "Run as..." 指令。
  2. 開啟命令提示字元。
  3. 執行 klist purge。
  4. 在 SSMS 中,嘗試使用 Windows 驗證連線至 SQL Server。
  5. 執行 klist,並檢查是否已針對傳回的錯誤發出票證,
    MSSQLSvc/
    :1433 @ domain.
  6. 如果沒有這類票證,則錯誤可能是由 NTLM 備用機制造成。
  7. 如果存在這類票證,請確認 SQL Server 驅動程式未強制執行 NTLM 驗證。此外,請檢查是否透過群組原則強制執行 NTLM 驗證。

驗證 Linux 用戶端的 NTLM 備用機制

在 Ubuntu 16.04 中,請按照本節步驟確認 NTLM 備用機制是否導致錯誤。其他 Linux 發行版本的步驟也類似。

設定 Kerberos 驗證

  1. 設定 Kerberos 用戶端:
          sudo apt-get install krb5-user
        
  2. 系統提示您輸入預設領域時,請輸入地端部署網域名稱,並使用大寫字母。
  3. 執行下列指令,安裝 SQL Server 指令列工具:
          curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
          curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
          sudo apt-get update
          sudo apt-get install mssql-tools unixodbc-dev
        

使用 Windows 驗證連線

  1. 執行 kinit 工具,如下所示:
        kinit 
        
  2. 如要使用 Windows 驗證連線,請執行下列指令:
        /opt/mssql-tools/bin/sqlcmd -S 
  3. 執行 klist 指令,並檢查是否已針對下列傳回訊息核發票證:
        MSSQLSvc/
    :1433 @ domain
  4. 如果未核發票證,先前的錯誤可能表示發生導致 NTLM 備用機制的問題。

改用 NTLM 的原因

備用 NTLM 是用戶端設定錯誤,可能與下列情況有關:

  • 根據預設,如果主機名稱是 IP 位址,Windows 不會嘗試對主機進行 Kerberos 驗證。如要為 IP 位址啟用 Kerberos 驗證,請嘗試Microsoft 說明文件所述的方法。
  • 無法透過外部信任進行 Kerberos 驗證。改用樹系信任。
  • Kerberos 驗證需要名稱尾碼轉送,才能在其他樹系中尋找服務。請嘗試在兩個網域之間設定信任關係一文所述的方法。
  • 如果服務未註冊 SPN,Kerberos 驗證就無法運作。請務必使用從 Google Cloud 控制台取得的 FQDN 或 IP 位址,透過 Windows 驗證連線。

為地端部署 AD 使用者建立 Windows 登入資訊

請按照 CREATE LOGIN 操作說明,為地端部署使用者建立 Windows 登入資訊。例如,指定類似下列的指令:

CREATE LOGIN [DOMAIN_NAME\USER_NAME] FROM WINDOWS

搭配 Cloud SQL 使用 CMAD 的訣竅

  • 只要執行個體同時具有私人 IP,就支援公開 IP。執行個體必須啟用私人 IP。接著,只要公開 IP 和私人 IP 都可用,您就能選擇使用其中一種連線至執行個體。
  • 建立執行個體 (包括替換執行個體) 前,請先詳閱下列資訊:
  • 如果 Windows 驗證無法從透過信任關係連結的網域執行,請確認 Windows 驗證是否適用於客戶代管網域的使用者。如果是,請完成下列步驟:
    1. 確認您使用的是 DNS 名稱。不支援使用信任關係連結的網域 IP 位址。
    2. 請確認您已完成「在兩個網域之間設定信任關係」中的步驟,包括開啟所有防火牆通訊埠。
    3. 驗證信任關係。
    4. 確認信任方向允許來自網域 (透過信任關係連結) 的使用者進行驗證。
    5. 請按照「為目錄同步處理作業準備不可轉送的網域」一文中的步驟操作。
    6. 確認信任關係在不使用 SQL Server 適用的 Cloud SQL 的情況下運作:
      1. 建立 Windows VM。
      2. 將其加入 CMAD 網域。
      3. 舉例來說,嘗試以透過信任關係連結的網域使用者身分執行記事本。
    7. 重新啟動用戶端 VM,並重新測試 Windows 驗證。
  • 嘗試建立 SQL Server 登入時,可能會收到下列錯誤訊息:
        Windows NT user or group domain\name not found. Check the name again.
        

    這可能是因為系統不支援網域本機群組。如適用,請改用全域或通用群組。

  • 如果 SQL Server 查詢導致下列錯誤,請注意,系統不支援透過信任關係連結的網域使用者 IP 位址:
        The login is from an untrusted domain.
        

    以下操作或許能解決這個問題:

    • 如果 IP 位址用於連線受管理網域的使用者,請按照 Microsoft 說明文件中的指示操作。
    • 請避免使用任何 Proxy,並一律使用 Google Cloud 控制台顯示的相同 DNS 名稱,連線至 SQL Server 適用的 Cloud SQL。
  • 如果執行個體持續發生 Windows 驗證問題 (無論執行個體是否最近更新),請嘗試將其從網域中取消加入,然後重新加入。方法是使用更新程序取消加入網域,然後重新加入。這麼做不會移除資料庫中任何現有的 Windows 驗證使用者或登入資訊。不過,移除 Windows 驗證會導致執行個體重新啟動。
  • 使用客戶自行管理的 Active Directory 診斷工具,排解客戶自行管理網域的 Active Directory 設定問題。

疑難排解

下表列出常見的錯誤訊息和解決方式:

如果發生這項錯誤... 問題可能出在... 不如說
Per-product, per-project Service Account (P4 SA) not found for project. 服務帳戶名稱不正確。 在 「Service Accounts」(服務帳戶) 頁面中,確認您已為正確的使用者專案建立服務帳戶。
The operation completed but an update to Active Directory failed. You may experience issues with Windows Authentication on this instance, please see https://docs.cloud.google.com/sql/docs/sqlserver/configure-cmad for tips. 無法在 CMAD 網域執行必要更新。 如果 Windows 驗證發生問題,可以嘗試退出 CMAD 網域,然後重新加入。方法是使用更新程序取消加入網域,然後重新加入。這麼做不會移除資料庫中任何現有的 Windows 驗證使用者或登入資訊。不過,移除 Windows 驗證會導致執行個體重新啟動。
This instance would need new network architecture to support Active Directory. See https://docs.cloud.google.com/sql/docs/sqlserver/configure-cmad." 這個執行個體未使用新的網路架構。 將執行個體升級為新版網路架構。
Admin credential secret name / Organizational unit / DNS Server names is required or Invalid Admin credential secret name / OrganizationalUnit / DNS Server names provided. 管理員憑證、組織單位和 DNS 伺服器為必要參數。 請指定這些參數,然後重試要求。
Integration failed due to insufficient permissions. The Service Agent for this project must be granted the secretmanager.secrets.getIamPolicy and secretmanager.secrets.setIamPolicy permissions on the provided admin credential key in Secret Manager. 這項專案的服務代理缺少必要權限。 建立具備 secretmanager.secrets.getIamPolicy 和 secretmanager.secrets.setIamPolicy 權限的自訂角色,並指派給這項專案的服務代理。詳情請參閱「Secret Manager 角色和權限」。

後續步驟