2009-06-26 15 views
0

私は確かに方法はありませんが、私は知識を超えてそれらの専門家のためにこれを置いています。Sql Server変更を選択

私が探しているのは、SELECTステートメントがデータベースレベルで実行される前に何らかの形で変更することです。真剣に切り詰めダウン例えば、私は次のような何かをしたいのですが...誰かが、次のSQL

SELECT * FROM users.MESSAGES 

を実行したときに私はそれを実行する前に、それをキャッチしたい、との文を変更したいです

SELECT * FROM users.MESSAGES WHERE RECIPIENT = ORIGINAL_LOGIN() 

は私がこれを必要とするかもしれないすべての私のテーブルの上にビューを作成に頼る必要がなく、ORACLEのVPDSと同様の方法でデータにユーザー制限を強制することができますのようなものに。

答えて

1

悲しいことに、これは不可能です。

(セキュリティカタログなどの)Microsoft SQL Serverの行レベルセキュリティ機能さえも、ビューを使用して実装されています。

この機能が本当に必要な場合は、SUSER_NAME()またはWHERE句の類似の個人識別子またはロール識別子を使用してビューを設定する必要があります。

大変申し訳ございません。

+0

Ahhh、bugger。だから私はこれが "OracleがSql Server上で持っている残りのいくつかの事柄(データスクラブのためのBEFOREトリガーと一緒に)"というカテゴリーに入ると思います。 私はちょっと、余分なデータオブジェクトに頼らざるを得ないとは思っていませんでしたが、私は聞いてみました。 – eidylon

2

VIEWを使用して調べます。

0

ビュー(またはインラインテーブル値関数)を使用して、ビューを自動的に生成し、テーブルから権限を削除します。

0

SQL 2000では、倫理的ではない方法がありました。以前はmaster..sysprocessesテーブルにINSERTのトリガを作成し、このような操作を行うことができました。ありがたいことに、少なくともAFAIKはSQL 2005で可能ではありません.sysprocessesは偽のテーブルです。まだSQL 2000を使用して、米国の一部の利益のために

は、ここではSQL 2000でこれを行う方法です:

  1. コンソールで、右のプロパティで サーバー名
  2. をクリックしてサーバー に行きます設定タブ
  3. 次に、システムカタログ のチェックボックスに直接変更を許可するように、 をチェックします。右 クリックsysprocessesの-すべて タスク-管理トリガ
  4. に - (ユーザー)
  5. 今すぐテーブル、マスターDBに行く sysobjectsにsysprocessesテーブルを選択し、それがUにS(システム)からXTYPE だ変更
  6. その後、あなたはトリガーを書くことができます
  7. 完了したら、 すべてを元の状態に戻してください。

この場合でも、Select文を変更できるかどうかは疑問です。

Raj

免責事項:これは自己責任で行ってください。望ましくない結果につながるシステムオブジェクトを変更していることに注意してください。

0

まず、アドホッククエリからデータを見ることができないように、ユーザーにダイレクトテーブルアクセスを許可しないでください。ストアドプロシージャを使用してテーブルにアクセスし、プロシージャのパラメータの1つがユーザログインであるようにします。次に、そのログインのレコードのみを選択するようにコードを記述します。

関連する問題