我希望用户能够运行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
编辑:数据库是事务复制的发布者,这可能是导致错误的一个因素
答案 0 :(得分:0)
USER
可以ALTER
个没有db_owner
或sysadmin
角色的对象。也许问题在于您使用的是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执行的存储过程,从而阻止更改完成。