Déterminer les différences de sécurité entre deux utilisateurs de la base de données de serveurs SQL

sqlbulkcopy sql-server sql-server-2012 ssms tsql

Question

Nous utilisons SQL Server 2012 / .Net Framework 4.5.1

Nous avons une application qui fait ce qui suit:

  1. Extrayez toutes les données de table d'une base de données source à l'aide d'une instance de SqlBulkCopy .Net.
  2. Supprimez toutes les données d'une base de données cible à l'aide d'instructions SQL classiques.
  3. Déployez les données de la base de données source sur la base de données cible à l'aide d'une instance de SqlBulkCopy .Net.

La troisième étape aboutit lorsque la connexion SQL utilise mon compte Active Directory, mais échoue avec le message d'erreur suivant lors de l'utilisation d'un compte SQL Server créé à cette fin: Impossible de trouver l'objet "[SchemaName]. [TableName]" car il ne le permet pas. existe ou vous n'avez pas les autorisations.

Fait intéressant, le processus parcourt environ une douzaine de tables avant d'en atteindre une qui provoque cette erreur. La vérification manuelle prouve que a) la table existe sur la cible, b) l'utilisateur à problème peut sélectionner dans la table, et c) l'utilisateur à problème peut insérer manuellement dans la table avec le nom standard INSERT INTO [SchemaName]. [TableName] ([ Colonnes]) Format VALUES ([Values]). BCP fonctionne également pour cet utilisateur, mais l'utilisation de SqlBulkCopy à partir d'une application .Net échoue pour le même utilisateur.

Notre DBA (un type plutôt chevronné, pour autant que je sache, en fait) indique que les autorisations de la base de données sur la base de données cible sont IDENTIQUES entre les deux utilisateurs, mais la réalité semble suggérer que ce n'est pas le cas.

Googler le problème montre que l'utilisateur devrait avoir les rôles db_owner ou db_ddladmin. L'utilisateur appartient en réalité aux deux.

Quoi qu'il en soit, résoudre le problème local est une préoccupation secondaire, car je peux faire ce que j'ai besoin de faire avec mon compte AD. Ce que j'aimerais vraiment savoir, c'est s'il existe une méthode intégrée pour comparer les différences d'autorisations entre deux utilisateurs. Sinon, cela peut-il être fait avec une requête T-SQL?

Merci les gars et les filles!

Réponse populaire

Voici mon script d'autorisations que j'utilise. C'est généralement l'approche que tout le monde utilise, à moins de disposer d'un produit de comparaison de schéma via Visual Studio, Red Gate, etc. http://www.csvreader.com/posts/permissions_list.php

Spécifiez-vous le schéma sur la table de destination avec SqlBulkCopy? Est-il possible que vous rencontriez une instance de schéma appartenant à un utilisateur?

D'après mon expérience, SqlBulkCopy requiert uniquement la sélection et l'insertion dans la table de destination. BCP nécessite les autorisations remontées que vous avez décrites, ce qui constitue un autre avantage de SqlBulkCopy.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi