2017-01-05 12 views
0

ASPページを介してユーザーがデータベースでクエリを実行できるようにしたいが、このクエリを読み取り専用に制限したい。クエリの読み取り専用句

これらのシナリオでは、ASP自体(単語の削除、更新、削除などの検出)ではなく、クエリを実行できるように検出しようとしますが、フラグを追加する方法はありますか私のASPがそれを提出してその内容に関係なく読み取り専用として実行するとき、クエリに?

これが可能であれば、更新/削除/削除ステートメントがエラーになることがわかりました。これは問題ありません。

また、DB全体またはテーブルを読み取り専用に設定しないようにしたいと考えています。

また、どのような形式でもデータベースを複製したくありません。

ありがとうございます。

ダン

+0

なぜストアドプロシージャを使用しませんか?それ以外の場合は、選択権限のみを持つユーザー/ログインを使用してください。 –

+0

こんにちは、ユーザー/パスワードのアイデアは良いものです。ありがとう!ストアドプロシージャに関しては、それらのクエリにペンをつけてもらいたいので、ストアドプロシージャがここで助けてくれるのかどうか、どうやって理解するのか分かりません。 – DanC

+0

ユーザが任意のSQLを提出できるようにしておけば、読んでもらうことができれば悪意のある可能性があります。私。すべてのテーブルをロックし、何十億もの結果行を構築しようとするときに、ほとんどのサーバーリソースを消費する任意の大きなクエリを作成できます。 –

答えて

0

ありがとうアラン・S.ハンセン、私は良い効果にユーザ名/パスワード方式を使用していました。

0

クエリは動的である必要があります。主な問題 - SQLインジェクション。 私はこの方法をお勧めします:

  1. create database role [DYNAMIC_SQL]。 [DYNAMIC_SQL]ロールにテーブルに対して必要な選択権限を与えます。
  2. ログインなしでデータベースユーザーを作成します[dynamic_sql_proxy]。 [DYNAMIC_SQL]ロールを使用したマップ。
  3. ハード・コード化された実行権を持つプロシージャ[dynamic_sql__call]を[dynamic_sql_proxy]として作成します。この手順にカスタムクエリを渡します。

スクリプト: (1)

USE [your_db] 
GO 
CREATE ROLE [DYNAMIC_SQL] 
GO 


GRANT SELECT ON [dbo].[your_table] TO [DYNAMIC_SQL] AS [dbo] 
*** 

(2)

CREATE USER [dynamic_sql_proxy] WITHOUT LOGIN WITH DEFAULT_SCHEMA = [dbo] 
ALTER ROLE [DYNAMIC_SQL] ADD MEMBER [dynamic_sql_proxy] 

(3)

CREATE PROCEDURE [dbo].[dynamic_sql__call] 
    @err_code  INT    OUTPUT 
    ,@err_msg  NVARCHAR(4000) OUTPUT 
    ,@sql   NVARCHAR(MAX) 
WITH EXECUTE AS 'dynamic_sql_proxy' 
AS 
BEGIN 

    SET @err_code = 0; 
    SET @err_msg = SPACE(0); 

    BEGIN TRY 

     EXEC(@sql); 

    END TRY 
    BEGIN CATCH 

     PRINT 'Please handle your error'; 

    END CATCH; 

    RETURN @err_code; 

END; 
関連する問題