如果用户是用户分配托管标识,则确定 Azure SQL Server 中的用户名

Posted

技术标签:

【中文标题】如果用户是用户分配托管标识,则确定 Azure SQL Server 中的用户名【英文标题】:Determine Username in Azure SQL Server if user is a User assigend managed identity 【发布时间】:2021-05-20 05:47:58 【问题描述】:

我使用来自 web 应用的用户分配的托管标识连接 Azure SQL Server。到目前为止,这工作正常,我们的日志记录过程应在数据库中记录此应用程序(和其他应用程序)的所有活动。

要确定当前执行用户的用户名,我通常可以在任何存储过程中使用类似

SELECT @ORIGINAL_LOGIN()

这将返回连接用户的用户名。

在我的例子中,托管身份的用户名是“octservice”。但是,当“octservice”连接并记录其活动时,@ORIGINAL_LOGIN() 函数不会返回其用户名,它会从 Azure AD 返回类似 ClientID@TenantID 的内容。

我怎样才能确定用户名,就像它出现在 SSMS 中一样? ClientID@TenantID 不是该用户的 USER_ID。

【问题讨论】:

您可能需要CURRENT_USER,它返回USER LOGIN 在当前连接的数据库中使用。 不,我试过了 - CURRENT_USER 还会返回我的 ClientID@TenantID 而不是用户名(在我的示例中为“octservice”)。 【参考方案1】:

试试SELECT SYSTEM_USER()?它是SUSER_SNAME() 的同义词。我已经看到它在托管身份方面被引用过一次或两次。

【讨论】:

System_User 在这种情况下没有帮助,它返回了相同的 ClientID@TenantID

以上是关于如果用户是用户分配托管标识,则确定 Azure SQL Server 中的用户名的主要内容,如果未能解决你的问题,请参考以下文章

具有用户分配的托管标识的 Azure SQL 数据库连接池

使用自动化帐户中用户分配的托管标识连接到 Azure 存储帐户(使用 Azure RM 模块)

如何使用用户分配的托管标识访问 Azure 中 Function App Config 的 Key Vault

如何获取Azure App Service的特定用户分配的托管服务标识的令牌?

系统分配的托管标识的 Azure ARM 角色分配第一次运行失败

如何将 Azure 托管标识分配给 Azure 存储帐户?