IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

Utilisateur = USER; mais utilisateur = USER ?


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut Utilisateur = USER; mais utilisateur = USER ?
    Encore cestpasmoi
    Toujours à donf sur SQL Server...
    Je ne sais pas si c'est moi qui ne voit rien, mais en tout cas, je n'ai rien trouvé répondant à ma question :

    J'utilise un seul USER avec lequel une quinzaine d'utilisateur se connectent sur ma base.
    Je sais que ce n'est sûrement pas top, mais est-ce que cela pose réellement des soucis de performance ?
    Si tous les utilisateurs ont le même "niveau de besoin", cela a t-il un sens de créer un USER par utilisateur ?
    Comme d'hab, je vous remercie 1024 fois (pitié, pas celle-là) pour vos avis ou critiques, ça ne mange pas de pain

  2. #2
    Membre Expert
    Homme Profil pro
    DBA SQL Server
    Inscrit en
    Octobre 2012
    Messages
    862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA SQL Server
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2012
    Messages : 862
    Par défaut
    J'ignore pour les performances, mais perso si tu n'en as que 15, j'en ferais un pour chacun.

    Cela permettrait de suivre l'activité de chacun en cas de problèmes, surtout s'ils ont des privilèges d'écritures.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Je suis d'accord avec toi. Rien que pour ça, je pense que je devrais le faire.
    Mais je me pose surtout la question sur les performances dans le sens où : Est-ce que cela bouchonne plus si tout ce monde utilise le même USER ID.

  4. #4
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    J'ai envie de répondre "non, au contraire".

    Le cache des plans d'exécution se fait session par session.

    Si tu codes proprement ton programme (ouverture de la connexion à la base le plus tard possible, et fermeture de la connexion à la base le plus tôt possible) alors tu vas exploiter le pooling de connexion.
    => Les 15 utilisateurs vont peut-être se partager 2 ou 3 sessions maximum, puisque utilisant les mêmes informations de connexion, ils vont réutiliser les session déjà dans le pool.

    Ainsi, un utilisateur va bénéficier de plans d'exécution de requêtes qui ont été calculées pour un autre utilisateur.
    Et même, si les paramètres sont les mêmes, le nouvel utilisateur pourra même bénéficier des resultsets déjà en cache.

    Bref, aucun problème, au contraire. D'ailleurs, les sites web utilisent généralement un unique utilisateur pour toute l'application, et les quelques milliers d'utilisateurs connectés en même temps.
    => En effet, on peut parfaitement ouvrir plusieurs sessions en // sur un SGBD avec le même identifiant, et cela n'a aucun impact négatif sur les performances.

    Bref, multiplier les comptes, ça n'a que deux intérêt :
    - Avoir une meilleure traçabilité
    - Pouvoir affiner les droits d'accès (même si ça sert pas forcément à grand chose puisqu'il est rare que les applications laissent les utilisateurs écrire leurs propres requêtes SQL)

    Aussi, cela permet dans les procédure stockées par exemple d'utiliser "CURRENT_USER" comme filtre "en dur" dans les requêtes, afin d'appliquer des droits sur les lignes.

    Par exemple :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    create procedure dbo.GetCompanyFromId
    (
    	@company_id int
    )
    as
    begin
    	select distinct c.id, c.code, c.[name], c.[address], c.complement, c.postal_code, c.city, c.country, c.siret, c.phone, c.fax, c.email, c.inactive, c.payer, c.[type]
    	from dbo.company c
    	inner join dbo.[role] r on (r.company_id is null or r.company_id = c.id)
    	inner join dbo.person p on p.id = r.person_id
    	where p.[login] = CURRENT_USER
    	and c.id = @company_id
    	and c.inactive = 0;
    end;
    go
    => Même si un utilisateur trouve un moyen d'injecter des paramètres, il ne peut pas se faire passer pour un autre utilisateur, et n'aura accès qu'aux données auxquelles il a accès.

    Alors que l'équivalent "user partagé" :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    create procedure dbo.GetCompanyFromId
    (
    	@company_id int,
            @login varchar(30)
    )
    as
    begin
    	select distinct c.id, c.code, c.[name], c.[address], c.complement, c.postal_code, c.city, c.country, c.siret, c.phone, c.fax, c.email, c.inactive, c.payer, c.[type]
    	from dbo.company c
    	inner join dbo.[role] r on (r.company_id is null or r.company_id = c.id)
    	inner join dbo.person p on p.id = r.person_id
    	where p.[login] = @login
    	and c.id = @company_id
    	and c.inactive = 0;
    end;
    go
    => Si l'utilisateur trouve le moyen de passer un autre @login que le sien, il peut récupérer les informations de sociétés auxquelles il ne devrait pas avoir accès.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Delphi
    Inscrit en
    Janvier 2019
    Messages
    182
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 182
    Par défaut
    Merci beaucoup StringBuilder
    Voilà qui semble répondre à ma question.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    au niveau des performances pas de différence, mais au niveau sécurité, il est préférable que chaque personnes de l'entreprise soit associé à un seul utilisateur SQL qui lui est propre. En faisant cela tu te facilitera la vie pour tout ce qui est tracabilité et notamment RGPD !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Dossier énorme c:/utilisateurs/user/AppData/Local/Temp
    Par stigmate101 dans le forum Windows Vista
    Réponses: 7
    Dernier message: 23/06/2019, 15h40
  2. Tester si un User est utilisateur avec pouvoir
    Par rafanel dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 26/09/2007, 13h48
  3. ajouter un utilisateur au groupe users par code VBA ?
    Par electrosat03 dans le forum Access
    Réponses: 2
    Dernier message: 12/01/2007, 17h00
  4. [USER] Comment définir le nom d'utilisateur ?
    Par narmataru dans le forum NetBeans
    Réponses: 4
    Dernier message: 27/12/2006, 09h30
  5. Gestion des droits : 1 user par utilisateur ?
    Par Bruno75 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 07/11/2005, 14h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo