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

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

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

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

事前準備

建立使用 Windows 驗證的執行個體

您可以在建立執行個體時與 CMAD 整合,方法是為執行個體啟用 Windows 驗證。如要整合,請選擇執行個體要加入的網域。如果加入網域失敗,執行個體建立作業也會失敗。

準備建立使用 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

更改下列內容:

  • :要建立的 SQL Server 適用的 Cloud SQL 執行個體名稱。INSTANCE_NAME
  • 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:是要使用的密鑰。
  • 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
  • :要建立的 SQL Server 適用的 Cloud SQL 執行個體名稱。INSTANCE_NAME
  • 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:是要使用的密鑰。
  • 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
  • :要建立的 SQL Server 適用的 Cloud SQL 執行個體名稱。INSTANCE_NAME
  • 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:是要使用的密鑰。
  • 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

更改下列內容:

  • :要更新的 SQL Server 適用的 Cloud SQL 執行個體名稱。INSTANCE_NAME
  • 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 執行個體,請使用 PATCH 要求搭配 users:insert 方法。

使用任何要求資料之前,請先替換以下項目:

  • 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 執行個體,請使用 PATCH 要求搭配 users:insert 方法。

使用任何要求資料之前,請先替換以下項目:

  • 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

更改下列內容:

  • :要修改的 SQL Server 適用的 Cloud SQL 執行個體名稱。INSTANCE_NAME
  • 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,預設 usersqlserver

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

  1. 根據 Windows 使用者或群組建立 SQL Server 登入,如下所示:
          CREATE LOGIN [domain\user_or_group] FROM WINDOWS
        
  2. 使用執行個體 DNS 名稱,透過 Windows 驗證登入執行個體。以下是可指定的執行個體 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
              

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

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

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

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

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

Windows 驗證步驟

如要瞭解啟動 Cloud SQL 驗證 Proxy 的背景資訊,請參閱「啟動 Cloud SQL 驗證 Proxy」。

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

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

在本機執行 Cloud SQL 驗證 Proxy

如果您在本機執行 Cloud SQL 驗證 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 驗證 Proxy,並在 127.0.0.1:1433 上提供該 Proxy:

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

在非本機執行 Cloud SQL 驗證 Proxy

如要從外部執行 Cloud SQL 驗證 Proxy,請按照「在本機執行 Cloud SQL 驗證 Proxy」一節中的操作說明,但使用主機檔案中的不同項目。

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

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

排解用戶端 NTLM 回退問題

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

Cloud SQL 不支援 NTLM 驗證,但部分 Kerberos 用戶端可能會嘗試改用這種驗證方式。如本節所述,如果您嘗試使用 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 回溯

如要從 Windows 終端機確認 NTLM 回退是否導致錯誤,請完成下列步驟:

  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 驗證將無法運作。如要使用 Windows 驗證連線,請只使用從 Google Cloud 控制台取得的 FQDN 或 IP 位址。

為內部部署 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,並一律使用相同的 DNS 名稱連線至 SQL Server 適用的 Cloud SQL,因為您會在 Google Cloud 控制台中看到該名稱。
  • 如果執行個體持續發生 Windows 驗證問題 (無論執行個體最近是否更新),請嘗試從網域取消加入執行個體,然後重新加入。如要這麼做,請使用更新程序取消加入網域,然後重新加入網域。這麼做不會移除資料庫中任何現有的 Windows 驗證使用者或登入資訊。不過,移除 Windows 驗證會導致執行個體重新啟動
  • 使用 AD 診斷工具 排解客戶管理網域和 Cloud SQL for SQL Server 執行個體的 AD 設定問題, 這些執行個體位於 Google Cloud 控制台中。略過與 Managed Microsoft AD 相關的步驟。

疑難排解

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

如果發生這個錯誤... 問題可能出在... 試試這個方法...
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://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://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.getIamPolicysecretmanager.secrets.setIamPolicy 權限的自訂角色,並指派給這個專案的服務代理。詳情請參閱「Secret Manager 角色和權限」。

後續步驟