本頁面說明如何使用客戶自行管理的 Microsoft Active Directory (也稱為客戶自行管理的 AD (CMAD)):
- 整合 SQL Server 適用的 Cloud SQL 與 CMAD。
- 使用 Active Directory (AD) 使用者連線至執行個體。
與 CMAD 整合的 Cloud SQL 執行個體除了 SQL 驗證外,也支援 Windows 驗證。
事前準備
- 在 Google Cloud 控制台中,選取專案名稱。
- 請確認您已為 Google Cloud 專案啟用計費功能。 瞭解如何確認專案已啟用計費功能。
- 安裝並初始化 gcloud CLI。
- 確認使用者帳戶具備 Cloud SQL 管理員角色。前往「Identity and Access Management (IAM)」頁面。
- 查看整合必要條件。
- 確認 Active Directory 複製功能正常運作。如果導入方式不正確,CMAD 整合可能會發生問題。
建立具備 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 使用者連線至執行個體,如下所示:
- 依據 Windows 使用者或群組建立 SQL Server 登入,如下所示:
CREATE LOGIN [domain\user_or_group] FROM WINDOWS
- 使用 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
- 以下範例說明如何透過私人 IP 連線:
如果使用執行個體 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 備用:
NTLM 是 Microsoft 的一組驗證安全性通訊協定。詳情請參閱「改用 NTLM 的原因」。
驗證 Windows 用戶端的 NTLM 備用機制
如要確認 NTLM 備用機制是否導致錯誤,請在 Windows 終端機中完成下列步驟:
- 使用要用的地端部署憑證登入。請勿使用
"Run as..."指令。 - 開啟命令提示字元。
- 執行
klist purge。 - 在 SSMS 中,嘗試使用 Windows 驗證連線至 SQL Server。
- 執行
klist,並檢查是否已針對傳回的錯誤發出票證, - 如果沒有這類票證,則錯誤可能是由 NTLM 備用機制造成。
- 如果存在這類票證,請確認 SQL Server 驅動程式未強制執行 NTLM 驗證。此外,請檢查是否透過群組原則強制執行 NTLM 驗證。
驗證 Linux 用戶端的 NTLM 備用機制
在 Ubuntu 16.04 中,請按照本節步驟確認 NTLM 備用機制是否導致錯誤。其他 Linux 發行版本的步驟也類似。
設定 Kerberos 驗證
- 設定 Kerberos 用戶端:
sudo apt-get install krb5-user
- 系統提示您輸入預設領域時,請輸入地端部署網域名稱,並使用大寫字母。
- 執行下列指令,安裝 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 驗證連線
- 執行 kinit 工具,如下所示:
kinit
- 如要使用 Windows 驗證連線,請執行下列指令:
/opt/mssql-tools/bin/sqlcmd -S
- 執行 klist 指令,並檢查是否已針對下列傳回訊息核發票證:
MSSQLSvc/:1433 @ domain
- 如果未核發票證,先前的錯誤可能表示發生導致 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 驗證是否適用於客戶代管網域的使用者。如果是,請完成下列步驟:
- 確認您使用的是 DNS 名稱。不支援使用信任關係連結的網域 IP 位址。
- 請確認您已完成「在兩個網域之間設定信任關係」中的步驟,包括開啟所有防火牆通訊埠。
- 驗證信任關係。
- 確認信任方向允許來自網域 (透過信任關係連結) 的使用者進行驗證。
- 請按照「為目錄同步處理作業準備不可轉送的網域」一文中的步驟操作。
- 確認信任關係在不使用 SQL Server 適用的 Cloud SQL 的情況下運作:
- 建立 Windows VM。
- 將其加入 CMAD 網域。
- 舉例來說,嘗試以透過信任關係連結的網域使用者身分執行記事本。
- 重新啟動用戶端 VM,並重新測試 Windows 驗證。
- 嘗試建立 SQL Server 登入時,可能會收到下列錯誤訊息:
這可能是因為系統不支援網域本機群組。如適用,請改用全域或通用群組。
- 如果 SQL Server 查詢導致下列錯誤,請注意,系統不支援透過信任關係連結的網域使用者 IP 位址:
以下操作或許能解決這個問題:
- 如果 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 角色和權限」。 |