asp.NETでSQLプロシージャを実行させる方法と注意点

このQ&Aのポイント
  • ASP.NETの環境でSQLのプロシージャを実行する方法について調べました。プロシージャはテキストファイルを読み込んでデータベースに追加・削除する機能を持っています。
  • プロシージャを実行させるためには、.NETユーザーにサーバーロールのbulkadmin権限とユーザ権限のdd_ddladmin権限を付与する必要があります。
  • ASP.NETでプログラミングされている場合、一般的にはWEBログインユーザーに上記の権限を付与することはないようです。セキュリティ上の配慮が必要です。代わりに、危険だと判断される場合はサブプロシージャを使用することが推奨されています。
回答を見る
  • ベストアンサー

asp.NET内でSQLプロシージャを実行させた

お世話になります。  SQL2000+asp.NETの環境で、SQLのプロシージャを実行させようとしています。 このプロシージャはテキストファイルを読み込んでデータベースに追加・削除するもので、ここで使用している関数は  ・DELETE/UPDATE/INSERT  ・BULK INSERT  ・CURSOR です。このプロシージャを実行させるには「.NETユーザー」に対し、  サーバーロールにてbulkadmin  ユーザ権限にてdd_ddladmin の権限を付与すれば実行されることは確認しています。  ここで、ご質問なのですが、asp.NETでプログラミングされていらっしゃる方は、普通にWEBログインユーザーに上記権限を付与していらっしゃるのか知りたいのです。  逆に、この権限付与は危険だからsubプロシージャにて記述したほうがいいよとかお教えいただければ、と思います。  以上よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

セキュリティが気になるのでしょうか? 攻撃者にとって権限とかはあまり意味を成さないかと。 ご自信で自分の作ったプログラムに攻撃を仕掛けてみると分かると思いますが、権限があろうがなかろうと大して関係はありませんので。 権限が無くても、IISのプロセスに実行させてしまえば操作は全権限持ってるのと同様ですし。 セキュリティを意識するのであれば、POSTされたデータを直接通さない方がいいかと思います。 チェックボックスとかで数字以外入らないはずのフォームから文字列がきたりするので、そういったところをしっかりとエスケープしたりすることだけをしています。 自分は権限はとりあえず動けばいいので与えておいて、でもユーザーが起こすアクションには自由を与えないという風に作成していますね。 あまりセキュリティ対策に詳しくないので、自分が攻撃して突破できるところを全てふさいでいくっていう風に対策したらそうなりました。 ご参考までに。

MYCABIN
質問者

お礼

アドバイスありがとうございます。 私はaspでプログラムを作成しているときにSQLインジェクションに攻撃された経験があるもので、リクエストにおいてはそういった対処をしてきました。 asp.netになってからframework側でいくつかの対策が打たれているため、作業がしやすくなったとの認識があります。

関連するQ&A

  • プロシージャの実行

    ストアドプロシージャを実行させようと、プロシージャに実行権限を付与しました。(grant execute ・・・) その後実行しようとすると、 オブジェクト aaa_proc、データベース bbb、所有者 ccc について EXECUTE パーミッションが拒否されました とエラーになります。 aaa_proc は プロシージャ名。 bbbは プロシージャを書くときに use bbb と書いてるデータベースの名前。 cccは ユーザ名としてください。 他に何の権限を与えてやればいいのか、どなたかか教えてください。 宜しくおねがいします。

  • ASP.NETのユーザー権限について

    ASP.netとACCESSを接続しています。 INSERT文を記述して実行したところ、「更新可能なクエリであることが必要です」というエラーメッセージがでました。 これはmdbを保存しているフォルダにASP.netのユーザー権限がないから起こるエラーのようですが、ASP.netのユーザー権限はどのように設定するのでしょうか? ご存知の方がおられましたら教えて下さい。

  • Access(Jet4.0)SQLでGRANTが使用できない

    AccessでGrantを使った以下のようなSQLクエリを実行し、 特定のユーザに読み取り権限の付与・削除を 行おうとしているのですが、正常に実行されません。    grant select on [DbName] to [UserName] エラーの内容としては 『SQLステートメントが正しくありません。 'Delete'、'Insert'、'プロシージャー'、'Select'または 'update'を使用してください』 とのメッセージが表示されます。 管理者権限でログインしてユーザー権限のユーザを 指定して処理を行っています。 構文も間違っていないと思うので、原因がつかめず困惑しています。 心当たり、間違い等、可能性レベルでも結構ですので ご教授・ご指摘いただけますようお願いいたします。

  • SQL SERVER で大量データの削除

    delete from table1 where id = 1; delete from table1 where id = 2; delete from table1 where id = 3; もしくは、 delete from table1 where (id = 1) or (id = 2) or (id = 1) という具合のSQLを実行します。 条件は大体20万件程度です。 こちらを実行するとかなり遅いので、 なんとか一括で早く実行する方法はないものでしょうか? 今のところ、プログラムの都合上、プロシージャの中で行なってます。 PROCEDURE UPDATE(@DELSQL nvarchar(max)) EXEC (@DELSQL) @DELSQLに上記SQLが入ります。 大量のINSERTの時は、BULK INSERTのようなやり方があり、 回避できたのですが、困ってます。 どうかよろしくお願いします。

  • プロシージャのexecute権限

    ストアドプロシージャを作成し、createまで行ったのですが、実行させようとしたらexecute権限がありません というエラーが出たので、 調べたみたのですが、grantというのでexecute権限を付与してあげなくては いけないと知りました。 grantの書き方について教えてください。 プロシージャ名:test サーバー名:testserve ユーザ名:test の場合、どのようにtestというプロシージャに実行権を与えればよいのでしょうか?

  • MS-SQLプロシージャでファイルを削除したい

    お世話になります。 SQL Server 2005のプロシージャにて テーブルの削除→CSVファイルの取り込み→CSVファイルの削除を行いたいと思っております。 ALTER PROCEDURE [dbo].[テーブル削除+インポート+ファイル削除] AS begin DELETE FROM dbo.テーブル BULK INSERT テーブル FROM 'テキストファイル' WITH (DATAFILETYPE='char', FIELDTERMINATOR=',',ROWTERMINATOR='\n') end ここで、テーブル削除とCSVファイルのインポートはできたのですが、ファイルの削除が未だにできません。 このあとテキストファイルをこのプロシージャ内で削除するにはどうすればよいでしょうか。

  • SQLの実行速度

    XMLを解析し、テーブル内を検索するシステムを 作成しているのですが、 ストアドプロシージャ内でSQL文を作成し実行するのと ASP.NET などからSQL文を作成して実行するのとでは、 実行速度に差はでるのものなのでしょうか。 ・SQLServer 2005 ・SELECT の対象テーブルは2~3つのテーブルをINNER JOIN して使う。 ・検索対象の列は実行のたびに異なる。 よろしくおねがいします。

  • ストアドプロシージャで外部プログラムを起動するには?

    こんにちは。 SQL Serverから外部プログラムを呼び出すストアドプロシージャを作りたいと思っていますがなかなか上手くいきません。 データベースの内容が変わったときに(INSERT,DELETE等で)特定の外部プログラムを実行するストアドプロシージャを作りたいと思っています。 (SQL Serverに関してまったくの素人なので言葉に誤りがあるかもしれません) 外部プログラムを呼び出す機能として、拡張ストアドプロシージャでxp_cmdshellというものがあるらしいのですが、sysadminユーザしか使うことが出来ず、セキュリティ上にも問題があるとのことなので、xp_cmdshellを使わずに外部プログラムを呼び出す方法を探しています。 具体的な方法、ソース等ありましたら、教えてもらえないでしょうか? また、そんなこと出来ないと言ったことでも教えてもらえると助かります。 現在の環境 Windows XP Professional SQL Server 2005 Developer Edition 宜しくお願いいたします。

  • テーブルの権限 またはユーザの権限

    お世話になっております。 サーバーをいじること自体がはじめてで迷走しています; どうかご助言お願いします >< SQL Serverにおいて ユーザ「9999」がいるとします。 またDB「AA」「BB」「CC」「DD」があり、各DBに「9999」はログインできるようになっています。 各DB内にはそれぞれ複数のテーブルが存在します。 そして各テーブルでは「9999」に 「SELECT、INSERT、UPDATE、DELETE」の権限を与えてあります  ←今ココです そこで質問なのですが、 (1)ユーザ「9999」に与えてあるSELECT等の権限を確認するSQL文は存在しますでしょうか。   →「9999」がどのDBのどのテーブルにどの権限を持っているのか、など。 (2)もしくはDBごとに、どのユーザがどのテーブルに対してどの権限を持っているかを   確認するSQL文はありますでしょうか。   →テーブルごとでも結構です。 「権限を確認するSQLはあるよ」と 先輩に言われ、必死に探しておりますがOracleのものしか見つかりません。。。 とりあえず「9999」がそのテーブルに対して権限を持っているということを 証明したいのです。  ※テーブルのプロパティで権限付与を行ったため、    同じ方法で確認するのは意味がないと言われてしまいました どうかよろしくおねがいします。

  • PL/SQL ストアドプロシージャが実行できません

    はじめまして、ほんの最近プログラムの世界に入ったキグと申します。 2週間、インターネットや参考書(ポケットリファレンス、PL/SQL入門)などで調べていたのですが分かりませんでしたので質問させていただきます。 ORACLE11gパーソナルエディションでやっています。 (CSEで作成実行しました。) **************************** 作ったSQL文 CREATE OR REPLACE PROCEDURE PRO_1 IS BEGIN (実行確認できたSELECT文) END ※試してみたこと、 SELECT文の列指定はアスタを使わずに書きました。 AUTHID CURRENT_USERをプロシージャ作成のときに入れてみました。  **************************** EXEC PRO_1 エラー→構文エラーまたはアクセス違反です。 BEGIN PRO_1; END; エラー→オブジェクト'PRO_1'が無効です。 上記エラーが出まして実行できていない状態です。 解決方法が分かる方いらっしゃいましたら、ぜひ回答を お願いしたいです。 以上よろしくお願い申し上げます。

専門家に質問してみよう