无法更改架构中的 table 更改权限

Can't alter table in schema with alter permission on schema

我希望用户能够 运行 更改 table 以将列添加到特定架构 dvi 中的 table,并且该用户已被授予更改权限在该架构上,但是当该用户 运行 的查询类似于

alter table
"db"."dvi"."mytablename"
add "columnname" varchar(50) default NULL

我收到错误

42000
21050
[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Only members of the sysadmin fixed server role or db_owner fixed database role can perform this operation. Contact an administrator with sufficient permissions to perform this operation.

我不想授予用户 db_owner 或系统管理员权限,因为他们不应该能够更改其他 table 中的对象。有没有其他方法可以让用户执行此操作? 我正在使用 SQL Server 2017 版本 14.0.2027.2

编辑:数据库是事务复制的发布者,这可能是导致错误的一个因素

A​​ USER 可以 ALTER 没有 db_ownersysadmin 角色的对象。也许问题是您使用的是三部分命名,而不是连接到数据库。请注意,以下内容没有问题:

USE Sandbox;
GO

CREATE SCHEMA test;
GO

CREATE TABLE test.YourTable (ID int);
GO

SELECT *
FROM test.YourTable;
GO

CREATE USER TestUser WITHOUT LOGIN;
GO

GRANT ALTER ON test.YourTable TO TestUser;
GO

EXECUTE AS USER = N'TestUser';
GO

ALTER TABLE test.YourTable ADD  NewColumn varchar(50) NULL;
GO

REVERT;
GO

SELECT *
FROM test.YourTable;
GO

--clean up;
DROP USER TestUser;
DROP TABLE test.YourTable;
DROP SCHEMA test;

问题是这个 table 是复制的一部分,所以对这个 table 的任何改变 table 运行 都会触发一个存储过程,它只能是由 db_owners 或系统管理员执行,以防止更改完成。