SQL Server 2016 使用 sql 用户通过 azure blob 存储上的 polybase 访问外部表 - 访问被拒绝,因为没有登录映射
Posted
技术标签:
【中文标题】SQL Server 2016 使用 sql 用户通过 azure blob 存储上的 polybase 访问外部表 - 访问被拒绝,因为没有登录映射【英文标题】:SQL Server 2016 access external table via polybase on azure blob storage with sql user - access denied because no login-mapping 【发布时间】:2016-11-30 08:23:53 【问题描述】:我按照 msdn (https://msdn.microsoft.com/en-us/library/dn935022.aspx) 上的说明创建了一个外部表。代码如下:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = <password>;
CREATE DATABASE SCOPED CREDENTIAL BlobCredential
WITH
IDENTITY = <identity>,
SECRET = <secret key to access blob>
;
CREATE EXTERNAL DATA SOURCE BlobContainer
WITH
(
TYPE = HADOOP,
LOCATION = 'wasbs://<container>@<storageacc>.blob.core.windows.net',
CREDENTIAL = BlobCredential
);
CREATE EXTERNAL FILE FORMAT FlatFile WITH
(
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS
(
FIELD_TERMINATOR = '|', -- column delimiter
USE_TYPE_DEFAULT = TRUE
)
);
CREATE EXTERNAL TABLE [stg].[TestTable]
(
[...]
)
WITH
(
LOCATION='/Flat/',
DATA_SOURCE = BlobContainer,
FILE_FORMAT = FlatFile,
REJECT_TYPE = VALUE,
REJECT_VALUE = 1
);
它是 Azure 上的 SQL Server VM。如果我以本地管理员身份连接到虚拟机并连接到 SQL 服务器实例,我可以从表中选择而不会出错。但是如果我使用 sql 用户连接(sql 身份验证,没有 Windows 身份验证),我将无法访问该表。我收到以下错误:
访问远程服务器被拒绝,因为不存在登录映射。
数据库范围的凭据我无法映射到 sql 登录。普通凭据(没有数据库范围的凭据)我不能用来创建外部数据源。
我还尝试在 polybase core-site.xml ([...]/MSSQL/Binn/Polybase/Hadoop/conf/core-site.xml) 中设置密钥,但它也仅适用于 windows身份验证(本地管理员)登录。
有什么想法可以通过 sql 登录而没有 windows 登录来访问 azure blob 存储上的外部表吗?
提前致谢!
【问题讨论】:
嗨,如果我将用户设置为“sysadmin”服务器角色,它就可以工作。其他角色无效。我用不同的权限进行了测试(在没有服务器角色的情况下授予服务器级别的所有内容,但它不起作用)。将“etluser”放入系统管理员角色很糟糕^^...没人知道吗?谢谢! 【参考方案1】:创建一个架构并将对该架构(在您的示例中为“stg”)的读取权限授予您的 sql 登录名或角色。
【讨论】:
以上是关于SQL Server 2016 使用 sql 用户通过 azure blob 存储上的 polybase 访问外部表 - 访问被拒绝,因为没有登录映射的主要内容,如果未能解决你的问题,请参考以下文章
始终加密 - SQL Server 2016 如何在加密列上使用用户案例语句
使用 SQLBulkCopy - SQL Server 2016 中的表比 SQL Server 2014 中的表大得多