上一节,我们解决了 Azure Storage Emulator 自定义监听地址的问题,这远远不够,因为在我们 DEV/QA 环境有各自的 SQL Server Instance,我们需要将 ASE 的数据库建到各自的 Instance 中。

  先来看下 AzureStorageEmulator.exe help init 的结果:

在 Windows Server Container 中运行 Azure Storage Emulator(二):使用自定义的 SQL Server Instance-LMLPHP

  呃,No way to set SQL Server connection string。这么看来,使用 Windows 身份验证是必须的了。不同服务器使用 Windows 身份验证有几种方法,一是使用 NTLM 身份验证,这个比较简单,两台服务器都设置一个相同的帐户,密码也一样,然后在 SQL Server 中给这个帐户一个 login 就行了。然后 ASE 要以这个帐户的身份运行,init 时指定 instance 就满足了所有条件。

  有 AD 的话就舒服了,在 AD 上添加一个用户,然后 SQL Server 给这个帐户一个 login,ASE 以这个帐户的身份运行,就一切 OK 了。

  但这两种方法都不是我想要的,因为……我要将 ASE 运行在容器中。而在容器中运行 ASE 且使用 Windows 身份验证,只有一种方法,那就是 gMSA。那么,要上 PS 大法了(啥?PhotoShop?no no no,PowerShell):

New-ADServiceAccount -Name AseSvc -DNSHostName ase.contoso.com -PrincipalsAllowedToRetrieveManagedPassword [ASE-HOST$] -KerberosEncryptionType RC4, AES128, AES256

  在运行 ASE 的服务器上(ASE-HOST):

Install-WindowsFeature RSAT-AD-PowerShell
Install-ADServiceAccount AseSvc
Test-AdServiceAccount AseSvc

  输出“True”表示 gMSA 已经 ready 了(有关创建 gMSA 的详细信息,见我另一篇博文《在 Windows 容器中使用 gMSA》)。

  下面,在 SQL Server 中添加 login:

在 Windows Server Container 中运行 Azure Storage Emulator(二):使用自定义的 SQL Server Instance-LMLPHP

  OK,万事俱备,只欠东风,下一节,我们就要把 ASE 运行在容器中了。

05-11 22:06