2012-02-14 4 views
1

私は、ユーザーがSQLスクリプトを実行できるようにするプログラムがあります。私はプログラムへのユーザログインを持っていますが、管理者ユーザであっても実行を阻止するための要件が​​あります。SQL実行キーワードのリストがありますか? INSERT、ALTER

私は、ユーザーがテーブルなどを変更できないことを意味します。通常、すべてのユーザー接続を読み取り専用として設定することをお勧めしますが、INSERTを実行する必要があるプログラム内には1つの要素があります。

たとえば、/ INSERT、UPDATE、ALTERなどのユーザーが実行する可能性のあるキーワードを検出したい場合は、どこかに定義済みのリストがあることを期待していました。

+0

SQLインジェクションの場合? –

+0

Oracleは、ユーザーが実行したいステートメントをどのように知っていますか? –

+0

DROP TABLEまたはINSERTまたはALTERまたはEXECを書くユーザーを防ぐべきではありません – Jon

答えて

2

あなたは、あなたがしたくないことをブラックリストに載せるのではなく、ユーザーが許可したいことのホワイトリストを使う方がよいと思います。

SELECTを実行することのみ許可されていますか?

+1

これについて: 'SELECT * INTO T1 FROM T; ' – onedaywhen

4

なぜあなたはこのためにアクセス許可を使用するだけではないのかはっきりしません。必要に応じてユーザーにSELECT権限とINSERT権限を与えます。重要な操作をストアドプロシージャにラップし、必要に応じてプロシージャのみのEXECUTEを許可することもできます。

特定の単語だけを検索することはできないので、実際のSQLを解析するのは難しく、コンテキストも確立する必要があります。

-- I guess you don't want this 
delete from dbo.SomeTable 
-- but maybe you do want this? 
select * from dbo.SomeTable where Status = 'deleted' 

や悪意のある(あるいは単に好奇心)のユーザーは確かに彼らがEXECで何ができるか見るためにあなたの解析コードの限界をテストする楽しみを持つことになります、sp_executesqlを、OPENQUERYなど

:例として「DELETE」を使用

あなたが提案する代替案は、書いて維持するのに苦労し、ほぼ確実にそれに穴を開けるため、権限(おそらくストアドプロシージャで使用されます)がここでの真の解決策です。

+1

これは受け入れられた回答でなければなりません。ユーザの書かれたSQLコードをオンザフライで書くことよりもはるかに安全で衛生的です。 –

関連する問題