使用Fabric REST API创建DirectQuery语义层的凭据传递问题
解决Fabric REST API创建DirectQuery语义层的数据源凭据问题
核心说明
Power BI/Fabric出于安全合规要求,不允许在model.bim的M表达式中明文存储数据库用户名和密码,这也是你直接在Sql.Database()中添加凭据无效的原因。以下是两种合规的解决方案:
方案一:通过REST API请求体直接传递凭据
调用create-semantic-model接口时,在请求体中同时定义dataSources字段,将数据源连接信息和凭据一并传入,无需修改model.bim的M表达式即可关联凭据。
- 完整请求体示例(关键部分):
{ "displayName": "你的语义模型名称", "model": { /* 你的model.bim完整JSON内容 */ }, "dataSources": [ { "name": "SqlDataSource", "type": "Sql", "connectionDetails": { "server": "xxx-xxxx..database.windows.net", "database": "database_name" }, "credentialDetails": { "credentialType": "Basic", "credentials": { "username": "你的数据库用户名", "password": "你的数据库密码" }, "encryptedConnection": "Encrypted", "privacyLevel": "Organizational" } } ] }
- 对应的model.bim中M表达式可保持原样,Fabric会自动关联
dataSources中定义的凭据。
方案二:先创建工作区数据源,再关联语义模型
- 先通过Fabric REST API创建工作区级别的SQL数据源,将用户名和密码凭据保存到工作区中。
- 修改model.bim的M表达式,引用已创建的工作区数据源:
let Source = DataSource.Sql("SqlDataSource"), dbo_Applications = Source{[Schema="dbo",Item="country"]}[Data] in dbo_Applications
这样语义模型会自动复用工作区数据源中已保存的凭据,无需重复输入。
注意事项
- 禁止在M表达式中明文写入用户名和密码,这不仅存在安全泄露风险,Power BI服务也会直接忽略此类明文凭据,仍提示缺少权限。
- 若使用Basic认证,确保数据库服务器已开启加密连接(
encryptedConnection设为Encrypted),符合Fabric的安全要求。
内容的提问来源于stack exchange,提问作者Umesh
相关产品推荐
相关产品推荐

