0

私はSQL監視用のアプリケーションを開発しています。これは、多数のサーバーで5分ごとに実行される単なるコンソールアプリケーションです。接続文字列とSQLクエリを含む構成ファイルがあります。問題は、プログラムがSELECTクエリのみを受け入れるようにしたいということです。

私の同僚は、私がSqlCommandクラスに何かを設定できると思ったと言ったが、私はしばらくの間グーグルして成功しなかった。誰かが私の問題のクリーンな解決策を手に入れましたか?クエリでさまざまな単語を検索することを考えましたが、うまくいかない可能性があります。

どんな提案でも大歓迎です!

4

3 に答える 3

2

データベーステーブル自体を制限できます。
すべての権限を取り消すことができますが、アプリケーションのユーザーから選択してください。SQL-SERVERのコマンドを
検索します。REVOKE/GRANT

于 2010-09-06T10:20:13.617 に答える
0

アプリケーションがSELECTステートメント全体をビルドしない限り、これは不可能です。

問題は、最初の単語がSELECTであることを確認しても、悪意のあるユーザーがコマンドを終了してから、EXECまたはUPDATEステートメントを発行するのを止めることはできないということです。

最善の解決策は、接続文字列で参照されているユーザーアカウントがSQLオブジェクトへのアクセス許可を制限していることを確認することです。したがって、サポートされているオブジェクトからのSELECTのみが機能します。

于 2010-09-06T10:19:57.827 に答える
-2

特権を付与するのがより良い方法ですが、一連のSQLコマンドであっても、次のようなものを使用してステートメントを解析できます。

bool OkToRun = true;
foreach(string s in TheQueryString.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
    if (!s.Trim().ToUpper().StartsWith("SELECT "))
        OkToRun = false;
于 2010-09-06T10:29:02.753 に答える