为登录提供服务器角色会中断存储过程

Ben*_*dgi 8 sql-server stored-procedures permissions role sql-server-2008-r2

我有一个名为user1. user1可以执行存储过程[Test].[SP1]

EXEC [Test].[TestSortation]
EXEC [TestSortation]
Run Code Online (Sandbox Code Playgroud)

以上两个命令都有效。

现在,如果我给user1的服务器角色sysadmin除了public。上面 2 个语句中的后者失败,并引发此错误:

找不到存储过程“TestSortation”。

我不想手动更改数据库中的每个存储过程以将模式名称包含在 EXECute 命令中。有人可以向我解释为什么会发生这种情况。另外,有没有办法解决这个问题,自动修复我的存储过程,将架构默认为[Test]

Pau*_*ite 8

授予CONTROL SERVER登录名而不是将其添加到sysadmin角色。

在线书籍中所述

DEFAULT_SCHEMA如果用户是sysadmin固定服务器角色的成员,则忽略的值。sysadmin固定服务器角色的所有成员都具有dbo的默认架构。

CONTROL SERVER 给予相同的权利sysadmin但没有这种副作用。

一个警告:您需要检查任何依赖于明确是sysadmin角色成员的用户的代码(例如,使用 的代码IS_SRVROLEMEMBER)。