2009-10-09 48 views
5

System.Data.SqlClientコードを使用してSql Serverデータベースにアクセスすると、読み取り専用のアクセス許可を適用できますか?SqlCommandで読み取り専用の動作を強制できますか?

信頼できるユーザーが自分のSELECTステートメントをWebサイトに書き込むことを許可します。

いいえここではトローリングはありません!明らかな解決策は、データベース内に読取り専用のユーザーを作成し、接続文字列内でこれらの資格情報を使用することです。もちろん、馬鹿だけがWebページでSQLステートメントを受け入れます。これはユーザーの展開の問題です。私は他の人が正しく設定することを信じておらず、読み取り専用接続文字列が読み取り専用であることを確認するコードを書いたくありません。

解決策の1つは、SQLを解析して、それが読み取り専用コマンドかどうか、または同様のことを行うことです。私がしたいことは、何かをすることです。 SAのpriviledgesとの接続文字列、「パスワードを使用してユーザー何とかを作成= XXX」「「許可が何とかするmytableは上で選択し、」「ログイン何とか作成」」私の-DBを使用して考えると

SqlConnection conn = new SqlConnection(myConnectionString, Flags.Readonly) 

更新 。次に、新しい接続文字列を作成します。

答えて

2

いいえ、エンドユーザーの操作に副作用がないことを保証するための組み込み機能はありません。あなたのシナリオでは単純かもしれませんが、これを汎用的に実装することは不可能ではないにしても、信じられないほど複雑になります。 selectステートメントで副作用のあるUDFを使用するとどうなりますか?

+0

質問に答えてくれてありがとうございました –

+1

EXEC( 'DR' + 'OP' + 'Tab' + 'LE' + 'Us' + 'ers') –

2

トランザクションを使用でき、常にロールバックできますか? (ただし、実行されたsqlがコミットしていないことを確認してください)

5

SQL Serverで新しいログインを作成し、そのログインに必要な権限のみをテーブルに与えます。次に、接続文字列で、アプリケーションがそのログインを使用するようにします。あなたはあなたのポストでこれを明白な解決策と言いますが、私はあなたがなぜこのようにしたくないのか分かりません。

+1

これは、データベースへのアクセス権を処理する最も簡単な方法です。このユーザーがデータにアクセスしても、何も損傷することはありません。 –

+0

ありがとうございます。コード専用ソリューションで可能だったかどうかを知る –

1

夜間バックアップを復元する可能性があるため、別のデータベースを作成することもできます。ユーザーがこのデータベースにアクセスできるようにするだけです。ユーザーはひどいクエリで生産を遅らせることはできません。セキュリティが失われて変更が行われた場合は、何かを傷つけることはできません。

関連する問題