我在 Azure 数据工厂中为 Azure SQL 数据库创建了链接服务。然后,我使用系统分配的身份在数据库中创建了一个用户。
CREATE USER [crestlinecapitalADF-preProd] FROM EXTERNAL PROVIDER
GO
sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'crestlinecapitalADF-preProd'
GO
sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'crestlinecapitalADF-preProd'
GO
sys.sp_addrolemember @rolename = N'db_ddladmin', @membername = N'crestlinecapitalADF-preProd'
GO
脚本没有返回错误。看起来用户已创建并且角色已成功授予。
当我尝试执行 ADF 管道将数据从文件加载到表中时,它返回一个错误,指出该表不存在或未授予正确的权限。我认为问题在于加载数据之前截断表所需的权限。我尝试将 db_owner 角色授予系统管理身份,但没有成功。
最终,我决定删除链接服务并重新创建它。我什至删除了数据库用户crestlinecapitalADF-preProd。然而,这一次,当我尝试执行相同的脚本时,它返回了以下错误:
消息 33134,16 级,状态 1,第 1 行校长 无法解析“crestlinecapitalADF-preProd”。错误信息: 'AADSTS500133:断言不在其有效时间范围内。确保 在用户使用访问令牌之前确保其未过期 断言,或请求新的令牌。当前时间: 2024-12-13T04:38:21.1607509Z,断言到期时间 2024-12-13T02:50:36.0000000Z.
我多次尝试更改链接服务,希望重新生成令牌,但问题仍未解决。
当我从 Azure SQL 中删除用户后尝试创建用户时,也遇到了相同的错误,如下所示:
导致错误的原因有多种,例如令牌颁发者与有效时间范围内的API版本不匹配、过期、格式错误、断言中的刷新令牌不是主刷新令牌等。当您删除用户令牌时,它就会过期,并且它会尝试仅使用该过期令牌连接新用户。
要解决此问题,您需要禁用 Azure 数据工厂的托管标识并再次启用它,然后尝试创建用户并为其分配角色