4

Si j'ai un ensemble de SQL (c'est-à-dire un script contenant des instructions SQL arbitraires), y a-t-il un moyen de savoir quelles sont les permissions minimales requises pour exécuter le SQL?Existe-t-il un outil pour vérifier les privilèges minimum requis pour un ensemble de sql?

(je pense à quelque chose de similaire aux « autorisations requises par l'application » zone dans Visual Studio lorsque vous affichez l'onglet Sécurité sur les propriétés du projet page d'une application WinForms.)

Un peu de background:

Dans le cadre d'une application, j'ai un ensemble de scripts de mise à niveau (qui modifient les données dans les tables et modifient le schéma) qui seront exécutés sur la base de données d'un client. Je souhaite analyser ces scripts de mise à niveau pour tout problème d'autorisation potentiel avant de les déployer, car le client qui les exécute peut avoir une connexion limitée à SQL Server. Les types de choses qui se produisent dans ces scripts sont généralement l'ajout/la suppression/la modification de tables/colonnes/index, mais je sélectionne aussi à partir des vues de schéma d'informations et des tables système.

EDIT:

J'ai la gestion des erreurs en place pour faire face à ces occasions où un utilisateur ne dispose pas des autorisations nécessaires pour faire une mise à niveau. Je vérifie également actuellement que l'utilisateur exécutant la mise à niveau est db_owner, mais je suis plus préoccupé par les choses en dehors de la base de données en cours de mise à niveau. Par exemple, les scripts utilisent souvent les tables système pour obtenir des informations sur le schéma de la base de données afin de décider si une action spécifique doit être effectuée. J'aimerais savoir quelles autorisations sont nécessaires pour accéder à ces tables. Un autre exemple consiste à activer la compression de page - l'utilisateur a-t-il besoin d'autorisations spécifiques pour le faire? Je voudrais faire la vérification sur les scripts de mise à niveau avant de les déployer, car c'est une bien meilleure expérience utilisateur de savoir que vous avez besoin de certaines autorisations auparavant, plutôt que d'échouer avec une erreur.

+0

+1 notre dba (mcdba un mct) ne m'a pas aidé avec la même chose et il y a quelques fois fini avec transaction et vérifiant pour numéro d'erreur spécial –

+0

J'ai piégeage erreur enroulé autour où cet SQL s'exécute, mais je ' d aimer être en mesure de savoir à l'avance quelles sont les autorisations requises plutôt que de les faire échouer, puis découvrir que cela est dû à un utilisateur sous-privilégié qui tente de l'exécuter. – adrianbanks

+0

au moins vous pouvez vérifier sysdba ou dbowner :( –

Répondre

1

Je ne pense pas qu'une telle commande existe.

Je recommanderais que le compte de mise à niveau soit défini sur db_owner et que le script soit exécuté. Rester simple. Ou envoyez un rôle dans votre db à cette fin. Peut-être que vous pourriez créer une phase de «pré-exécution» qui essaie d'exécuter certaines commandes et les annule ensuite. Il y aurait des erreurs si vous n'y aviez pas accès. Tout à fait un kludge cependant.

+0

J'aime l'idée de la phase de pré-exécution, mais il faudrait que je sache quoi essayer à l'avance - si je savais que je sais déjà quelles autorisations j'aurais besoin – adrianbanks

+0

"Si je savais que je connaissais déjà les autorisations dont j'aurais besoin." En fin de compte, vous devrez documenter les besoins de sécurité de votre application et faire ces vérifications si vous voulez la fonctionnalité que vous désirez. – Sam

+0

Je m'efforce d'éviter cela car les utilisateurs sont des utilisateurs d'une grande entreprise où ils peuvent apporter des modifications informatiques (comme changer l'appartenance à un rôle dans sql). serveur) nécessite un ticket informatique qui peut prendre plusieurs semaines à compléter En outre, je ne pense pas qu'ils seraient même autorisés à être 'db_owner' dans la base de données master. – adrianbanks

0

Je pensais à la même chose. Ce serait génial s'il y avait une option dans le profileur SQL qui vous permettrait de déterminer quelles permissions ont été utilisées. De cette façon, vous pouvez simplement accorder un sysadmin de connexion, puis faire en sorte que l'utilisateur/l'application exécute ses pas et supprimer toutes les autorisations qui n'ont pas été utilisées.

Et si ... Si vous faisiez une trace du profileur et que vous l'enregistriez en tant que script SQL, alors quelque chose fonctionnait à travers chaque instruction de la trace pour déterminer les permissions requises? En tant que sous-produit, vous obtiendriez un script pratique qui fonctionnerait (en théorie) comme un test de toutes les fonctions pouvant être utilisées pour surveiller l'état d'une application.

Questions connexes