アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLServer2000

あるテーブルのデータを追加、更新、削除できないようにするにはどのようにしたらいいでしょうか。
どなたかご存知の方、お教え下さい

A 回答 (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

ただし、この方法は制限を掛けたいユーザがトリガをオフにする方法を知っているとアウトです。
ユーザがトリガをオフにする方法を知っている場合は、それを阻止する方法はありません。
    • good
    • 0
この回答へのお礼

丁寧に教えていただきありがとうございます。
今までこのようなことを想定せずにSQLServer+アクセスプロジェクトで小規模システムを作ってきましたが、大変参考になりました。
次のシステムを作る時に参考にしたいと思います。
ありがとうございます

お礼日時:2009/12/09 09:29

ロールを利用したグループ単位での権限設定


http://www.atmarkit.co.jp/fnetwork/rensai/sql18/ …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
大変参考になりました

お礼日時:2009/12/09 09:32

対象のユーザがsysadmin権限を持っていないことが条件です。



DENY INSERT,UPDATE,DELETE ON (テーブル名) TO (ユーザ名)

この回答への補足

早速のご教授ありがとうございます。

ご教授いただいた記述をユーザー名であるdboに対して実行しましたが、
反映されませんでした。
おそらくご指摘のようにdboにはsysadmin権限があるせいだと思います。
当方のシステムのユーザーはdboしかなく、新たにユーザーを作るのはかなり大変のように思います。

そこでお尋ねしたいのですが、ユーザーがdboであってもデータの追加、変更、削除ができないようにする方法はないのでしょうか

補足日時:2009/12/08 11:20
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す