我想知道为什么对于标量值函数,我必须授予用户执行而不仅仅是选择?
同时,表值函数只需选择权限或db_datareader成员资格即可正常工作。
更清楚的是,这里是我的示例:我需要一个对数据库具有只读权限的用户。所以我创建了一个名为的用户testUser并授予它db_datareader成员资格。然后我创建了一个名为fn_InlineTable. 一切都很棒。testUser整天运行这个 SQL
select * from dbo.fn_InlineTable
Run Code Online (Sandbox Code Playgroud)
然后我需要一个标量函数,所以我创建了一个名为fn_ScalarTest.
testUser无法运行此 SQL
Select dbo.fn_ScalarTest(1)
Run Code Online (Sandbox Code Playgroud)
很好理解:这是因为我没有授予“testUser”权限来执行fn_ScalarTest.
我的问题是:基于此链接/sf/ask/430562191/,表示 aFUNCTION不能用于执行修改数据库状态的操作. 那么为什么不让标量函数使用相同的“SELECT”权限而不是执行权限?
我希望我的问题是有道理的。谢谢你。
我可以澄清这个设置链接服务器是使用登录名的当前安全上下文进行的吗?如果我使用 Windows 帐户 JOESmith 连接到 serverA 并使用上面的选项创建链接服务器到 serverB。
当 BOBSmith 连接到服务器 A 并查询服务器 B 时会发生什么。它使用 JOESmith 凭证还是 BOBSmith?
抱歉,如果这听起来像一个愚蠢的问题,因为“当前安全上下文”应该意味着它将使用 BOBSmith 的帐户到 serverB
但我只是想澄清一下