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 :

pourquoi nouveau login en sysadmin


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
    Administrateur de base de données
    Inscrit en
    Février 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 86
    Par défaut pourquoi nouveau login en sysadmin
    Bonjour,
    Je viens de récupérer l'administration d'un serveur sur lequel il y a 2 instances SQL Server 2005 : une instance par défaut (édition standard) et une instance SQLEXPRESS (édition sqlexpress). L'édition SQLEXPRESS ne pose aucun problème. Par contre, je rencontre un problème de sécurité sur l'instance par défaut (SQL Server 2005 Standard). Lorsque je crée un login sql server "de base" sans aucun droit particulier (juste le role serveur public), ce login a finallement beaucoup de droits : il peut par exemple lancer la ps xp_cmdshell, il peut créer une base, la supprimer, ... On dirait qu'il a les droits sysadmin. A noter une chose : si je demande l'affichage des journaux sql server avec ce nouveau login, j'obtiens quand meme un message d'interdiction : seuls les membres du role securityadmin peuvent utiliser cette ps. Je suis en sécurité mixte. Le login que je crée est un login sql server (sécurité interne). Je ne vois pas comment le login créé avec juste le role serveur public peut finallement récupérer des droits "forts". Merci pour votre aide.
    Franck

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    Pour vérifier quels sont les logins qui sont membres du rôle sysadmin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sp_helpsrvrolemember 
    	@srvrolename = 'sysadmin'

  3. #3
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    ou éventuellement utiliser IS_SRVROLEMEMBER() pour connaitre à quel rôle de serveur appartient votre login ou encore plus simple depuis la console SSMS > clic droit sur le login > proprietes > section Server Roles.

    ++

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 86
    Par défaut
    J'ai vérifier les logins appartenant au role sysadmin et le login créé n'apparait pas dans la liste. Ce login n'apparait pas non plus dans les autres role de serveur. Je ne vois pas ou ce login prend ces droits "forts".
    Franck

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 86
    Par défaut
    Lorsque je regarde les droits du login, il n'a que le role serveur public et aucun autre droit serveur ou base.
    Franck

  6. #6
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Vous pourriez nous poster le résultat des requêtes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
       sp.name AS login_name,
       sp.type_desc AS [login_type],
       spm.permission_name,
       spm.state_desc
      FROM sys.server_principals AS sp
      INNER JOIN sys.server_permissions AS spm
       ON sp.principal_id = spm.grantee_principal_id
     WHERE sp.name = '<monlogin>';
    et (sur la base de données master)

    Code : 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
    18
    SELECT 
     DB_NAME() AS database_name,
     p.name AS [user_name],
     pm.class_desc AS ObjectType,
     CASE pm.class 
      WHEN 1 THEN o.name
      WHEN 3 THEN s.name
      WHEN 0 THEN DB_NAME()
     END object_name,
     pm.permission_name
    FROM sys.database_principals AS p
    INNER JOIN sys.database_permissions AS pm
     ON pm.grantee_principal_id = p.principal_id
    LEFT JOIN sys.objects AS o
     ON pm.major_id = o.object_id
    LEFT JOIN sys.schemas AS s
     ON pm.major_id = s.schema_id
     WHERE p.name = '<monuser>';
    ++

  7. #7
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 86
    Par défaut
    Bonjour,
    merci pour votre aide ...
    les 2 requetes n'ont donné aucun résultat (0 ligne).
    Je suis dba depuis plusieurs années et je n'ai jamais rencontré ce type de problème.

    Franck

  8. #8
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Ok ..

    Je pense que votre problème vient du rôle de serveur public qui doit avoir certains privilèges octroyés.

    Que donne la requête suivante dans la base master :

    Code : 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
    18
     SELECT 
     DB_NAME() AS database_name,
     p.name AS [user_name],
     pm.class_desc AS ObjectType,
     CASE pm.class 
      WHEN 1 THEN o.name
      WHEN 3 THEN s.name
      WHEN 0 THEN DB_NAME()
     END object_name,
     pm.permission_name
    FROM sys.database_principals AS p
    INNER JOIN sys.database_permissions AS pm
     ON pm.grantee_principal_id = p.principal_id
    LEFT JOIN sys.objects AS o
     ON pm.major_id = o.object_id
    LEFT JOIN sys.schemas AS s
     ON pm.major_id = s.schema_id
     WHERE p.name = 'public';
    Vérifiez également les permissions explicites que possède cet utilisateur dans la base master ...

    ++

  9. #9
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 86
    Par défaut
    David,
    J'ai passé votre requete mais je récupère bcp de lignes.
    Je peux vous donner un résultat plus court et intéressant ->
    requete : select * from fn_my_permissions(NULL,'SERVER')
    (requete passée avec une connexion du login concerné)

    Sur instance sans le problème :
    server CONNECT SQL
    server VIEW ANY DATABASE

    Sur instance avec le problème :
    server CONNECT SQL
    server SHUTDOWN
    server CREATE ENDPOINT
    server CREATE ANY DATABASE
    server ALTER ANY LOGIN
    server ALTER ANY CREDENTIAL
    server ALTER ANY ENDPOINT
    server ALTER ANY LINKED SERVER
    server ALTER ANY CONNECTION
    server ALTER ANY DATABASE
    server ALTER RESOURCES
    server ALTER SETTINGS
    server ALTER TRACE
    server ADMINISTER BULK OPERATIONS
    server AUTHENTICATE SERVER
    server EXTERNAL ACCESS ASSEMBLY
    server VIEW ANY DATABASE
    server VIEW ANY DEFINITION
    server VIEW SERVER STATE
    server CREATE DDL EVENT NOTIFICATION
    server CREATE TRACE EVENT NOTIFICATION
    server ALTER ANY EVENT NOTIFICATION
    server ALTER SERVER STATE
    server UNSAFE ASSEMBLY
    server CONTROL SERVER

    Comme vous le pensiez, qq'un ou qq chose a rajouté des droits à public apparemment. J'ai vérifié la version : 9.00.3042 -> 2005 fixed SP2. Est-ce que cette instance a été soumise à la faille corrigée par le SP3 ??? C'est la question que je me pose.

    Ce que je compte faire :
    1. faire des "DENY nom_de_la_permission TO public" (par exemple deny SHUTDOWN to public) en ne laissant que les 2 permissions "connect sql" et "view any database"
    2. passer le SP3 sur les instances
    Pour l'instant, je n'ai pas mis le SP4 sur les autres instances sql2005 que je gère. Pensez-vous qu'il est intéressant de passer plutot au sp4 ?

    Pensez-vous que l'action 1 suffise à rétablir la situation c.a.d à avoir le role public tel qu'il est par défaut ? Faudrait-il que je fasse d'autres vérifications ?

    Merci pour votre retour
    et surtout ... merci pour votre aide ...

    Franck

  10. #10
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 86
    Par défaut
    Sorry
    j'ai exécuter les 2 requetes à toute vitesse sans remplacer le nom login et user.
    Je viens de repasser les 2 requetes.
    La requete (courte) avec le login ->
    login_name : testfg
    login_type : SQL_LOGIN
    permission_name : CONNECT SQL
    state_desc : GRANT

    Pour l'autre requete, afin d'avoir un résultat, j'ai ajouté mon login en tant que user (public) sur la base master. Résultat :
    database_name : master
    user_name : testfg
    ObjectType : DATABASE
    object_name : master
    permission_name : CONNECT

    Franck

Discussions similaires

  1. Remapper un user sur un nouveau login
    Par agdid04 dans le forum Administration
    Réponses: 6
    Dernier message: 08/02/2013, 12h10
  2. Ajouter un nouveau utilisateur (Login) à SQL Server
    Par bahmani dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/12/2009, 15h31
  3. Réponses: 1
    Dernier message: 17/02/2008, 23h59
  4. Réponses: 1
    Dernier message: 02/08/2006, 17h57
  5. [C# 2.0/SqlServer] Comment optimiser l'affectation d'un nouveau login ?
    Par joujou_le_fou dans le forum Accès aux données
    Réponses: 5
    Dernier message: 16/06/2006, 21h19

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