2010-12-06 9 views
0

Nous avons un problème lorsque l'un de nos clients change des données directement dans la base de données.Empêcher les utilisateurs d'accéder à la base de données d'applications

Comme nous avons une API, nous préférerions que nos clients l'utilisent. Nous avons menacé de ne pas soutenir leur solution s'ils persistaient à changer manuellement les données.

Ma question est, y a-t-il un moyen technique, nous pouvons empêcher l'accès à la base de données à partir de tout autre que notre application?

Il s'agit d'une base de données SQL Server, et nos clients possèdent le serveur et administrent le serveur DB, donc nous avons essentiellement besoin d'un moyen de verrouiller SA.

Merci

+0

Précision: il est utilisateurs sysadmin qui accèdent à la base de données directement. Ils éditent des données d'entreprise sur les tables. Une option que nous examinons consiste à placer des déclencheurs sur toutes les tables, mais celles-ci doivent répliquer les règles métier complexes et les flux de travail que nous préférerions conserver dans le code de l'application – stevenrcfox

+0

Selon votre commentaire sur les données de licence, votre option la plus raisonnable est crypter les données sensibles sur la base de données et décrypter les données dans l'application. –

Répondre

3

Les premières choses ... vous ne pouvez pas:

  • lock-out des droits de sa ou sysadmin du tout au niveau du serveur
  • lock-out db_owner/dbo au niveau de la base de données

Maintenant, nous avons éclairci celui-là, qui accède directement aux données?

  • Si vous voulez dire les utilisateurs finaux changent de données, alors vous avez un problème de sécurité: ils ne devraient être en mesure d'utiliser l'API et même ne pas être en mesure de se connecter.

  • Si vous voulez dire des utilisateurs de niveau sysadmin (par exemple DBA ou types BOFH), il peut y avoir une raison légitime. Votre API prend-elle en charge toutes les opérations? En tant que DBA, je devais faire de la chirurgie de table ouverte sur les applications 3ème partie mal écrit maintenant et

  • Si les utilisateurs finaux ont des droits au niveau sysadmin, alors vous avez un problème de politique au sein de l'entreprise cliente

edit:

Après commentaire par OP sur leur question ... les utilisateurs sysadmin peuvent désactiver les déclencheurs ...

+0

Ajout d'un commentaire de clarification sur la question. C'est sysadmin que je veux verrouiller. Bien que notre principale préoccupation soit l'intégrité des données, nous avons également des raisons de croire que l'un de nos clients essaie de manipuler les données de licence (en fonction du nombre d'utilisateurs et d'autres problèmes spécifiques au domaine). Nous avons une fonctionnalité d'exportation, donc il n'y a pas de problèmes de verrouillage de fournisseur. – stevenrcfox

+0

Vos administrateurs système essaient-ils de vous donner l'impression qu'ils veulent que la base de données se contrôle elle-même plutôt que d'avoir les vérifications d'intégrité logique/métier dans l'application cliente? – Tim

+1

@Tim Ce ne sont pas nos 'sysadmins, c'est nos clients sysadmins. Notre application utilise les procédures stockées et les contraintes.Les sysadmins modifient les données sur les tables, n'exécutant pas les procédures stockées. Comme dans le commentaire ci-dessus, nous pourrions mettre des déclencheurs partout, mais 1: selon l'édition de @ gbn, ce ne serait pas utile, et 2: Où tracez-vous la ligne entre la base de données et l'application? – stevenrcfox

1

Êtes-vous API public? Cela ne devrait pas être le cas si vous pouvez changer des données sans aucune authentification. Je recommande d'utiliser un mécanisme d'authentification interne. Un protocole de défi/réponse de base qui garantit que la requête entrante est exécutable en toute sécurité, ou quelque chose comme ça.

Questions connexes