SQL Server 2016通过polybase在zure blob存储上访问外部表与sql用户 - 访问被拒绝,因为没有登录映射

时间:2016-11-30 08:23:54

标签: azure sql-server-2016 azure-blob-storage

我按照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 Server实例,我可以从表中选择而不会出错。但是如果我连接一个sql用户(sql身份验证,没有Windows身份验证),我无法访问该表。我收到以下错误:

  

拒绝访问远程服务器,因为不存在登录映射。

数据库作用域凭据我无法映射到sql登录。正常凭据(没有数据库作用域凭据)我不能用来创建外部数据源。

我还尝试在polybase core-site.xml([...] / MSSQL / Binn / Polybase / Hadoop / conf / core-site.xml)中设置密钥,但它也只适用于windows验证(本地管理员)登录。

使用sql登录访问azure blob存储上的外部表并且没有Windows登录的任何想法?

提前致谢!

1 个答案:

答案 0 :(得分:0)

创建架构并将对该架构的读取权限(在您的示例中为#g;&#39;)授予您的sql登录或角色。