2015-10-29 2 views
3

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

  1. Deny UPDATE à la colonne f2 et accorder UPDATE aux colonnes f1 et f3 pour user1.

  2. Attribuez UPDATE à la colonne f2 et refusez UPDATE aux colonnes f1 et f3 pour user2.

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.

+0

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'! –

+0

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

Répondre

1

Vous pouvez essayer comme ceci:

GRANT UPDATE ON dbo.tblTest(f1,f3) TO user1; 
DENY UPDATE ON dbo.tblTest(f2) TO user1; 
+0

J'ai essayé. Mais le résultat est le même avec le même message du serveur. Les colonnes f1 et f3 ne sont pas mises à jour. – LukeLuke

+0

@LukeLuke: - Avez-vous vérifié que votre colonne a l'autorisation de mise à jour? On dirait que vous avez également défini l'autorisation de mise à jour de DENY pour f1 et f3. –

+0

oui, je l'ai vérifié au moins dix fois. – LukeLuke

0

Avez-vous essayé ceci:

grant update(column-name) on table-name to user-name 

police: Grant alter on only one column in table

+0

J'ai essayé. Mais le résultat est le même avec le même message du serveur. Les colonnes f1 et f3 ne sont pas mises à jour. – LukeLuke