Comment la Requête D'Utilisateur Spécifiques des Droits d'Accès
J'ai une vieille base de données que j'hérite. Les droits d'accès ne sont pas clairement définie n'importe où et je suis à la recherche d'un moyen rapide d'obtenir pour tout le monde. Disons que je suis un utilisateur dans ma base de données qui n'appartiennent pas à l'une adhésion des rôles. Cependant, ils ont eu accès à des tâches spécifiques à des tables. Par exemple, ils peuvent exécuter des requêtes select sur la table X et d'exécuter des requêtes de mise à jour sur la table Y. je sais que je peux trouver ce qu'ils ont en allant dans les propriétés de chaque utilisateur. J'imagine, cependant, qu'il y a un système de table quelque part qui a tous ce qui y sont définis et la rend facilement interrogeable. Et quelle serait cette requête.
Pour info: je travaille avec SQL Server 2005
Mise à jour: il y a aussi une façon de faire cela pour toutes les bases de données sur le serveur?
OriginalL'auteur Jason | 2009-12-18
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à la Catalogue De Sécurité Vues, puis vérifier MrDenny la réponse de ici qui donne une requête à la liste des droits de l'utilisateur. Je reproduis ici (rangé à mon goût)..
OriginalL'auteur doza
Les choses sont un peu plus compliqué en fait. Les autorisations effectives sont une combinaison de la base de données interne des autorisations (queryable que Denny requête a montré ci-dessus par doza) et windows appartenance à un groupe. Th plus tard, malheureusement, est stocké à l'extérieur de SQL, dans le schéma AD de sorte que vous ne pouvez pas vraiment requête.
Donc, si votre but est de présenter l'Accès de la table de X est donnée de domaine\someuser et de domaine\somegroup et refusé de domaine\someothergroup", alors vous pouvez utiliser le catalogue de métadonnées et de les interroger, comme l'ont montré dans doza post.
Toutefois, si votre but est de répondre " N'utilisateur de domaine\someuser avoir accès à la table X?", vous ne pouvez pas obtenir la réponse de la requête ci-dessus. C'est vrai, malgré le fait que vous voyez un dossier disant le domaine\someuser est accordé l'accès, vous ne peut pas réponse si il a un accès effectif. Rappelez-vous qu'un seul nier l'emporte sur toutes les subventions, et si de domaine\utilisateur est membre de domaine\someothergroup groupe de domaine\someuser est effectivement refusé accès.
Pour répondre à la dernière question, vous devez utiliser un autre mécanisme, à savoir que vous devez emprunter l'identité de l'utilisateur au niveau SQL et vérifier l'autorisation via HAS_PERM_BY_NAME:
Est intéressant de noter que la première question peut être répondue par toute personne disposant de privilèges d'affichage sur la sécurité des catalogues, tandis que le plus tard nécessite d'usurper l'identité d'autorisation, un beaucoup plus puissant privilège.
OriginalL'auteur Remus Rusanu