我目前正在努力让BULK INSERT
在不使用管理员用户的情况下在AzureSQL数据库上工作。以下脚本运行良好,完全符合预期,并在管理员用户执行时记录在案:
-- 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;
当以非管理员用户身份执行此操作时(已被授予选择、更新、删除、插入、更改、控制和管理数据库批量操作的权限),我会收到以下错误消息:
Msg 4834, Level 16, State 1, Line 26
You do not have permission to use the bulk load statement.
根据文档,拥有插入、更改和(最重要的)管理数据库批量操作的权限就足够了。但是,当检查数据库权限时(在sys.database\u permissions
中),我可以看到向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!根据文档,这应该是DABO
和管理数据库批量操作
。
所以我现在的问题是:这是Azure SQL数据库中的一个bug吗?有什么事我忘了做吗?非管理员用户实际上不支持大容量插入吗?
一些注意事项:
bulkadmin
,要么需要授予ADMINISTER BULK OPERATION(注意,那里缺少数据库!)对用户。但是AzureSQL数据库两者都没有。以下是Microsoft github帐户的一个示例,其中包含一条非常重要的信息:
创建一个永久表。临时表当前不支持大容量插入,尽管它将与OPENROWSET一起使用
因此,这个问题可以通过从表名中删除#
来解决,使其成为永久表。然后一切都按预期和记录工作,即使是非管理员用户。
注意:示例中的引用读起来似乎可以使用OPENROWSET插入到临时表中(例如,INSERT into…SELECT…from OPENROWSET(BULK…)作为批量
),但测试会导致与批量插入相同的错误!
我正在尝试建立一个只有我可以编写的Firebase数据库。所以没有用户有权编写任何东西。但每个人都可以阅读它。 然而,我无法为它制定规则。我使用电子邮件/密码登录创建了一个管理员用户,我知道它的UID。假设我的UID是: 我尝试了这两种方法,但它们不允许我写入数据库。 . 那么,如何只允许一个具有特定UID的用户向数据库写入任何内容呢?
问题内容: 我正在写以下命令 我怎样才能将此命令限制为仅管理员?我试着看,它说。我如何检查给定的用户是否是? 问题答案: 有两种方法:通过使用的角色白名单 或经许可使用 这两个装饰器都是Checks,如果它们失败,将引发您的一些子类供您选择处理。
我是wordpress的新手,在管理数据库方面有困难。我已经安装了“管理员”插件来管理数据库。我已经创建了一个名为“usersupp_admin”的新表。现在我还创建了一个自定义模板,该模板将使用PDO语句连接到此数据库,现在的问题是在哪里可以获取主机、数据库名、用户和密码?以下是代码: 任何帮助都将不胜感激。
我已经为PostgreSQL创建了新的Azure数据库-灵活的服务器,管理员用户为“admin\u demo”。 现在,在创建数据库之后,我完成了以下步骤: > 创建角色role\u developer;--创建新角色。 授予使用权限,在模式abc上创建以role_developer;--授予对模式中新角色的访问权限。 将架构abc中所有表的select、insert、update、delete授
我需要你对LDAP结构和相关ACL的建议。 我们的LDAP将管理10个(数量可能不同)组织,其中包含用户(总共250个用户),我希望每个组织允许1个用户管理他自己组织的所有用户。用户也将附加到自定义组。 我已经读过: http://www.openldap.org/doc/admin24/access-control.html http://www.openldap.org/faq/data/ca
上下文:我正在使用Firebase作为后端组装一个时间跟踪应用程序。我当前的节点结构在根节点上有时间条目和客户端,如下所示: > 时间输入 条目ID 用户ID 客户ID、时间、日期、描述等 客户 客户ID 名称、项目等 如果我只是根据用户添加和提取时间条目,那么这种结构可以很好地工作,但我想开始根据每个客户机组合报告。目前,这意味着为每个用户发出单独的HTTP请求,然后通过clientID进行过滤