Microsoft SQL Server: vérifier les users propres permissions

J'ai une database de Microsoft SQL Server et un set d'users. Maintenant, dans mon application, je veux rendre certaines fonctionnalités visibles uniquement si l'user a entré un nom d'user et mot de passe avec certains droits (admin). Étant donné que les bases de données et les noms d'user et leurs droits peuvent changer, comment puis-je vérifier quelles sont les permissions / droits d'un user de Microsoft SQL Server?

Vous pouvez vérifier le droit de l'user actuel sur certains sécurables en utilisant [sys.fn_mypermissions][1] qui renvoie toutes les permissions sur le sécurable. Vous pouvez également vérifier une autorisation spécifique avec HAS_PERMS_BY_NAME . Par exemple. vous pouvez vérifier l'autorisation CONTROL SERVER qui implique qu'un administrateur est connecté:

 SELECT HAS_PERMS_BY_NAME(null, null, 'CONTROL SERVER'); 

Je ne suis pas tout à fait certain que je comprends votre définition de problème cependant en supposant que je fais …..

Je suggérerais que vous créiez un rôle de database SQL Server auquel vous pouvez append les users d'application appropriés, peut-être via une appartenance à un groupe maintenue dans l'application (ou un groupe de domaines Windows). Vous pouvez utiliser le groupe pour mapper les rôles afin de gérer de manière indépendante l'appartenance des users, de la gestion des permissions pertinentes aux éléments sécurisés dans la database via le rôle.

De cette façon, il suffit de vérifier qu'un user de l'application est membre de l'application ou du groupe de windows concerné, sans avoir à interroger la configuration de security de SQL Server.

La méthode la plus simple consiste à utiliser la fonction IS_MEMBER, qui vérifie si l'user se trouve dans le rôle / groupe db_owner. La fonction effectuera une vérification au niveau de la database. Si vous avez besoin de vérifier au niveau du server, vous pouvez utiliser la fonction IS_SRVROLEMEMBER. Les deux sont disponibles depuis SQL Server 2005.