Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 由非管理员用户执行sp_setnetname_Sql Server_Sql Server 2016 - Fatal编程技术网

Sql server 由非管理员用户执行sp_setnetname

Sql server 由非管理员用户执行sp_setnetname,sql-server,sql-server-2016,Sql Server,Sql Server 2016,我需要更改链接服务器的ip。我对它使用过程sp_setnetname。 我使用public服务器角色登录user1。 尝试运行以下代码: EXECUTE AS USER = 'user2'; EXEC ('sp_setnetname ''LinkedServerName'', ''' + 'SomeIp' + '''') REVERT; 其中user2具有sysadmin服务器角色。但我收到一个错误: 无法作为数据库主体执行,因为主体“user2”不存在,无法模拟此类型

我需要更改链接服务器的ip。我对它使用过程
sp_setnetname
。 我使用
public
服务器角色登录
user1
。 尝试运行以下代码:

    EXECUTE AS USER = 'user2';
    EXEC ('sp_setnetname ''LinkedServerName'', ''' + 'SomeIp' + '''')
    REVERT;
其中
user2
具有
sysadmin
服务器角色。但我收到一个错误:

无法作为数据库主体执行,因为主体“user2”不存在,无法模拟此类型的主体,或者您没有权限。


请帮助我解决此错误,或找到任何其他方法更改非管理员用户链接服务器的ip。

好的,我通过以下方式解决问题:

  • 登录用户1仍具有公用服务器角色
  • 登录User1仍然映射到数据库用户User1
  • 添加登录用户1权限
    更改任何链接服务器
  • 我希望这对像我这样的人有帮助


    另外,谢谢@Jeroen Mostert的创意。

    你的意思是
    登录
    用户
    不能具有
    系统管理员
    角色,因为
    用户
    是数据库对象
    sysadmin
    是一个服务器角色,可以赋予
    登录名
    ;它不能授予数据库
    用户
    。这种方法注定会失败——如果用户没有运行
    sp_setnetname
    的权限,他们也不会(或者绝对不应该)有权模拟随意运行的用户。您可以使用使用
    EXECUTE AS
    的存储过程,并授予执行权限。@larnu,登录名
    user1
    映射到用户
    user1
    ,登录名“user2”映射到用户“user2”