我想知道为什么对于标量值函数,我必须授予用户执行而不仅仅是选择?
同时,表值函数只需选择权限或db_datareader
成员资格即可正常工作。
在这里更清楚的是我的例子:我需要一个对数据库具有只读权限的用户。所以我创建了一个名为的用户testUser
并为其提供db_datareader
会员资格。然后我创建了一个名为fn_InlineTable
. 一切都很好。testUser
整天运行这个 SQL
select * from dbo.fn_InlineTable
那么我需要一个标量函数,所以我创建了一个名为fn_ScalarTest
.
testUser
无法运行此 SQL
Select dbo.fn_ScalarTest(1)
可以理解:这是因为我没有授予“testUser”执行权限fn_ScalarTest
。
我的问题是:基于此链接https://stackoverflow.com/questions/6150888/insert-update-delete-with-function-in-sql-server,表示 aFUNCTION
不能用于执行修改数据库状态的操作. 那么为什么不让标量函数使用相同的“SELECT”权限而不是执行权限呢?
我希望我的问题是有道理的。谢谢你。