这个问题指出,各种 DMV(动态管理视图)都需要“查看服务器状态”权限,但我找不到任何关于你做什么和不想授予权限的信息。
现在我当然理解“最少权限”,以及为什么您不想将其授予任何人,但我找不到有关如何评估是否应该授予它的任何指导。
所以,我的问题是:授予用户“查看服务器状态”权限对安全和性能有何影响。他们可以做什么,他们可能不应该被允许做......
更新:一个含义是用户将能够使用 DMV 来查看查询。如果查询或查询参数可以包含用户无法看到的机密信息,则允许 VIEW SERVER STATE 将允许他们这样做(即 dob = 或 ssn =)。
我知道 SQL Server 不支持使用视图作为外键约束的参考,是否有原因(即与关系模型有关)是这种情况吗?好像会有用....
我正在编写一个表值函数,调用该函数所需的时间是直接运行代码的 10 倍。我将此追溯到对 TVF 内的多行标量函数的调用。从 TVF 内部调用时,对标量函数的调用过慢。标量函数接受 3 个 int 参数并返回单个 int 结果。
什么会导致它在 TVF 中变慢?
首先,TVF 基本上是一种数据透视表,只返回一行,有 13 列。
标量函数是一个多行标量,它在两个表中的一个中查找一组匹配的键(即输入是 columnA,输出是 columnB,其中 input = columnA 和 active)。使用稍微更改的 where 子句再次搜索表 1,然后是表 2,最后是表 1。
用法最初是一个带有连接子句的 cte 查询:
With cte as ( select count(*) over (partition by c.c1) recs,
c.setId, c.c1, c.c2, n.name
From tbl c
Inner join tbl n on n.id = schma.scal(c.c1, c.c2, c.c3)
Where c.setId=@setId and c.endDt is null
)
Run Code Online (Sandbox Code Playgroud)
这个 cte 最初被调用了 11 次,从(大约一半的时间)返回到 3 行(使用像 c1=42 这样的 …
我有一个表,其中所有操作都会影响单行(插入和更新,没有删除,但如果有,它们也将是单独的)。我正在考虑在检查约束中使用 UDF,这样我就可以确保一个字段值仅与另一个值结合使用(两个 FK,第一次使用 A=1,B=x 变得固定,这样如果x = 4 那么 A=1 永远不能与 B=3 或除 4 之外的任何东西匹配)。
除了插入/更新行时花费的额外时间微不足道之外,这样做的缺点是什么?
更新:应用程序不提供在创建行后更改 A 列或 B 列的机制。
我需要每年重置某种身份/序列/计数器。自动执行此操作的最佳方法是什么(即我不希望前端应用程序调用存储过程或执行 SQL 来执行此操作)。
如果重要,数据库将至少是 SQL Sever 2012。
我可能会使用标识列,但如果有更好的方法来代替序列,我当然对此持开放态度。