Bonjour. J'explique mon scénario. Il y a deux utilisateurs (user1 et user2). J'ai une table (tblTest) dans le serveur SQL avec 3 colonnes (f1, f2, f3). Ce que je veux faire est la suivante:SQL Server - Restreindre UPDATE aux colonnes spécifiques
Deny
UPDATE
à la colonne f2 et accorderUPDATE
aux colonnes f1 et f3 pouruser1
.Attribuez
UPDATE
à la colonne f2 et refusezUPDATE
aux colonnes f1 et f3 pouruser2
.
Pour l'instant je suis bloqué à l'étape 1).
Voici ce que je faisais:
Dans SQL Server I sélectionné tblTest => Properties => Permissions
, user1 sélectionné. En bas de la page "Permissions for user1" => Mettre à jour le bouton "Column Permissions", cocher Deny pour f2 et Grant pour f1 et f3.
Ensuite, j'ai accédé à SQL Server avec les informations d'identification user1
et j'ai essayé de mettre à jour une ligne dans cette table.
Il est évident que la commande a échoué avec ce message:
L'autorisation UPDATE a été refusée sur la colonne 'f2' de l'objet 'tblTest', base de données 'dbremarksSQL', schéma 'dbo'.
Tout a fonctionné comme prévu. Mon problème est que les autres colonnes ne sont pas mises à jour. Je voudrais que la commande de mise à jour mettrait à jour les colonnes f1 et f3, au moins, et en refusant la mise à jour juste à f2 (en laissant tel quel).
Est-ce possible?
Merci
BTW I utiliser SQL Server Management Studio 2014.
Essayez-vous de mettre à jour plusieurs colonnes - y compris 'tblTest.f2' - dans une seule instruction 'UPDATE', et vous vous attendez à ce que' f2' ne soit pas mis à jour, mais les autres colonnes sont? Ce n'est pas ainsi que fonctionne SQL Server - si vous exécutez une instruction qui échoue en raison d'un manque d'autorisations, ** rien ** de cette instruction n'est exécutée! Si vous voulez mettre à jour d'autres colonnes comme 'User1' - utilisez une instruction' UPDATE' appropriée qui ** ne mentionne pas ** la colonne 'f2'! –
Bien! Je vous ai compris. Merci pour la clarification. Ensuite, dans ce cas, je pense que je ne peux pas utiliser l'instruction suivante dans mon futur programme de vb.net: MyDatabaseBindingSource.EndEdit() MyDatabaseTableAdapter.Update (MyDataSet.tblTest) parce qu'il est une seule instruction UPDATE. Ai-je raison? INFO: le scénario ci-dessus était un dépannage pour comprendre pourquoi ce MyDatabaseTableAdapter.Update (MyDataSet.tblTest) ne fonctionnait pas avec le même effet. – LukeLuke