Azure Databricks创建表失败,请求认证报错403
问题场景
已在Azure Databricks中创建Schema,且拥有对应Catalog的管理员权限,但执行建表SQL时返回403认证失败错误,报错信息:
Operation failed: "Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.", 403, GET, AuthenticationFailed, "Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:a159b290-a01f-003c-452c-a0b41d000000 Time:2023-06-16T08:27:52.7989722Z"
执行的SQL语句:
%sql CREATE Table IF NOT EXISTS main.auditlogs.Customer_Logs
排查与解决思路
检查底层存储权限
Databricks的Catalog管理员权限仅覆盖元数据操作,建表最终需要写入底层存储(如ADLS Gen2)的权限,两者是独立权限体系:- 确认Databricks使用的身份(服务主体/托管身份/你的用户账户)对目标存储路径拥有
Storage Blob Data Contributor或更高权限; - 检查存储账户的防火墙/网络规则,是否允许Databricks工作区的IP或虚拟网络访问;
- 若使用SAS令牌,确认令牌未过期且包含
w(写入)权限。
- 确认Databricks使用的身份(服务主体/托管身份/你的用户账户)对目标存储路径拥有
验证Schema/Catalog的存储位置配置
建表会默认使用Schema或Catalog的存储位置,需确认该位置权限正常:- 执行
DESCRIBE SCHEMA EXTENDED main.auditlogs;查看Schema关联的存储路径; - 检查该路径对应的容器/目录,当前身份是否具备写入权限;
- 若Schema未指定存储位置,需检查Catalog的默认存储位置权限。
- 执行
排查会话身份认证问题
当前会话的身份令牌可能过期或未正确传递到存储层:- 确认你使用的Azure AD账户对目标存储账户有写入权限;
- 若通过集群运行SQL,检查集群配置的服务主体是否拥有存储权限;
- 重新登录Databricks,刷新会话令牌后重试操作。
显式指定存储位置重试
避开默认路径的权限问题,直接在SQL中指定已确认有权限的存储路径:
CREATE Table IF NOT EXISTS main.auditlogs.Customer_Logs LOCATION 'abfss://<容器名>@<存储账户名>.dfs.core.windows.net/table/path'
内容的提问来源于stack exchange,提问作者ZZZSharePoint

