gpt4 book ai didi

sql-server - 我可以在 SQL Server 中强制用户进行某些设置吗?

转载 作者:行者123 更新时间:2023-12-02 01:22:47 25 4
gpt4 key购买 nike

我有一群用户对运行 SQL Server 的数据库进行临时查询。有时,有人会运行一个查询,在检索 10MM 行时会长时间锁定系统。

特定登录连接时是否可以设置一些选项?例如:

  • 事务隔离级别
  • 最大行数
  • 查询超时

如果这在 SQL Server 2000 中不可能,那么在其他版本中是否可能?据我所知,资源调控器不会给你这样的控制权(它只是让你管理内存和CPU)。

我意识到用户可以自己完成大部分工作,但如果我可以从每个用户的服务器上控制它,那就太棒了。

显然,我想让用户远离直接表/ View 访问,但目前这不是一个选择。

最佳答案

您当然可以限制查询结果。我这样做是为了StackQL使用如下所示的存储过程:

CREATE PROCEDURE [dbo].[WebQuery] 
@QueryText nvarchar(1000)
AS
BEGIN

INSERT INTO QueryLogs(QueryText)
VALUES(@QueryText)

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET QUERY_GOVERNOR_COST_LIMIT 15000
SET ROWCOUNT 500

Begin Try
exec (@QueryText)
End Try
Begin Catch
SELECT ERROR_NUMBER() AS ErrorNumber,
ERROR_MESSAGE() AS ErrorMessage,
ERROR_PROCEDURE() AS ErrorProcedure,
ERROR_SEVERITY() AS ErrorSeverity,
ERROR_LINE() AS ErrorLine,
ERROR_STATE() AS ErrorState
End Catch

END

这里的重要部分是日志后面的一系列三个 SET 语句。此限制基于结果中的行数和查询的预期成本。行计数和查询调控器值可以使用变量,因此修改它以更改基于当前用户的限制应该不难。

但是,您还应该注意,对于“知情”的用户来说,如果他们愿意的话,很容易摆脱这种情况。就我而言,我认为能够不时突破限制是一项功能。但这也是我进行日志记录的原因:超越限制的代码会在日志中突出显示,因此我可以轻松地捕获并禁止任何人在未经我许可的情况下经常这样做。

最后,调用此存储过程的任何用户都应该处于denydatawriters 角色、datareaders 角色中,然后被授予执行此存储过程的显式权限。那么他们就不能真正执行任何操作,只能在现有表上进行选择。

现在,我预计您的下一个问题是您是否可以从报表生成器或管理工作室等地方自动执行此操作。不幸的是,我认为这是不可能的。您需要为他们提供某种接口(interface),以便轻松调用存储过程。但我在这里可能是错的。

关于sql-server - 我可以在 SQL Server 中强制用户进行某些设置吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com