2016-11-30 45 views
2

我按照msdn(https://msdn.microsoft.com/en-us/library/dn935022.aspx)上的说明创建了一个外部表。这里的代码:SQL Server 2016通过polybase在azure blob存储上使用sql用户访问外部表 - 由于没有登录映射,拒绝访问

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虚拟机。如果我作为本地管理员连接到虚拟机并连接到SQL服务器实例,则可以从表中选择而不会出错。但是,如果我连接一个SQL用户(SQL身份验证,没有Windows身份验证),我无法访问该表。我收到以下错误:

Access to the remote server is denied because no login-mapping exists.

数据库作用域凭据我无法映射到sql登录名。正常凭据(无数据库范围的凭据)我无法使用它来创建外部数据源。

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

任何想法访问azure blob存储与SQL登录和没有Windows登录的外部表?

在此先感谢!

+0

嗨, 如果我把用户放到“系统管理员”服务器角色,它的工作原理。其他角色不起作用。我使用不同的权限进行了测试(授予服务器级别的所有内容,但没有服务器角色,但它不起作用)。 将“etluser”放入sysadmin角色很糟糕^^ ...没有人有想法吗? 谢谢! – SeKoch

回答

0

创建一个模式并将对该模式(在您的示例中为'stg')的读取权限授予您的sql登录名或角色。

相关问题