7
votes

Server Microsoft SQL: Vérifiez les utilisateurs de propres autorisations

J'ai une base de données Microsoft SQL Server et un ensemble d'utilisateurs.

Maintenant dans mon application, je souhaite faire une fonctionnalité uniquement visible si l'utilisateur a saisi le nom d'utilisateur et le mot de passe avec certains droits (admin).

Étant donné que les bases de données et les noms d'utilisateur et leurs droits peuvent changer, comment puis-je vérifier les autorisations / droits d'un utilisateur Microsoft SQL Server?


3 commentaires

Pouvez-vous clarifier - quel type de fonctionnalité doit être visible en fonction du nom d'utilisateur // mot de passe? N'oubliez-vous pas le nom d'utilisateur et le mot de passe de votre base de données ou voulez-vous dire qu'il s'agit d'un nom d'utilisateur / mot de passe dans le dossier SQL Server Security? On dirait que vous souhaitez implifier vos propres niveaux de sécurité ou un drapeau de votre table utilisateur - utilisateur {nom d'utilisateur, mot de passe, isadmin}, puis dans votre application, lorsqu'ils se connectent que vous pouvez vérifier sont-ils un administrateur? Si oui, la fonctionnalité supplémentaire, sinon, cache-la. De plus, si vous avez de nombreux niveaux d'accès différents, envisagez d'utiliser une table séparée


Non je pas de fonctionnalité supplémentaire. Pour le mettre en termes simples. Imaginez qu'il y a des groupes d'utilisateurs. Il ne peut s'agir d'interroger que le serveur. La seconde peut interroger et effectuer des relevés d'insertion. Le troisième peut également créer des vues ... et ainsi de suite. En fait, je veux juste savoir ce que l'utilisateur actuel est autorisé à faire dans la base de données.


D'ailleurs. Ne pas être correctement fixé sur des groupes. Ils n'ont pas besoin d'être organisés en groupes. Juste plusieurs utilisateurs avec des autorisations différentes. Je veux juste désactiver la fonctionnalité de l'application, que le dbuser actuel ne peut pas utiliser car il n'a pas la permission nécessaire sur la base de données.


3 Réponses :


1
votes

Je ne suis pas totalement certain que je comprenne votre définition de problème, cependant, en supposant que je fais .....

Je vous suggère de créer un rôle de base de données SQL Server que vous pouvez ajouter les utilisateurs d'applications correspondants, peut-être via une adhésion de groupe maintenue dans l'application (ou un groupe de domaine Windows). Vous pouvez utiliser le groupe à la mappage de rôle pour gérer indépendamment l'adhésion à l'utilisateur, de gérer les autorisations pertinentes aux securables dans la base de données via le rôle.

De cette façon, il vous suffit de vérifier qu'un utilisateur d'application est membre du groupe d'applications ou Windows correspondant, sans qu'il soit nécessaire d'interroger la configuration de sécurité de SQL Server.


1 commentaires

D'une perspective de conception, je ne vois toujours pas pourquoi vous devez "vérifier" les autorisations. Les autorisations sont accordées au moyen de l'adhésion au rôle approprié, à laquelle l'authentification de l'utilisateur que vous avez mise en place est valide. Créez simplement un rôle avec les droits «administrateurs» requis et un rôle avec les droits d'utilisateur requis. Ensuite, ajoutez / cartographiez les utilisateurs aux rôles correspondants. Vous n'avez alors pas besoin de vérifier / de valider les autorisations car le fait que l'utilisateur puisse se connecter avec les informations d'identification correctes sert cet objectif.



7
votes

Vous pouvez vérifier la droite de l'utilisateur actuel sur certains securables à l'aide de [sys.fn_mypermissions] [1] code> qui renvoie toutes les autorisations sur le sécurisé. Vous pouvez également vérifier une autorisation spécifique avec has_perms_by_name code> a >. Par exemple. Vous pouvez rechercher Control Server CODE> Permission qui implique un administrateur est connecté:

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


1 commentaires

Merci, c'est ça. Je peux maintenant vérifier par exemple si l'utilisateur a l'insert à droite sur une certaine base de données: Sélectionnez HAS_PERMS_BY_NAME («Databasename», «Base de données», 'Insérer') comme Expr1. Et consultez également d'autres autorisations en fonction du lien de documentation que vous avez inclus.



2
votes

Le moyen le plus simple de le faire consiste à utiliser le is_member ('rolename') fonction, qui vérifie si l'utilisateur est dans le rôle / le groupe 'db_owner' . La fonction effectuera un chèque au niveau de la base de données et renvoie 1 (int32), si l'utilisateur a le rôle spécifié.

Si vous avez besoin de vérifier au niveau du serveur, vous pouvez utiliser la fonction IS_SRVRolememberMembre. Les deux sont disponibles depuis SQL Server 2005.


0 commentaires