web-dev-qa-db-fra.com

Comment restreindre la suppression d'une ligne spécifique d'une table SQL Server

Je souhaite restreindre la suppression d'une ligne spécifique. Par exemple, si quelqu'un souhaite tronquer une table ou supprimer tous les enregistrements de la table, un message d'erreur doit être renvoyé, pour un identifiant particulier, il n'est pas autorisé. J'ai utilisé le déclencheur pour le même mais il est inutile, car il ne se déclenche pas sur tronquer

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

Si vous utilisez SQL Server 2016 ou une version ultérieure, vous pouvez envisager Sécurité au niveau de la ligne

Sinon, vous pouvez restreindre l'accès à des lignes spécifiques à l'aide des vues. Liens utiles:

Escalier vers SQL Server Security Level 10: Row-Level Security

Sécurité au niveau des lignes de SQL Server 2016

restriction et surveillance de l'accès aux données SQL Server avec des vues SQL et des procédures stockées

0
George K

TRUNCATE TABLE nécessite l'autorisation ALTER sur la table. La meilleure façon d'éviter de tronquer une table est de révoquer cette autorisation.

De plus, TRUNCATE TABLE ne peut pas activer un déclencheur car l'opération ne consigne pas les suppressions de lignes individuelles.

Voir plus sur TRUNCATE TABLE (Transact-SQL)

4
user179264

Je suis d'accord que les autorisations sont le moyen préféré pour gérer certaines opérations (comme TRUNCATE TABLE).

Si cela ne le coupe pas, alors spécifiquement pour TRUNCATE TABLE, vous pouvez avoir une clé étrangère se référant d'une autre table à cette table. Cette autre table peut être une table fictive et elle peut être vide. Vous pouvez même désactiver le FK. La présence du FK interdit TRUNCATE TABLE.

Mais, bien sûr, avec suffisamment de privilèges, cet utilisateur peut toujours faire des choses comme supprimer le FK, déposer et recréer la table. Etc.

4
Tibor Karaszi