【问题标题】:Can't alter table in schema with alter permission on schema无法使用架构上的更改权限更改架构中的表
【发布时间】:2020-08-14 14:44:36
【问题描述】:

我希望用户能够运行 alter table 以将列添加到特定模式 dvi 中的表中,并且用户已被授予对该模式的更改权限,但是当该用户运行类似的查询时

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

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

【问题讨论】:

    标签: sql-server sql-server-2017


    【解决方案1】:

    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;
    

    【讨论】:

    • 我尝试将其更改为“使用 DB”,但得到了同样的错误
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-15
      • 2011-01-01
      • 2017-02-21
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多