SQL Serveur-Conserver le 'path' ou le fichier
Fermé
Car0
-
16 déc. 2004 à 17:58
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 7 janv. 2005 à 17:58
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 7 janv. 2005 à 17:58
A voir également:
- SQL Serveur-Conserver le 'path' ou le fichier
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier host - Guide
- Ouvrir fichier .bin - Guide
5 réponses
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
16 déc. 2004 à 18:15
16 déc. 2004 à 18:15
Conserver le fichier plutôt que le path dans la bd et ajouter un champ mot de passe.
ça me semble une bonne solution.
Les champs de type IMAGE dans SQL Server permettent de stocker des fichiers jusqu'à 2 Go.
Après il suffira de faire un CGI (ou autre (ASP, php, etc.)) qui renvoi (ou non) le fichier de la base en fonction des droits utilisateur.
Note que je te conseille vivement de bien penser ta gestion des utilisateurs.
- prévoir un site web pour gérer les utilisateurs ?
- prévoir des admins qui pourront administrer ces utilisateurs ?
- crééer des groupes d'utilisateurs ? (compta, logistique, etc.) afin de pouvoir donner des droits d'accès à des groupes de fichiers.
- droits en lecture seule, en lecture/écriture ?
- historique des modifications ?
- etc.
Enfin, ne jamais stocker directement les mots de passe en base.
Il ne faut stocker que le hash du mot de passe (par exemple un SHA-1 du mot de passe).
Ainsi si un développeur ou un utilisateur mal intentionné tombe par hasard sur la base de données, il ne pourra pas retrouver le mot de passe à partir du hash.
ça me semble une bonne solution.
Les champs de type IMAGE dans SQL Server permettent de stocker des fichiers jusqu'à 2 Go.
Après il suffira de faire un CGI (ou autre (ASP, php, etc.)) qui renvoi (ou non) le fichier de la base en fonction des droits utilisateur.
Note que je te conseille vivement de bien penser ta gestion des utilisateurs.
- prévoir un site web pour gérer les utilisateurs ?
- prévoir des admins qui pourront administrer ces utilisateurs ?
- crééer des groupes d'utilisateurs ? (compta, logistique, etc.) afin de pouvoir donner des droits d'accès à des groupes de fichiers.
- droits en lecture seule, en lecture/écriture ?
- historique des modifications ?
- etc.
Enfin, ne jamais stocker directement les mots de passe en base.
Il ne faut stocker que le hash du mot de passe (par exemple un SHA-1 du mot de passe).
Ainsi si un développeur ou un utilisateur mal intentionné tombe par hasard sur la base de données, il ne pourra pas retrouver le mot de passe à partir du hash.
Merci sebsauvage.
Et merci pour tes autres conseils. En fait, la gestion des utilisateurs et l'application qui les gère (asp) existent déjà. L'application de publication de fichier n'est qu'une parmi un lot d'autres et les mesures dont tu parles ont déjà des standards d'implémentation(hé... et pas de hash. Les 20 ans d'expérience de mon supérieur contre mon tout rescent diplôme en programmation... ça fait pas le poid, même si j'ai essayé ;-)
Pour les autres qui lisent, y'a des fonctions sympa pour hasher un mot de passe sans passer par l'étude des types de crypto. Dans mysql: password(). Dans sqlserver: pwdencrypt() (quoique je suis tombé sur une étude "comment cracker les mdp de Sql server 2000... y'a peut-être mieux maintenant)
Caroline
Et merci pour tes autres conseils. En fait, la gestion des utilisateurs et l'application qui les gère (asp) existent déjà. L'application de publication de fichier n'est qu'une parmi un lot d'autres et les mesures dont tu parles ont déjà des standards d'implémentation(hé... et pas de hash. Les 20 ans d'expérience de mon supérieur contre mon tout rescent diplôme en programmation... ça fait pas le poid, même si j'ai essayé ;-)
Pour les autres qui lisent, y'a des fonctions sympa pour hasher un mot de passe sans passer par l'étude des types de crypto. Dans mysql: password(). Dans sqlserver: pwdencrypt() (quoique je suis tombé sur une étude "comment cracker les mdp de Sql server 2000... y'a peut-être mieux maintenant)
Caroline
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
16 déc. 2004 à 19:35
16 déc. 2004 à 19:35
Les 20 ans d'expérience de mon supérieur
baha... :-(
C'est le genre d'argument qui me fait pouffer.
L'informatique actuelle n'a plus rien à voir avec ce qu'elle était il y a 20 ans, la sécurité informatique non plus !
Quand quelqu'un me sort ce genre d'argument, j'ai tendance à lui répondre: "Si tu crois que tu n'a plus rien à apprendre, c'est que tu es mort !".
Il devrait peut-être se documenter un peu, lire, par exemple "Applied cryptography".
Mébon... passons sur cet énervement passager.
Bon courage à toi.
(ça me rappelle un prof de Cobol, qui était arrivé en même temps que les murs de l'IUT (il y a 30 ans) et qui nous soutenais mordicus qu'on pouvait très bien faire le système de navigation d'un Rafale en Cobol.
Certes, mais ce n'est pas raisonnable.)
baha... :-(
C'est le genre d'argument qui me fait pouffer.
L'informatique actuelle n'a plus rien à voir avec ce qu'elle était il y a 20 ans, la sécurité informatique non plus !
Quand quelqu'un me sort ce genre d'argument, j'ai tendance à lui répondre: "Si tu crois que tu n'a plus rien à apprendre, c'est que tu es mort !".
Il devrait peut-être se documenter un peu, lire, par exemple "Applied cryptography".
Mébon... passons sur cet énervement passager.
Bon courage à toi.
(ça me rappelle un prof de Cobol, qui était arrivé en même temps que les murs de l'IUT (il y a 30 ans) et qui nous soutenais mordicus qu'on pouvait très bien faire le système de navigation d'un Rafale en Cobol.
Certes, mais ce n'est pas raisonnable.)
Bonjour!
Pour ceux que ça intéresserait, j'ai trouvé une bien meilleure solution pour mettre en place ma sécurité sur les fichiers par mot de passe. Ça suppose simplement que tous les fichiers sont sous un répertoire racine et que ce répertoire ne contient pas de fichiers qui doivent pouvoir être accéder directement (ce qui était mon cas)
1- On bloque le répertoire racine en passant par IIS (pas d'accès en lecture)
=>Taper l'url directement dans la barre d'adresse donnera un acces denied.
2- et on crée une page asp qui va scanner le fichier en binaire et le renvoyer au client
=>Notre script a accès au fichier puisqu'il passe par le système de fichier de la machine "c:/...etc" et non pas par IIS.
En procédent ainsi, le client est obligé de passer par notre page asp, qui peut alors d'abord vérifier si un mot de passe est nécessaire.
Tant mieux si le script suivant peut aider quelqu'un.
Voici mon algorithme "en français":
1-Lire les paramètres (GET ou POST) "id du fichier" et "mot de passe" donné par l'usager
2-Interroger la base de donnée pour obtenir les infos sur le fichier demandé (on ajoute une clause WHERE ... AND motdepasse = "mot de passe" si un mot de passe a été donné par l'usager)
3.1-Si aucun document n'est trouvé, préparer l'affichage d'un message d'erreur "Fichier inexistant ou mot de passe invalide"
3.2-Autrement, si aucun mot de passe n'a été précisé mais qu'un mot de passe est requis (selon les infos sur le fichier), préparer l'affichage du formulaire "Veuillez entrer un mot de passe"
3.3-Autrement, préparer l'affichage du fichier
4.1-Si un message d'affichage a été préparé, l'afficher
4.2-Sinon envoyer le fichier
La partie un brin plus compliquée concerne la manière d'afficher le fichier (le 4.2). Il reste ensuite a appeler le script afficherpage.asp?fileid=x dans le href de la balise A plutôt que de mettre le path du fichier directement.
Pour 4.2:
Et la fonction getMime:
Pour ceux que ça intéresserait, j'ai trouvé une bien meilleure solution pour mettre en place ma sécurité sur les fichiers par mot de passe. Ça suppose simplement que tous les fichiers sont sous un répertoire racine et que ce répertoire ne contient pas de fichiers qui doivent pouvoir être accéder directement (ce qui était mon cas)
1- On bloque le répertoire racine en passant par IIS (pas d'accès en lecture)
=>Taper l'url directement dans la barre d'adresse donnera un acces denied.
2- et on crée une page asp qui va scanner le fichier en binaire et le renvoyer au client
=>Notre script a accès au fichier puisqu'il passe par le système de fichier de la machine "c:/...etc" et non pas par IIS.
En procédent ainsi, le client est obligé de passer par notre page asp, qui peut alors d'abord vérifier si un mot de passe est nécessaire.
Tant mieux si le script suivant peut aider quelqu'un.
Voici mon algorithme "en français":
1-Lire les paramètres (GET ou POST) "id du fichier" et "mot de passe" donné par l'usager
2-Interroger la base de donnée pour obtenir les infos sur le fichier demandé (on ajoute une clause WHERE ... AND motdepasse = "mot de passe" si un mot de passe a été donné par l'usager)
3.1-Si aucun document n'est trouvé, préparer l'affichage d'un message d'erreur "Fichier inexistant ou mot de passe invalide"
3.2-Autrement, si aucun mot de passe n'a été précisé mais qu'un mot de passe est requis (selon les infos sur le fichier), préparer l'affichage du formulaire "Veuillez entrer un mot de passe"
3.3-Autrement, préparer l'affichage du fichier
4.1-Si un message d'affichage a été préparé, l'afficher
4.2-Sinon envoyer le fichier
La partie un brin plus compliquée concerne la manière d'afficher le fichier (le 4.2). Il reste ensuite a appeler le script afficherpage.asp?fileid=x dans le href de la balise A plutôt que de mettre le path du fichier directement.
Pour 4.2:
'set filename plus haut Set objStream = Server.CreateObject("ADODB.Stream") objStream.Open objStream.Type = 1 'adTypeBinary objStream.LoadFromFile( filename ) 'filename correspond au chemin complet du fichier Response.Expires = 0 'faire sûr que le buffer est prêt et VIDE Response.Buffer = true Response.Clear Response.ContentType = getMime(filename) 'important! C'est ça qui permet au navigateur d'ouvrir le bon type d'application (de lancer Acrobat reader ou Word par exemple) Response.BinaryWrite objStream.Read(-1) 'adReadAll = -1 'Le fichier Response.End objStream.Close set objStream = Nothing
Et la fonction getMime:
function getMime(filename) dim temp temp = Lcase (right(fileName, len(fileName) - InStrRev(fileName,"."))) 'on lit les x derniers caracteres de la fin de la chaine jusqu'a la position du dernier ".", puis on convertie en minuscules select case temp case "doc" temp = "application/msword" case "mdb" temp = "application/msaccess" case "pdf" temp = "application/pdf" case "rtf" temp = "application/rtf" case "xls" temp = "application/x-msexcel" case "ppt" temp = "application/x-mspowerpoint" case "wpd" temp = "application/wpd" 'à confirmer case "wav" temp = "audio/x-wav" case "mp3" temp = "audio/x-wav" 'à confirmer case "gif" temp = "image/gif" case "jpeg", "jpg", "jpe" temp = "image/jpeg" case "bmp" temp = "image/bitmap" case "css" temp = "text/css" case "htm", "html" temp = "text/html" case "txt" temp = "text/plain" case "xml" temp = "text/xml" case "msg" temp = "text/html" 'à confirmer case "wmv", "avi" temp = "video/x-msvideo" 'à confirmer case else temp = "text/html" 'inconnu end select getMime = temp end function
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
7 janv. 2005 à 17:58
7 janv. 2005 à 17:58
cette façon de faire me semble bonne question sécurité.
impec.
:-)
impec.
:-)