7

我有一个在 Windows 用户上下文中执行的 Powershell 脚本。此用户登录 SQL 2012 实例,该实例是 sysadmin 服务器角色的成员。

我希望脚本将 SQL 实例(也有相应的 Windows 用户)上的另一个登录名添加到 sysadmin 服务器角色。

要在 Management Studio(作为 SA 连接)中尝试此操作,我使用以下脚本:

execute as user = 'domain\currentsysadmin'

IF IS_SRVROLEMEMBER('sysadmin', 'domain\futuresysadmin') != 1
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [domain\futuresysadmin]

revert

我这里有两个问题:

  1. 当我运行此处显示的脚本时,对 IS_SRVROLEMEMBER 的调用按预期返回 0,但即使 domain\currentsysadmin 登录是 sysadmin 的成员,对 ALTER SERVER ROLE 的调用也会返回:

    消息 15151,级别 16,状态 1,第 8 行无法更改服务器角色“sysadmin”,因为它不存在或您没有权限。

  2. 当我在没有 EXECUTE AS 语句的 SA 上下文中运行它时,ALTER SERVER ROLE 语句似乎运行成功,但是当我检查 domain\futuresysadmin 登录时,它仍然不是 sysadmin 角色的成员

如何将域\futuresystem 登录添加到 sysadmin 服务器角色?

4

1 回答 1

4

使用sp_addsrvrolemember

EXEC master..sp_addsrvrolemember @loginame = N'domain\futuresysadmin', @rolename = N'sysadmin'

更新:用户上下文切换不继承任何服务器角色,如系统管理员。在阅读文档时:“不尊重在用户令牌中或通过角色成员资格明确授予身份的服务器级权限。” 当您切换用户上下文时,您的用户不再有权将 sysadmin 授予另一个用户。

于 2012-12-10T22:52:15.050 回答