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

Développement SQL Server Discussion :

Donner la visibilité à un utilisateur lambda sur les taches de l'agent SQL [2008]


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 72
    Points
    72
    Par défaut Donner la visibilité à un utilisateur lambda sur les taches de l'agent SQL
    Bonjour

    Je suis avec SQL Server 2008.

    Je me suis créé une vue afin de facilement permettre la visualisation de mes tâches Agent SQL avec leur périodicité.

    Ma vue est construite à partir de tables utilisateur et de tables ou vues système.
    On y trouve des jointures sur :
    msdb.dbo.sysjobs
    msdb.dbo.sysjobservers
    msdb.dbo.syscategories
    msdb.dbo.sysjobschedules
    msdb.dbo.sysjobs_view
    msdb.dbo.sysschedules_localserver_view

    Mon compte étant admin du serveur, la vue fonctionne à merveille.

    J'a donné le droit SELECT à un utilisateur lambda, je l'ai ajouté comme utilisateur de msdb en tant que membre du rôle db_datareader .
    Lorsqu'il requête sur ma vue, il n'obtient rien.
    S'il requête sur les tables, il voit bien leur contenu.
    Par contre, s'il requête sur les vues (sysjobs_view et sysschedules_localserver_view), il n'obtient rien.
    Ce qui explique que ma vue utilisateur soit vide.

    J'ai pensé qu'on pourrait créer une fonction table, qui usurperait (le temps de l'exécution) un compte avec des droits sur le serveur pour renvoyer les informations de ma vue.

    Avez-vous une idée ?

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Dans le cas msdb.dbo.sysjobs_view, l'utilisateur n'est propriétaire d'aucun job, , et il n'est ni membre du role de serveur sysadmin, ni des roles de base de données msdb SQLAgentReaderRole ou TargetServersRole.
    Donc celle-ci, dont la définition est ci-dessous et s'obtient avec EXEC sp_helptext 'sysjobs_view', ne retourne pas de ligne :

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Text
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    CREATE VIEW sysjobs_view
    AS
    SELECT jobs.job_id,
           svr.originating_server,
           jobs.name,
           jobs.enabled,
           jobs.description,
           jobs.start_step_id,
           jobs.category_id,
           jobs.owner_sid,
           jobs.notify_level_eventlog,
           jobs.notify_level_email,
           jobs.notify_level_netsend,
           jobs.notify_level_page,
           jobs.notify_email_operator_id,
           jobs.notify_netsend_operator_id,
           jobs.notify_page_operator_id,
           jobs.delete_level,
           jobs.date_created,
           jobs.date_modified,
           jobs.version_number,
           jobs.originating_server_id,
           svr.master_server
    FROM msdb.dbo.sysjobs as jobs
      JOIN msdb.dbo.sysoriginatingservers_view as svr
        ON jobs.originating_server_id = svr.originating_server_id
      --LEFT JOIN msdb.dbo.sysjobservers js ON jobs.job_id = js.job_id
    WHERE (owner_sid = SUSER_SID())
       OR (ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) = 1)
       OR (ISNULL(IS_MEMBER(N'SQLAgentReaderRole'), 0) = 1)
       OR ( (ISNULL(IS_MEMBER(N'TargetServersRole'), 0) = 1) AND
            (EXISTS(SELECT * FROM msdb.dbo.sysjobservers js 
             WHERE js.server_id <> 0 AND js.job_id = jobs.job_id))) -- filter out local jobs
    Identiquement, on voit que la clause WHERE de la vue msdb.dbo.sysschedules_localserver_view exclut l'utilisateur en question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE (svr.master_server = 0)
      AND ( (sched.owner_sid = SUSER_SID())
            OR (ISNULL(IS_SRVROLEMEMBER(N'sysadmin'), 0) = 1)
          OR (ISNULL(IS_MEMBER(N'SQLAgentReaderRole'), 0) = 1)
          )
    Si l'on se réfère à la documentation du rôle de base de données msdb SQLAgentReaderRole, on a :

    SQLAgentReaderRole Permissions

    SQLAgentReaderRole includes all the SQLAgentUserRole permissions as well as permissions to view the list of available multiserver jobs, their properties, and their history. Members of this role can also view the list of all available jobs and job schedules and their properties, not just those jobs and job schedules that they own. SQLAgentReaderRole members cannot change job ownership to gain access to jobs that they do not already own


    Donc il vous suffit de rendre l'utilisateur membre de ce rôle et vous devriez obtenir le comportement recherché

    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Points : 72
    Points
    72
    Par défaut Solution satisfaisante
    Bonjour

    La réponse est claire et a fonctionné dès que le droit a été ajouté.

    Merci

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Ravi de vous avoir aidé

    A bientôt !

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

Discussions similaires

  1. problème sur les taches planifiées Windows 7
    Par zpico dans le forum Windows 7
    Réponses: 8
    Dernier message: 10/10/2012, 14h06
  2. Règle de validation sur les taches en fonction du whatId
    Par epeichette dans le forum Salesforce.com
    Réponses: 2
    Dernier message: 04/06/2012, 16h33
  3. Question sur les performance d'une transaction SQL
    Par SlashEne dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 24/04/2008, 22h41
  4. Droits sur les vues d'une base SQL server 2000
    Par mioux dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/04/2007, 16h13
  5. Réponses: 2
    Dernier message: 05/01/2005, 16h55

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