我按照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登录的任何想法?
提前致谢!
答案 0 :(得分:0)
创建架构并将对该架构的读取权限(在您的示例中为#g;&#39;)授予您的sql登录或角色。