2017-11-28 8 views
0

SQL Serverデータベース内のテーブルに追加専用モデルを使用して、この使用法を強制する方法を探しています。テーブルに追加できる制約があり、更新を許可しないが、その行には何も見つかりませんでした。テーブルを追加するためのT-SQL制約

テーブルレベルの権限でSQLユーザーの更新権限を拒否できましたが、別のSQLユーザーがそのテーブルを更新できないことを保証できません。

DENY DELETE ON [dbo].[append_only] TO [public] 
DENY UPDATE ON [dbo].[append_only] TO [public] 

トリガーは仕事をすることができますが、私は彼らが簡単に発見できないと思うので、長年にわたりそれらを避けています。

その他のオプションはありますか?

+1

このサーバーで唯一のシステム管理者ですか?あなたのテーブルをsysadminから守るために何もできません。ほとんどの場合、db_ownerでもすべての "保護"を回避することができます。 – sepupic

+0

権限が昇格したユーザがカスタムSQLを実行して変更するテーブルの内容私は主に、開発中にこの特定のテーブルの行を更新しないように私に思い出させたいと思っています。 –

答えて

0

SQLユーザーの試行と更新または削除時にエラーが発生するようにトリガーを定義することができます。

create table append_only (
    id int identity primary key, 
    val nvarchar(50) 
) 

create or alter trigger append_only_monitor 
on append_only 
instead of update, delete 
as throw 51000, 'This table is meant to be append-only.', 1; 
+0

多くの方法があります。たとえば、そのテーブルに対してDENY UPDATE/DELETEはありません。依然として権限を与えられたユーザは、 'TRUNCATE TABLE append_only'をEXECUTEすることができ、あなたのトリガはデータを保護できません。 – lad2025

+1

また、あなたのトリガは 'AFTER'です。パフォーマンス上の理由から、おそらくINSTEAD OFトリガを使用します。 – lad2025

関連する問題