无法找到租户中Active Directory对象及KeyVault已存在问题求助
我之前帮朋友踩过Always Encrypted配置的坑,刚好遇到过类似的问题,给你梳理下针对性的解决思路:
问题1:提示“Cannot find the Active Directory object '' in tenant”
这个错误大概率是脚本里的AAD对象参数为空,或者身份验证/权限出了问题,按下面的步骤排查:
- 先检查你执行的Always Encrypted相关脚本,是不是有占位符没替换全?比如指定AAD主体(服务主体、用户)的参数(比如
-AzureADClientId)是不是留空了?空字符串的对象肯定找不到,把占位符换成实际的客户端ID或用户UPN再试。 - 验证当前PowerShell会话的身份能不能正常读取AAD对象:运行
Get-AzureADUser -Filter "UserPrincipalName eq '你的登录账号'"或者Get-AzureADServicePrincipal -Filter "AppId eq '你的服务主体ID'",如果能正常返回对象,说明身份和权限没问题;如果报错,先重新用Connect-AzureAD和Connect-AzureRmAccount登录,确保登录的是正确的租户。 - 如果用的是服务主体执行脚本,要确认这个服务主体已经在你的Azure租户里注册,并且给它分配了Key Vault的相关权限(比如密钥的创建、读取权限),不然也可能出现找不到对象的间接错误。
问题2:执行
New-AzureRmKeyVault提示“The specified vault already exists” 这个问题很明确,Key Vault的名称是全局唯一的,跨租户跨区域都不能重复,解决方法:
- 先确认这个Vault的状态:运行
Get-AzureRmKeyVault -VaultName "你的Vault名称",看看它是不是在你的订阅里,或者是不是其他订阅/租户里的同名Vault。 - 如果是你自己之前创建的,直接复用就行!把脚本里创建Vault的代码换成获取现有Vault的命令:
$keyVault = Get-AzureRmKeyVault -VaultName "你的Vault名称",后续的密钥创建步骤直接用这个$keyVault对象就行。 - 如果这个Vault不是你的,那就换个唯一的名称,比如在原名称后面加上区域后缀(比如
my-db-vault-eastus)或者项目标识,再执行创建命令。
额外小提示
配置Always Encrypted的时候,还要注意:
- SQL Server所在的环境(本地/云)要能访问到Key Vault,比如本地SQL Server需要在Key Vault的防火墙规则里添加本地IP段;
- 确保列主密钥和列密钥的关联逻辑正确,不要混淆了Key Vault里的密钥和SQL里的密钥对象。
内容的提问来源于stack exchange,提问作者user3520410
相关产品推荐
相关产品推荐

