SQL Server创建指向另一SQL Server的PolyBase外部表失败求助
解决SQL Server PolyBase创建外部表的登录失败及连接字符串错误
问题重现
执行以下SQL创建外部数据源和外部表:
CREATE EXTERNAL DATA SOURCE Polybase_ServerTest WITH ( LOCATION = 'sqlserver://ServerTest:1433', --PUSHDOWN = ON, CREDENTIAL = Credential_PolyBase ); CREATE EXTERNAL TABLE ext.Person ( [person_id] [varchar](9) NULL, [given_names] [varchar](20) NULL, [surname] [varchar](30) NULL ) WITH (DATA_SOURCE = Polybase_ServerTest, LOCATION = 'DB_Name.Schema.TableName')
出现错误:
Msg 110045, Level 16, State 1, Line 28
110045;User authorization failed: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Login failed for user 'TestUser'. Additional error <2>: ErrorMsg: [Microsoft][ODBC Driver 17 for SQL Server]Invalid connection string attribute
排查与解决步骤
1. 验证数据库范围凭据的创建正确性
错误提示的核心问题是登录失败+连接字符串属性无效,大概率是Credential_PolyBase的定义不符合PolyBase要求:
- 若使用SQL Server身份认证,凭据必须按以下格式创建,不要添加多余属性:
CREATE DATABASE SCOPED CREDENTIAL Credential_PolyBase WITH IDENTITY = 'TestUser', -- 仅填SQL用户名,不要加域名或前缀 SECRET = 'TestUser的登录密码'; -- 确保密码正确,无特殊字符转义问题
- 若使用Windows身份认证,IDENTITY必须是
DOMAIN\用户名格式,且当前SQL Server服务账户需具备委派权限(跨服务器场景):
CREATE DATABASE SCOPED CREDENTIAL Credential_PolyBase WITH IDENTITY = 'DOMAIN\TestUser', SECRET = 'Windows账户密码';
2. 确认目标服务器的TestUser权限
在目标SQL Server(ServerTest)上完成以下配置:
-- 创建登录名 CREATE LOGIN TestUser WITH PASSWORD = '对应密码'; -- 映射到目标数据库用户 USE DB_Name; CREATE USER TestUser FOR LOGIN TestUser; -- 授予表访问权限 GRANT SELECT ON Schema.TableName TO TestUser;
3. 检查外部数据源的可访问性
- 把
ServerTest替换为目标服务器的IP地址(如sqlserver://192.168.1.100:1433),规避DNS解析问题; - 确认当前SQL Server所在服务器能通过1433端口访问目标服务器(检查防火墙、网络策略)。
4. 验证ODBC驱动兼容性
部分SQL Server版本(如2016/2017)对ODBC Driver 17的兼容性存在问题,尝试降级到ODBC Driver 13.1版本后重新测试。
内容的提问来源于stack exchange,提问作者Liem Nguyen
相关产品推荐
相关产品推荐

