[MSSQL] Random default value?

Pagina: 1
Acties:

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 05-03 19:51
Ik ben bezig met een site voor een koeriersbedrijf en die mensen willen dat de klanten hun pakketjes kunnen volgen via internet. Nu heb ik in de database alle pakketjes voorzien van een ID, en ik heb de site zo gemaakt dat het pakketje gevolgd kan worden nadat het Pakket-ID is ingevoerd. Nu wil ik alleen niet dat jantje het pakket van pietje kan volgen of dat jantje zomaar ff wat pakketjes gaat volgen door pakket-id's te gaan raden. Ik wil dus een extra beveiliging maken in de vorm van een soort wachtwoord. Nu is het nogal wat werk om voor elke klant een wachtwoord te maken dus ik dacht het makkelijker te doen door in de pakketten-tabel een extra kolom te maken om een soort van wachtwoord in op te slaan wat gewoon een random waarde is. Als er een pakket ingevoerd wordt moet daar dus automatisch een random waarde komen te staan (bijv. een getal van 5-digits oid) en dan kan de klant dus de combinatie pakket-id/random-nummer toegestuurd krijgen en dat gebruiken om in te loggen.
Allemaal leuk en aardig, maar ik heb geen id hoe ik een kolom een random default waarde kan geven in MS SQL (2000). Ik heb gezocht en zelfs MSDN helemaal uitgepluist maar ik heb het niet kunnen vinden :(

Weet iemand of dit uberhaupt mogelijk is en hoe ik dit voor elkaar kan krijgen?

Ik had zelf al wel gedacht dat ik het met de invoer-software van de pakketjes kon opvangen door het programma een random waarde te laten inserten maar een default value zou toch makkelijker/netter zijn denk ik

Rookworst zonder R is ook worst.


  • whoami
  • Registratie: December 2000
  • Nu online
Een GUID veld?

Of anders kan je natuurlijk ook altijd je selectie-criteria uitbreiden: ipv enkel op pakket-id te selecteren, breidt je je where clausule uit door ook op klantid te selecten. Dat maakt het toch ook al wat moeilijker om 'pakketje raden' te spelen.

[ Voor 90% gewijzigd door whoami op 02-12-2003 11:54 ]

https://fgheysels.github.io/


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

MSSQL heeft een rand() functie (zie books online) kijk eens of je daarmee iets kan. Als het niet mogelijk is deze te gebruiken in een default kan je nog overwegen om het in een trigger of udf op te nemen.

Maar waarom zou je het niet in je invoer-software willen doen?

Today's subliminal thought is:


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Ik heb deze laatst in elkaar geprogt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    declare @final varchar(5)
    set @final = ''
    while len(@final) < 5
    begin
    declare @randomwaarde varchar(5)
    declare @laatstewaarde int
    declare @nieuwstewaarde int
    set @randomwaarde=''
    set @laatstewaarde=''
    while len(@randomwaarde) < 5
    begin
        set @nieuwstewaarde= 57 - round (9 * rand(cast(datepart(ms,convert(datetime,getdate(),112)) as varchar(3)) + cast(datepart(ss,convert(datetime,getdate(),112)) as varchar(3)) + cast(datepart(mi,convert(datetime,getdate(),112)) as varchar(3)) + cast(datepart(hh,convert(datetime,getdate(),112)) as varchar(3))),0)
        if @nieuwstewaarde <> @laatstewaarde
        begin
            set @laatstewaarde = @nieuwstewaarde
            set @randomwaarde= @randomwaarde + char(@nieuwstewaarde)
    
        end
    end

    set @final = @final + cast((cast(@randomwaarde as int) % 9) as varchar(1))
    end

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 05-03 19:51
Annie schreef op 02 december 2003 @ 14:36:
MSSQL heeft een rand() functie (zie books online) kijk eens of je daarmee iets kan. Als het niet mogelijk is deze te gebruiken in een default kan je nog overwegen om het in een trigger of udf op te nemen.

Maar waarom zou je het niet in je invoer-software willen doen?
Omdat ik daar niet over ga, en het mij een nettere oplossing leek om het op te nemen in de database als een Default value, scheelt programmeerwerk en is makkelijk te veranderen...

Overigens heb ik het al anders opgelost, 'tis al niet meer nodig :)
ik laat nu de gebruiker de combinatie PakketID/Postcode van de bestemming van het pakket invoeren. Beiden staan aan al in de DB en de combinatie is haast niet te raden dus werkt goed genoeg. 'Tuurlijk is het geen waterdichte beveiliging maar dat is ook niet nodig, het is nou niet bepaald vertrouwelijke informatie want de inhoud van het pakket ofzo wordt niet getoond, slechts de locatie ervan.

Toch bedankt! :)

Rookworst zonder R is ook worst.