4

ユーザーにアクセス許可を与えずに、.trc ファイルから SQL Server トレース データを表示できるようにしようとしていますALTER TRACE(SQL Server 2008 R2)。そのため、sysadmin アカウントを使用してストアド プロシージャにまとめました。

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

sysadmin アカウントを使用してこのストアド プロシージャを実行すると、正常に動作します。これを 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ストアド プロシージャでは (データベース) ユーザー名のみを指定できます。それでも正常に動作すると思いますが、SP を sysadmin アカウントで変更しEXECUTE AS SELF、ユーザー名の代わりに指定してください。

それでもうまくいかない場合は、実行中のユーザーにトレース ファイルの読み取り権限を与えてみてください。サーバーexecute asがファイル アクセスの権限を無視している可能性があります (これはバグだと思います)。

于 2013-07-01T10:11:22.860 に答える