【问题标题】:Can we create Database Scoped credential inside T-SQL procedure on Azure我们可以在 Azure 上的 T-SQL 过程中创建数据库范围凭据吗
【发布时间】:2018-06-15 01:07:52
【问题描述】:

我们能否在 Azure SQL 上的 T-SQL 过程中为共享访问签名创建数据库范围的凭据?

我们正在尝试从存储在 Azure blob 上的 csv 文件中批量插入数据

以下是步骤

  • 使用 JAVA 创建 SAS 凭据

  • Java 将调用存储过程来创建/更改外部数据源并将 SAS 凭据作为参数传递给该过程

  • 上述过程将在内部调用另一个过程进行 BULK INSERT

我们在通过 T-SQL 过程创建数据库范围凭证方面面临挑战,有人可以确认这种方法是否真的可行

如果我们能获得一些相同的示例代码,那将是非常有帮助的。

我在 Microsoft 网站上看到了创建数据库范围凭据的语法,当我们将脚本作为独立语句运行但我们无法使用过程编译代码时,它可以工作

我们尝试了下面的代码

CREATE procedure prc_create_external_data_source @SAS VARCHAR(100)
AS
BEGIN

SET nocount ON

DECLARE @command varchar(MAX);

PRINT 'Shared Access Key Received Key: '+@SAS;



SET @command = 

'CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential 
WITH IDENTITY = ''SHARED ACCESS SIGNATURE'',
SECRET = '+@SAS


EXECUTE (@command);

PRINT 'Database Scoped Credential Created';



END

执行此过程后,我们收到以下错误消息

EXECUTE prc_create_external_data_source '1245632512344'

错误号:102 错误消息:“1245632512344”附近的语法不正确。行号:3 过程名称:(SQL 状态:S0001 - 错误代码:0)

谢谢

【问题讨论】:

    标签: sql-server azure stored-procedures azure-sql-database


    【解决方案1】:

    您的秘密可能需要用引号括起来。此外,这一切都需要在一行上或与+ 连接

    如果您打印了字符串,它可能会很明显。试试这个:

    SET @command =     
    'CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential ' +
    'WITH IDENTITY = ''SHARED ACCESS SIGNATURE''' + 
    ',SECRET = '''+ @SAS + ''''
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多