微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决无法使用架构的更改权限来更改架构中的表

我希望用户能够运行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

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

解决方法

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;
,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。