Sécurité de la string de connection SQL

Nous avons un site Web interne asp.net fonctionnant sous IIS avec Windows Security. D'après ce que je comprends (et observe) cela signifie que chaque thread s'exécute en utilisant les informations d'identification de l'user qui se connecte au site Web.

Le site Web se connecte à une database SQL Server 2014. Nous utilisons un nom d'user et un mot de passe SQL Server pour établir la connection. En regardant MSDN, je vois que l'utilisation de l'authentification SQL Server n'est pas recommandée.

Le mot de passe pour la connection au count SQL Server. Non recommandé Pour maintenir un niveau de security élevé, nous vous recommandons fortement d'utiliser le mot key Integrated Security ou Trusted_Connection. SqlCredential est un moyen plus sécurisé de spécifier les informations d'identification pour une connection qui utilise l'authentification SQL Server.

Depuis la suppression de Windows Security pour le site Web n'est pas une option, les seules options que je vois suivre les conseils de MSDN est:

  1. Ignorer les conseils MS et continuer à utiliser l'authentification SQL comme nous sums

  2. Donnez à chaque user de site Web le même access à SQL Server que les informations d'identification SQL Server actuelles. Cela signifie que si un user se connecte directement au server, il peut exécuter ses propres requêtes au lieu de se limiter à ce que nous avons codé. Peut-être qu'une sorte de règle de pare-feu pourrait résoudre ce problème. L'entreprise n'est pas fan de cette idée (je ne suis pas non plus)

  3. Donnez à chaque user un access de connection (aucune autre autorisation) et utilisez un rôle d'application pour fournir des permissions lorsque l'user se connecte via le site Web.

  4. Chaque fois qu'une connection est établie avec SQL Server, elle doit être effectuée sur un thread qui emprunte l'identité d'un user de domaine ayant un access.

Aucune de ces options ne sonne mieux que d'utiliser un nom d'user et un mot de passe SQL Server.

Quelle est la méthode recommandée pour se connecter à la database?

Nous avons un site Web interne asp.net fonctionnant sous IIS avec Windows Security. D'après ce que je comprends (et observe) cela signifie que chaque thread s'exécute en utilisant les informations d'identification de l'user qui se connecte au site Web.

Correct.

Le site Web se connecte à une database SQL Server 2014. Nous utilisons un nom d'user et un mot de passe SQL Server pour établir la connection.

OK, pendant ce process, vous perdez les jetons de security Windows / NTLM transmis au site Web.

[… options …]

Les rôles d'application constituent la solution formelle pour cette tâche. L'option (4) fonctionnera également, mais a un surcoût pendant l'authentification. Pourtant, je voudrais pour l'option "ne se soucient pas" et c'est pourquoi:

J'ai mis en place le protocole TDS il y a quelque time. (Les détails du protocole peuvent être trouvés sur MSDN ici: https://msdn.microsoft.com/en-us/library/dd357628.aspx ). Fondamentalement, il existe deux façons que l'authentification a lieu:

  • Utilisation d'un protocole de challenge-réponse standard (par exemple, authentification du nom d'user / mot de passe);
  • Utilisation d'une security embeddede, authentification AD / kerberos;
  • Dans tous les cas, vous pouvez opter pour le encryption TLS / SSL.

Du sharepoint vue de la security, c'est assez sécurisé. C'est-à-dire: je n'exposerais pas mon SQL Server directement sur internet, mais c'est principalement parce que ça n'a pas de sens pour moi …

J'ai également vu le commentaire de Microsoft avant, qui m'a aussi insortinggué à l'époque pour différentes raisons:

  • Si vous effectuez une security embeddede, il doit vérifier Active Directory pour chaque connection. Cela pourrait convenir à quelques users, mais pour beaucoup d'users, je ne préférerais pas cela.
  • SQL Azure ne prend pas en charge la security embeddede tant qu'ils ont ce commentaire en ligne. Si c'était vraiment très peu sûr, ça n'a aucun sens.
  • Le principal avantage est que vous n'avez pas besoin de mettre un nom d'user et un mot de passe dans votre web.config. Là encore, je n'exposerais pas directement un server SQL à Internet, et si une personne mal intentionnée a access à votre server web, elle peut faire beaucoup de mauvaises choses dans votre database (directement ou indirectement).

Il y a des cas où l'authentification Windows a plus de sens, en particulier si vous utilisez une security basée sur les rôles dans votre database pour limiter l'access des rôles individuels aux schémas, etc. Dans ces cas, cela n'a aucun sens d'utiliser un seul count.

Pour être parfaitement honnête, je peux également expliquer les commentaires de ce genre d'un autre sharepoint vue: le model de licence complet de Microsoft est basé sur les CAL, qui sont vérifiés par le nombre de counts AD. En poussant tout le monde vers l'utilisation de la security embeddede, il est beaucoup plus facile d'appliquer ce model de licence.

Donc, pour faire une histoire courte, je ne m'en soucierais pas et je m'en tiendrai simplement à l'authentification par nom d'user / mot de passe.