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

MS SQL Server Discussion :

Quelque chose comme RLS dans Filetable [2017]


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut Quelque chose comme RLS dans Filetable
    Bonjour

    Dans un ERP maison adossé à SQL Server standard 2017 je souhaite permettre d'enregistrer des fichiers windows dans un filetable
    l'option NON_TRANSACTED_ACCESS du FILESTREAM est à FULL
    le filetable a une arborescence complète autocrée de dossiers de fond en fonction des modules et des types de documents de base de donnée
    Je souhaite ouvrir l'explorateur windows sur le dossier adéquat en fonction du contexte cela c'est facile à faire
    (l'explorateur windows pour pouvoir bénéficier d'un shell complet: aperçu .. etc)
    Bien sur, avec l'explorateur l'utilisateur peut naviguer totalement hors du contexte
    (y compris d'ailleurs sur des bases de données qui ont leur FileStream sur le même disque et pour lesquelles il a aussi des droits)
    ce n'est pas en soit gènant mais il faudrait au moins qu'il ne puisse pas toucher à ma structure de fond (renommer, déplacer, supprimer)
    J'avais pensé à RLS (Row Level Security) avec un Filter Predicate ou un block Predicate
    Mais RLS semble impossible sur un filetable du moins en version 2017
    Comment faire (les ACL sont non implémentés sur les filetables)

    Pickepique
    Bruno Petit

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 741
    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 741
    Points : 52 454
    Points
    52 454
    Billets dans le blog
    5
    Par défaut
    Vue + déclencheur INSTEAD OF ?

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

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut
    Je pense que SQL server lit directement dans le filetable pour afficher les fichiers dans l'explorateur windows
    Je ne vois pas comment dire à SQL server d'utiliser une vue à la place et un trigger sur cette vue en cas de mise à jour

    Pickepique
    Bruno Petit

  4. #4
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut
    Bon je poursuis
    à Fred Brouard, je n'ai pas vraiment compris votre allusion à une vue
    si vous pensez à une vue updatable sur le filetable , cad avec des trigger Instead of -> gestion de la création du fichier dans une PS; c'est ce qu'il y a aujourd'hui
    mais ce n'est pas très souple et je voudrais tout simplement lancer un explorateur sur un dossier ou tout se fait, (création suppression, edition, lancement extentions du shell, sur des fichiers )

    Pour poursuivre ma tentative, un truc que je n'avais pas essayé.
    on peut poser un trigger AFTER, INSERT, DELETE, UPDATE sur un filetable
    si je pose un AFTER DELETE sur lequel je teste la condition "est_un_dossier_de_fond" = 1 (grâce à une table associée par exemple qui contient cette colonne)

    Pour tester je créé un trigger after delete avec juste:
    un "rollback tran"
    la suppression de l'élément est effectivement bloquée dans l'explorateur Windows si c'est un dossier
    la suppression de l'élément parait effective si c'est un fichier mais un refresh le fait réapparaitre

    un "raiserror" dans le trigger
    même chose

    un peu déroutant pour l'utilisateur, mais comme pour mon cas je veux empêcher la suppression des dossiers de fond cela pourrai me convenir
    Est ce une façon fiable de procéder
    Bruno Petit

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 741
    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 741
    Points : 52 454
    Points
    52 454
    Billets dans le blog
    5
    Par défaut
    rollback + raiserror pour donner l'information

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

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut
    merci
    Bruno Petit

  7. #7
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut
    Bon en fait cela ne fonctionne qu'en partie
    Avec le trigger AFTER DELETE suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    USE [GPG_TEST]
    GO
    CREATE TRIGGER [dbo].[EV_Documents_A_IUD]
    ON [dbo].[Documents]
    AFTER DELETE
    AS
    BEGIN
     
    ROLLBACK;
    RAISERROR('Impossible de supprimer', 16, 1); 
    END
    Le fichier semble bien supprimé, (la fenêtre flottante suppression sous windows apparait avec la jauge qui va au bout)
    avec F5 le fichier réapparait
    sur un dossier cela est rendu de manière correcte (cad le dossier ne bouge pas)
    J'ai essayé avec severity de 0 à 20 sans changement, peut être faut-il utilser un msg_id prédefini, mais je ne sais pas lequel
    J'ia essayé WITH NOWAIT
    Le système de fichier virtuel qui affiche le filetable (j'ai oublié le nom d'un tel système sous windows) ne semble pas être notifié de l'erreur sous jacente
    Bruno Petit

  8. #8
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut
    En fait j'ai dis une connerie le système de fichier n'est pas virtuel ce sont des fichiers réels avec des noms non humainement lisibles
    Bruno Petit

  9. #9
    Membre régulier
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 127
    Points : 74
    Points
    74
    Par défaut suite
    Bon je reprend le fil, excusez le coté décousu mais le dev n'est pas mon travail principal
    J'essaie toujours de protéger ma structure de dossier de fond d'un filetable des suppressions massives accidentelles que ce soit à partir de l'explorateur windows ou des dialogues "enregistrer sous" des applications (word, excel, PDF Element ...etc)
    qui vont ouvrir ces fichiers, donc j'ai essayé avec un trigger after delete
    "Documents_ext" est une table (stream_id, my_is_readonly) qui contient une reference stream_id aux dossiers de fond
    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
     
    CREATE TRIGGER [dbo].[EV_Documents_A_IUD]
    ON [dbo].[Documents]
    AFTER /**INSERT,UPDATE,**/ DELETE
    AS
    BEGIN
    	IF EXISTS( 
    		SELECT 1
    		FROM DELETED AS D
    			INNER JOIN [dbo].[Documents_ext] as A
    				ON (A.stream_id = D.stream_id)
    		WHERE A.my_is_readonly = 1            
    		)
    	BEGIN
    		ROLLBACK;
    		RAISERROR('Impossible de supprimer', 16, 1); 
    	END;
    qui ne marche qu'en partie
    si j'ai une structure "Documents\dossier_N1\dossier_N2\"
    et que j'essaie de supprimer sous l'explorateur "dossier_N1 "
    les dossiers restent
    mais tous les fichiers sont supprimés à tous les niveaux
    ce qui se comprend car:
    -sur un filetable le trigger after delete est appelé une fois pour chaque dossier et fichier (avec SQL server 2017 standard en tous cas)
    -les dossiers arrivent à la fin, donc plus moyen d'invalider la suppression des fichiers
    -pas moyen de discriminer entre la suppression à partir d'un certain niveau read-write et à partir d'un niveau read-only

    Au final existe-t-il un moyen de considérer une sécurité qui s'approche un petit peu de ce qu'on a sur un système de fichier windows
    J'ai beaucoup cherché sur le web mais cette problématique semble complétement ignorée

    En l'état cette fonctionnalité filetable me parait pas utilisable sur la durée pour mon besoin
    cela va m'obliger à revenir à un stockage dédié purement windows ou je peux organiser une vraie sécurité
    avec des chemins stockés dans mes tables vers le dossier associé à une entité
    Bruno Petit

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/07/2013, 14h03
  2. Réponses: 1
    Dernier message: 04/06/2012, 23h19
  3. Réponses: 2
    Dernier message: 29/09/2011, 17h08
  4. [Java] Quelque chose comme crystal report en java
    Par uzumaki_naruto dans le forum Autres outils décisionnels
    Réponses: 2
    Dernier message: 15/08/2006, 14h00
  5. quelque chose de bizarre dans jfilechooser
    Par slouma_b_h dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 19/04/2006, 12h33

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