You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure SQL仅AD认证下获取登录用户名及ADF MSI默认约束问题求助

解决Azure SQL AD认证下的用户记录问题

为什么ADF用MSI连接时拿不到主体名?

当ADF通过托管服务标识(MSI)连接Azure SQL时,system_user返回的是MSI的**安全标识符(SID)**而非友好名称——这是SQL对服务主体的默认行为。但个人AD账号登录时,system_user会返回你的邮箱(UPN),所以两种场景结果不一致。

怎么获取正确的登录用户名称?

别用system_user,换成以下两种方法:

直接调用SUSER_SNAME()函数

这个函数能把SID转换为对应的AD主体名称,MSI场景下会返回你的数据工厂名称,个人用户场景返回邮箱:

SELECT SUSER_SNAME() AS CurrentUser;

查询系统视图获取详细主体信息

如果需要更多主体属性,可以查询sys.database_principals视图:

SELECT name AS PrincipalName, type_desc AS PrincipalType
FROM sys.database_principals
WHERE sid = SUSER_SID();

修改默认约束,让CreatedByUser自动记录正确用户

把原来的默认值从system_user改成SUSER_SNAME()即可,步骤如下:

  1. 先查询原约束的名称:
SELECT name 
FROM sys.default_constraints 
WHERE parent_object_id = OBJECT_ID('你的表名') 
  AND parent_column_id = COLUMNPROPERTY(OBJECT_ID('你的表名'), 'CreatedByUser', 'ColumnId');
  1. 删除旧约束(将下面的约束名替换为你查到的名称):
ALTER TABLE 你的表名
DROP CONSTRAINT DF_你的表名_CreatedByUser;
  1. 添加新的默认约束:
ALTER TABLE 你的表名
ADD CONSTRAINT DF_你的表名_CreatedByUser DEFAULT SUSER_SNAME() FOR CreatedByUser;

验证效果

修改完成后,ADF通过MSI执行DML操作时,CreatedByUser列会自动填入数据工厂的名称;个人用SSMS登录操作时,依然会记录你的邮箱地址。


内容的提问来源于stack exchange,提问作者azuresnowflake1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:03:34