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 中的表大得多

SQL Server 2016五大优势挖掘企业用户数据价值

SQL Server 2016 - 如何获取用户的最后登录日期?

SQL Server2016安装步骤图解

如何在 SQL Server 2016 中添加 Active Directory 用户或组作为登录名?