- ベストアンサー
あるテーブルのデータを追加、更新、削除できないようにするには?
SQLServer2000 あるテーブルのデータを追加、更新、削除できないようにするにはどのようにしたらいいでしょうか。 どなたかご存知の方、お教え下さい
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#1です。 ユーザ名がdboって、要はsaアカウントに対して制限を掛けようとしているということですか? 基本的にsysadminを持っている人は「何でもできる人」ですから、発想的に無理がありますよ。その点は認識してください。 (方法1) SQL Serverはテーブル単位に読み取り専用にする機能がありませんので、 ・ファイルグループを新設し(SECONDARYなど)、そこにデータファイルを追加します。 ・新設したファイルグループに、対象テーブルを新規に作成し、そこにデータを移します。 (テーブル自体を「移動」することはできないと思います) ・新設したファイルグループを読み取り専用にします。 基本的には全部GUIでできます。 上記の通り、テーブルの再作成ができることが条件で、これをやるとファイルグループの属性を変更しない限り、「例外なく」誰も更新できません。ただ、sysadmin権限を持っている人がファイルグループの属性を変更しようとしても、阻止できません。 (方法2) 条件付きですし、ちょっと姑息なのでおまけです。 INSTEAD OFトリガは、更新処理自体は行わないため、トリガ内で更新処理を書かないと何もしません。 (RAISERRORも書かなければ、実行したときにあたかもうまくいったように見えます) CREATE TRIGGER tr_(テーブル名) ON dbo.(テーブル名) INSTEAD OF INSERT,UPDATE,DELETE AS BEGIN SET NOCOUNT ON RAISERROR('Insert/Update/Delete is not allowed',16,1) END ただし、この方法は制限を掛けたいユーザがトリガをオフにする方法を知っているとアウトです。 ユーザがトリガをオフにする方法を知っている場合は、それを阻止する方法はありません。
その他の回答 (2)
- todo36
- ベストアンサー率58% (728/1234)
ロールを利用したグループ単位での権限設定 http://www.atmarkit.co.jp/fnetwork/rensai/sql18/sql1.html
お礼
ご回答ありがとうございます。 大変参考になりました
- jamshid6
- ベストアンサー率88% (591/669)
対象のユーザがsysadmin権限を持っていないことが条件です。 DENY INSERT,UPDATE,DELETE ON (テーブル名) TO (ユーザ名)
補足
早速のご教授ありがとうございます。 ご教授いただいた記述をユーザー名であるdboに対して実行しましたが、 反映されませんでした。 おそらくご指摘のようにdboにはsysadmin権限があるせいだと思います。 当方のシステムのユーザーはdboしかなく、新たにユーザーを作るのはかなり大変のように思います。 そこでお尋ねしたいのですが、ユーザーがdboであってもデータの追加、変更、削除ができないようにする方法はないのでしょうか
お礼
丁寧に教えていただきありがとうございます。 今までこのようなことを想定せずにSQLServer+アクセスプロジェクトで小規模システムを作ってきましたが、大変参考になりました。 次のシステムを作る時に参考にしたいと思います。 ありがとうございます