Sql server 由非管理员用户执行sp_setnetname
我需要更改链接服务器的ip。我对它使用过程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”不存在,无法模拟此类型
sp_setnetname
。
我使用public
服务器角色登录user1
。
尝试运行以下代码:
EXECUTE AS USER = 'user2';
EXEC ('sp_setnetname ''LinkedServerName'', ''' + 'SomeIp' + '''')
REVERT;
其中user2
具有sysadmin
服务器角色。但我收到一个错误:
无法作为数据库主体执行,因为主体“user2”不存在,无法模拟此类型的主体,或者您没有权限。
请帮助我解决此错误,或找到任何其他方法更改非管理员用户链接服务器的ip。好的,我通过以下方式解决问题:
更改任何链接服务器
另外,谢谢@Jeroen Mostert的创意。你的意思是
登录
?用户
不能具有系统管理员
角色,因为用户
是数据库对象sysadmin
是一个服务器角色,可以赋予登录名
;它不能授予数据库用户
。这种方法注定会失败——如果用户没有运行sp_setnetname
的权限,他们也不会(或者绝对不应该)有权模拟随意运行的用户。您可以使用使用EXECUTE AS
的存储过程,并授予执行权限。@larnu,登录名user1
映射到用户user1
,登录名“user2”映射到用户“user2”