gpt4 book ai didi

azure - 如何允许非管理员用户在 Azure SQL 数据库上使用 BULK INSERT

转载 作者:行者123 更新时间:2023-12-03 01:44:05 26 4
gpt4 key购买 nike

我目前正在努力在不使用管理员用户的情况下在 Azure SQL 数据库上进行BULK INSERT工作。。以下脚本运行良好且完全符合预期,并且 documented当由管理员用户执行时:

-- Note: this requires a MASTER KEY to exist!
-- If you don't have a master key yet, create one with the following statement:
--CREATE MASTER KEY;

CREATE DATABASE SCOPED CREDENTIAL StorageCredential WITH
IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<my-blob-storage-sas>';

CREATE EXTERNAL DATA SOURCE StorageContainerDataSource WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://<blob-storage-account>.blob.core.windows.net/bulk',
CREDENTIAL = StorageCredential
);

CREATE TABLE [#TestFacts] (
[Id] uniqueidentifier,
[MachineId] uniqueidentifier,
[TimeZone] nvarchar(50),
[SliceDate] datetime2(7),
[SliceTimeStamp] datetime2(7),
[Weight] bigint,
[UserId] uniqueidentifier,
[Longitude] float,
[Latitude] float
);

BULK INSERT [#TestFacts]
FROM 'test.csv'
WITH (
DATA_SOURCE = 'StorageContainerDataSource',
FORMAT = 'CSV',
DATAFILETYPE = 'char',
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '0x0a',
KEEPIDENTITY,
KEEPNULLS
);

DROP TABLE [#TestFacts];
DROP EXTERNAL DATA SOURCE StorageContainerDataSource;
DROP DATABASE SCOPED CREDENTIAL StorageCredential;

当以非管理员用户身份(已被授予 SELECT、UPDATE、DELETE、INSERT、ALTER、CONTROL 和 ADMINISTER DATABASE BULK OPERATIONS 权限)执行此操作时,我收到以下错误消息:

Msg 4834, Level 16, State 1, Line 26
You do not have permission to use the bulk load statement.

根据文档,拥有 INSERT、ALTER 权限以及最重要的 ADMINISTER DATABASE BULK OPERATIONS 权限就足够了。但是,在检查数据库权限时(在 sys.database_permissions 中),我可以看到 GRANT ADMINISTER DATABASE BULK OPERATIONS TO myUser 添加了以下行:

principal_id  name    type_desc  authentication_type_desc  class_desc  type  permission_name  state_desc  major_id  minor_id
6 myUser SQL_USER DATABASE DATABASE NULL GRANT 0 0

请注意,type 为空,permission_name 为 NULL!根据documentation ,这应该是 DABOADMINISTER DATABASE BULK OPERATIONS

所以我现在的问题是:这是 Azure SQL 数据库中的错误吗?有什么我忘记做的事情吗?非管理员用户实际上不支持 BULK INSERT 吗?

一些注意事项:

  • @@VERSION 是“M​​icrosoft SQL Azure (RTM) - 12.0.2000.8 Jan 262018 23:35:00”,SERVERPROPERTY('EngineEdition') 为“5”。
  • 我发现的有关类似问题的所有资源都涉及 SQL Server,您需要拥有 bulkadmin 角色,或者需要向用户授予 ADMINISTER BULK OPERATIONS(请注意,那里缺少 DATABASE!) 。但 Azure SQL 数据库两者都没有。

最佳答案

这是一个example on the Microsoft github account其中包含一个非常重要的信息:

Create a permanent table. A temp table currently is not supported for BULK INSERT, although it will will work with OPENROWSET

因此可以通过从表名中删除#来解决该问题,使其成为永久表。然后一切都会按预期工作并记录下来,即使对于非管理员用户也是如此。

注意:示例中的引用读起来就好像可以使用 OPENROWSET 插入临时表(例如 INSERT INTO ... SELECT ... FROM OPENROWSET(BULK ...) ASbulk),但测试会导致与 BULK INSERT 相同的错误!

关于azure - 如何允许非管理员用户在 Azure SQL 数据库上使用 BULK INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49381637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com