4

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

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

如果我使用我的系统管理员帐户执行此存储过程,它会按预期运行。如果我尝试在 domain1\user1 帐户下运行它,它不会运行并给出错误"You do not have permission to run 'FN_TRACE_GETTABLE'"。这又是预料之中的。

所以现在我想让domain1\user1存储过程运行,所以我将存储过程更改为在 sysadmin 帐户下执行:

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

现在,当我执行存储过程时,"You do not have permission to run 'FN_TRACE_GETTABLE'"无论我在哪个帐户下执行它,我都会得到!我期望能够在domain1\user1domain1\sysadmin1帐户下执行它。

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

4

3 回答 3

2

您需要使用代码签名以受控方式提升权限。在 EXECUTE AS 过程上下文中,您处于沙盒状态并且无法利用服务器级别的特权(例如与跟踪相关的权限),请阅读通过使用 EXECUTE AS 扩展数据库模拟。代码签名也是解决这个问题的正确方法。在此处查看完整示例

于 2013-07-01T11:55:05.440 回答
0

根据文档,您只能execute as为存储过程指定(数据库)用户名。我仍然认为这应该正常工作,但请使用 sysadmin 帐户更改 SP 并指定EXECUTE AS SELF而不是用户名。

如果这仍然不起作用,请尝试授予执行用户对跟踪文件的读取权限,也许服务器会忽略execute as文件访问(我认为这是一个错误)。

于 2013-07-01T10:11:22.860 回答
0

将路径复制并粘贴到新的资源管理器窗口中,如果出现错误,那就是你的问题。我花了一段时间才弄清楚为什么 SQL Server 说“sa”帐户没有它确实拥有的权限。

于 2018-06-01T15:13:35.847 回答