无法使用架构的更改权限来更改架构中的表

时间:2020-08-14 14:44:36

标签: sql-server sql-server-2017

我希望用户能够运行alter table在特定模式dvi中向表中添加一列,并且已授予该用户对该模式的alter权限,但是当该用户运行类似这样的查询时

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或sysadmin,因为他们不应该能够更改其他表中的对象。还有其他方法可以让用户执行此操作吗? 我正在使用SQL Server 2017版本14.0.2027.2

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

2 个答案:

答案 0 :(得分:0)

USER可以ALTER个没有db_ownersysadmin角色的对象。也许问题在于您使用的是3部分命名,而不是连接到数据库。请注意,以下内容可以正常工作:

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;

答案 1 :(得分:0)

问题在于该表是复制的一部分,因此在此表上运行的任何alter表都将触发只能由db_owners或sysadmins执行的存储过程,从而阻止更改完成。