web-dev-qa-db-ja.com

SQL Serverテーブルの特定の行の削除を制限する方法

特定の行の削除を制限したい。たとえば、誰かがテーブルを切り捨てたり、テーブルからすべてのレコードを削除したりする場合、エラーメッセージがスローされます。特定のIDの場合は許可されません。同じようにトリガーを使用しましたが、トランケート時にトリガーされないので、役に立ちません

Create TRIGGER vendorTrigger
    ON [Vendor]
    INSTEAD OF DELETE
AS
    IF EXISTS(SELECT * FROM Vendor WHERE VendorId = 515)
    BEGIN
        RAISERROR ('Is not allowed to delete VendorId: 515 as it is of type corpnet',16, 1)  
    END
    ELSE
    BEGIN
       Delete from Vendor Where VendorId in (Select VendorId From Vendor)
    END
2
Janvi

SQL Server 2016以降を使用している場合は、検討することをお勧めします 行レベルのセキュリティ

そうでない場合は、ビューを使用して特定の行へのアクセスを制限できます。役立つリンク:

SQL Serverセキュリティレベル10への階段:行レベルのセキュリティ

SQL Server 2016行レベルセキュリティ

SQLビューとストアドプロシージャを使用したSQL Serverデータアクセスの制限と監視

0
George K

TRUNCATE TABLEには、テーブルに対するALTER権限が必要です。テーブルの切り捨てを防ぐ最善の方法は、その権限を取り消すことです。

さらに、この操作では個々の行の削除がログに記録されないため、TRUNCATE TABLEはトリガーをアクティブ化できません。

詳しくは TRUNCATE TABLE(Transact-SQL) をご覧ください

4
user179264

アクセス許可は、特定の操作(TRUNCATE TABLEなど)を処理するための好ましい方法であることに同意します。

それでもうまくいかない場合は、特にTRUNCATE TABLEの場合、他のテーブルからこのテーブルを参照する外部キーを持つことができます。他のテーブルはダミーテーブルにすることができ、空にすることができます。 FKを無効にすることもできます。 FKが存在するため、TRUNCATE TABLEは禁止されています。

しかし、もちろん、十分な権限があれば、そのユーザーはFKの削除、ドロップ、テーブルの再作成などの操作を実行できます。等。

4
Tibor Karaszi