Vous avez plusieurs questions différentes ici, donc je vais les assommer individuellement:
"J'ai lu qu'il est préférable de ne pas laisser les utilisateurs utiliser directement la connexion sa, plutôt d'utiliser l'authentification Windows"
Vous mélangez deux choses ici: le concept de SA et le concept d'authentification SQL et d'authentification Windows.
L'authentification SQL est une liste de noms d'utilisateur et de mots de passe qui sont stockés dans chaque serveur SQL. Le fait qu'il soit stocké en SQL est le premier problème. Si vous devez changer le mot de passe d'une connexion, vous devez le changer sur chaque serveur (ou conserver des mots de passe différents sur différents serveurs). Avec l'authentification Windows, vous pouvez désactiver de manière centralisée les connexions, modifier les mots de passe, définir des politiques, etc.
Si vous choisissez d'utiliser l'authentification SQL, SA n'est qu'une seule connexion d'authentification SQL. Il s'agit du nom d'utilisateur administrateur par défaut, tout comme l'administrateur est dans l'authentification Windows. Il a des super-pouvoirs locaux sur cette seule instance, mais pas de super-pouvoirs globaux sur toutes les instances.
"... et en accordant à ces comptes (ou groupes de comptes) les privilèges d'administrateur système."
Quelle que soit la méthode d'authentification que vous choisissez, idéalement, vous voulez suivre le principe du moindre privilège: accorder aux gens les droits minimaux dont ils ont besoin pour faire leur travail, et pas plus.
Ne les considérez pas comme de simples connexions - ce sont des gens qui peuvent vous faire virer. S'ils abandonnent la base de données ou désactivent accidentellement vos travaux de sauvegarde, ils ne seront pas renvoyés, car par défaut, SQL ne suit pas qui a fait quoi. C'est vous qui serez licencié parce que ça va arriver, et vous ne pourrez pas dire qui l'a fait.
"Comment la meilleure pratique augmente-t-elle la sécurité de mes instances SQL Server?"
Vous voulez faire deux choses:
- Empêchez les gens de casser le serveur
- Lorsqu'ils cassent le serveur, être en mesure d'identifier exactement qui l'a fait
Le premier est accompli avec le principe du moindre privilège: ne donner aux gens que les autorisations dont ils ont besoin, et rien de plus.
La seconde consiste à donner à chaque personne sa propre connexion, à ne pas autoriser les connexions partagées (comme laisser tout le monde utiliser le même nom d'utilisateur / mot de passe) et, idéalement, à auditer les connexions. Vous ne ferez probablement pas cette dernière partie tout de suite, car c'est un peu douloureux, mais mettons les pièces en place en premier afin de pouvoir ajouter un audit plus tard après que quelqu'un ait déposé une base de données et que votre patron veuille savoir pourquoi.
Je sais ce que vous pensez: "Mais nous codons des applications, et l'application a besoin d'une connexion." Oui, donnez à l'application sa propre connexion, et les développeurs doivent connaître ce mot de passe, mais cette connexion doit être tellement privée d'autorisations que personne sensé ne voudrait l'utiliser. Par exemple, il peut être nécessaire qu'il soit uniquement dans les rôles db_datareader et db_datawriter, rien d'autre. De cette façon, il peut insérer, mettre à jour, supprimer et sélectionner des données, mais pas nécessairement modifier les schémas, ajouter des index, modifier les procédures stockées, etc.
"Est-ce que cela s'applique uniquement aux instances de production, ou à nos instances de développement internes?"
Je pense que cela s'applique tout autant aux instances de développement, car je m'inquiète généralement des gens qui cassent des choses. Les gens adorent casser les serveurs en cours de développement. Et bien sûr, quand il est temps de regrouper la liste des modifications pour migrer vers la production, j'ai besoin de savoir si un index particulier est vraiment vital pour l'application ou si certains bonehead viennent d'exécuter le Database Tuning Advisor et lui ont dit d'appliquer toutes les modifications . Des autorisations appropriées aident à atténuer cette douleur.