0

.NETで、SQLステートメントをSQLサーバーに渡して解析し、ステートメントに含まれるテーブルと操作のタイプを返すことは可能ですか? したがって、次のようなステートメントの場合:

select * from Table1
left outer join Table2 on Table1.id=Table2.foreignid;
delete from Table2 where date < 2009/12/12

SQL Server は、関連するテーブルを次のように返す場合があります。

Table1    Read
Table2    Read
Table2    Delete

したがって、ステートメントは実行されず、関連するテーブルが返されるだけです。

私が尋ねる理由は、私が取り組んでいるアプリケーションには、テーブルごとに適用したいアプリケーション レベルのテーブル権限があるからです。ステートメントに含まれるテーブルを解析する現在の方法は、正規表現を使用しており、単純なステートメント以外では失敗します。明らかに、この種の仕事に正規表現を実際に使用することはできません

4

2 に答える 2

2

SET SHOWPLAN_ALLはあなたのためにそれをしますか? サーバーで呼び出しクエリをシミュレートし、結果を解析できる場合があります。

編集: SET SHOWPLAN_TEXTの方が解析しやすいようです。

于 2010-02-23T20:55:43.690 に答える
1

私が尋ねる理由は、私が取り組んでいるアプリケーションには、テーブルごとに適用したいアプリケーション レベルのテーブル権限があるからです。

これらの権限を取得するには、データベース レベルのロールを作成し、そのレベルに適用する必要があるようです。データベース管理システムにお金を払いました。すでに導入されているソリューションによって最適に行われることをコーディングすることに時間を費やす必要はありません。

アプリケーション レベルのアクセス許可は、行レベルでは意味がある場合があり、データベースで実装することもできます。しかし、それらがテーブル レベルにある場合、自分でコーディングを強制することを正当化する言い訳は見当たりません。データベースを使用してください。

于 2010-02-23T22:40:06.620 に答える