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 :

Grant delete avec condition de suppression


Sujet :

Administration SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    test
    Inscrit en
    Octobre 2016
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 134
    Points : 49
    Points
    49
    Par défaut Grant delete avec condition de suppression
    bonjour

    je cherche une méthode pour attribuer le droit de supression pour un user mais avec une condition bien définit

    je veux que l'user dev n'aurait le droit que pour suprimer les jours de type "weekend"

    j'ai connait que ce syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grant delete on dbo.calendrier to dev
    mais ce ci ne répond pas a mon besoin

    Qui a une idée svp
    Images attachées Images attachées  

  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,

    Vous avez deux options :

    • Créer un trigger INSTEAD OF sur DELETE qui vérifie qui est l'utilisateur et le type de jour de la semaine, et exécute le DELETE le cas échéant
    • Créer un job de l'Agent SQL Server qui exécute l'ordre le GRANT le Samedi à Minuit, et le REVOKE le Lundi à minuit.


    @++

  3. #3
    Membre du Club
    Homme Profil pro
    test
    Inscrit en
    Octobre 2016
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 134
    Points : 49
    Points
    49
    Par défaut
    merci elsuket pour votre réponsse

    j'ai essayer de pointer sur ta premiére proposition mais j'ai pas trouver comment je peut ajouter ma connexion dev

    En preimer lieu j'ai mis ce petit code pour faire le roolbak du delete

    maintenant comment je peut ajouter ma connexion , j'ai pensser a sys.dm_exec_connections et sys.dm-exec_session

    mais j'ai pas trouver comment je peut le relier avec ce code

    faut il faire faire du jointure ? SI oui comment je peut le faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create trigger tr_dest
    on calendrier
    for delete
    as
    begin
    if exists(select * from deleted where type_jour='weekend') 
    rollback
    end
    merci pour votre aide

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 782
    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 : 21 782
    Points : 52 784
    Points
    52 784
    Billets dans le blog
    5
    Par défaut
    Créez une vue et assigner la sécurité dessus.

    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/ * * * * *

  5. #5
    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
    j'ai pas trouver comment je peut ajouter ma connexion dev
    Il faut pour cela interroger la fonction SUSER_SNAME().

    Mais SQLPro a raison, je vous ai orienté dans la mauvaise direction : abandonnez l'idée du trigger ou du job, c'est en fait mégamoche.

    Il suffit que vous créiez une vue qui spécifie les jours où l'utilisateur a le droit de modifier les données, comme vous l'avez précisé.
    Voici donc un exemple où l'on souhaite que l'utilisateur ne modifie les données de la table dbo.ma_table uniquement le weekend :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    CREATE TABLE dbo.type_jour
    (
    	type_jour_id tinyint NOT NULL IDENTITY(0,1)
    		CONSTRAINT PK_type_jour PRIMARY KEY
    	, libelle varchar(8) NOT NULL
    		CONSTRAINT UQ_type_jour__libelle UNIQUE
    )
    GO
     
    INSERT INTO dbo.type_jour (libelle) VALUES ('semaine'), ('weekend')
    GO
     
    CREATE TABLE dbo.calendrier
    (
    	calendrier_id int NOT NULL IDENTITY
    		CONSTRAINT PK_leCalendrier PRIMARY KEY
    	, jour date NOT NULL
    		CONSTRAINT UQ_calendrier__jour UNIQUE		
    	, type_jour_id tinyint NOT NULL
    		CONSTRAINT FK_calendrier__type_jour_id FOREIGN KEY(type_jour_id) REFERENCES dbo.type_jour
    )
    GO
     
    WITH
    	N AS (SELECT NULL AS v UNION ALL SELECT NULL)
    	, N1 AS (SELECT A.v FROM N AS A CROSS JOIN N AS B)
    	, N2 AS (SELECT A.v FROM N1 AS A CROSS JOIN N1 AS B)
    	, N3 AS (SELECT A.v FROM N2 AS A CROSS JOIN N2 AS B)
    	, N4 AS (SELECT A.v FROM N3 AS A CROSS JOIN N3 AS B)
    	, RN AS
    	(
    		SELECT	ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) - 1 AS rn
    		FROM	N4
    	)
    INSERT	INTO dbo.calendrier
    (
    	jour
    	, type_jour_id
    )
    SELECT	d.jour
    	, CASE DATENAME(weekday, d.jour)
    		WHEN 'Saturday' THEN 1
    		WHEN 'Sunday' THEN 1
    		ELSE 0
    	END AS type_jour_id
    FROM	(
    		SELECT	DATEADD(day, rn, CAST('20160101' AS date)) AS jour
    		FROM	RN
    		WHERE	rn < DATEDIFF(day, CAST('20160101' AS date), CAST('20170101' AS date))
    	) AS d
    GO
     
    CREATE VIEW uneVue
    AS
    SELECT	i
    FROM	dbo.ma_table
    WHERE	EXISTS
    	(
    		SELECT		*
    		FROM		dbo.calendrier AS c
    		INNER JOIN	dbo.type_jour AS tj
    					ON c.type_jour_id = tj.type_jour_id
    		WHERE		c.jour = CAST(GETDATE() AS date)
    		AND		tj.libelle = 'weekend'
    	)
    Il vous suffit ensuite d'octroyer les droits adéquats (SELECT, INSERT, UPDATE ou DELETE) sur cette vue à votre utilisateur dev, et vous y êtes.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/10/2011, 11h08
  2. [SQL Server 2005] Delete avec conditions
    Par dkmix dans le forum Développement
    Réponses: 6
    Dernier message: 24/01/2011, 17h36
  3. Erreur sur DELETE avec condition sur un DATETIME
    Par Luke58 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/08/2009, 12h00
  4. Suppression avec condition de type sous-requête
    Par matel dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/09/2008, 08h24
  5. [VBA-E] Suppression des colonnes avec condition
    Par desdenova dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2007, 13h39

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