gpt4 book ai didi

sql-server - FN_TRACE_GETTABLE 上的 SQL Server EXECUTE AS

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

我试图允许用户查看 .trc 文件中的 SQL Server 跟踪数据,而不授予他们 ALTER TRACE 权限 (SQL Server 2008 R2)。因此,我使用我的系统管理员帐户将其封装在存储过程中:

CREATE PROCEDURE test_trace
as
SELECT * FROM FN_TRACE_GETTABLE(N'C:\temp\trace1.trc', 1)

如果我使用我的系统管理员帐户执行此存储过程,它会按预期运行良好。如果我尝试在domain1\user1帐户下运行它,它不会运行并给出错误“您无权运行'FN_TRACE_GETTABLE'”。这又是预料之中的事情。

现在我想让 domain1\user1 运行存储过程,因此我将存储过程更改为在系统管理员帐户下执行:

CREATE PROCEDURE test_trace 
WITH EXECUTE AS 'domain1\sysadmin1'
as
SELECT * FROM FN_TRACE_GETTABLE(N'C:\temp\trace1.trc', 1)

现在,当我执行存储过程时,无论我在哪个帐户下执行它,都会得到“您无权运行'FN_TRACE_GETTABLE'”!我希望能够在 domain1\user1domain1\sysadmin1 帐户下执行它。

有人可以帮我解决我错过的事情吗?我的目标是允许 domain1\user1 读取 trace1.trc 文件,而不授予他们 ALTER TRACE 权限。

最佳答案

您需要使用code signing以受控的方式提升特权。在 EXECUTE AS 过程上下文中,您处于沙盒状态并且无法利用服务器级别权限(例如跟踪相关权限),请阅读 Extending Database Impersonation by Using EXECUTE AS 。代码签名也是这个问题的正确解决方案。查看full example here .

关于sql-server - FN_TRACE_GETTABLE 上的 SQL Server EXECUTE AS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17401328/

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