r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[MySQL]

Pekr
5-Sep-2005
[176]
has anyone experience with character sets and collations? I can see 
there are variables like character_set_connection() and collation_connection(), 
etc. - can those be set from within the Rebol?
MikeL
16-Sep-2005
[177]
This is related, I think, to my notes about VID and MySQL in the 
View section. In a test that we ran in 2004 we were able to load 
1,000,000 rows in under 30 minutes.  We did not investigate further 
but we thought we could improve this by running parallel loads and 
putting it on a real server instead of a laptop.  This volume was 
equal to the annual volume of  the transactions we were interested 
in so would represent a journal of everything that happened to this 
app as a keyed transaction in one year.   


From that 1,000,000 row database, we were able to create an HTML 
report based on some selected criteria in 2.5 seconds.  

All tests done with REBOL View using Doc's mySQL protocol.
Tomc
20-Oct-2005
[178]
volker  thanks for figureing out the SET PASSWORD ...OLD_PASSWORD(''xyz'); 
before I needed it ;)
Pekr
8-Jan-2006
[179x7]
I am reopening the issue of mySQL protocol not being able to connect 
to newer >= 4.11 mySQL version database. I decided to consider this 
task as being a proof if the community is, or is not able to effectively 
resort some issues, which clearly show as a show stopper for some 
rebollers (as can be seen on ml). If we are not able to effectively 
resolve this issue, then I have to ask - what actually are we able 
to sort?
Yesterday afternoon I spent investigating Doc's scheme, and here 
are my conclusions:


- The part of code responsible for password communication with the 
server is in the 'scrambler object. The function whish establishes 
connection with server is 'do-handshake


- rebol's mysql protocol seems to distinguish protocol version 9 
and 10, and I was not able to find out, what does it mean on mysql's 
side of things. It also seems to me, there is long-password item 
already in the stack, but dunno if related, it is just osme constant. 
Protocol version 9 and 10 use different hash functions and different 
crypt functions. I really don't know, where does DocKimbel find out 
how to implement those functions, maybe by looking into mySQL source, 
so I downloaded them


- to read more about passwords in mysql, go here - http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html
. Maybe it is not protocol 9 and 10 related, as you may use old password 
scheme even with new databases. The difference is as follows - starting 
from mySQL 4.11, passwords are stored in 41 bytes wide field, whereas 
with older versions, it was 16bytes. New passwords always start with 
* (asterisk) char, to be easily distinguished ...


- how things might work? Mysql sends scrambled password, and Doc's 
scheme stores it in 'crypt-seed variable.  Data is being sent by 
the protocol by 'send-packet function, where for the password part, 
scrambler/scramble function is used, which calls crypt-v10 or crypt-v9, 
according to protocol versions. Those function use hash-v10(9), floor 
and other functions ...


I think that we somehow need to find out, how to compute hash for 
not 16bytes, but for those 41bytes ...
Now - sorry if I am breaking some licenses, but I will post some 
stuff to my website, and remove it once we are finished:

http://www.rebol.cz/mysql/mysql-protocol.r
http://www.rebol.cz/mysql/password.c
I think we somehow need to figure out, how to compute new hash which 
will be 41 bytes in the result. Dunno why they don't use some standard 
hashing algorithm, so we could use simply rebol's 'checksum :-(
maybe this is better description:

The password is saved (in user.password) by using the PASSWORD() 
function in
  mysql.


  This is .c file because it's used in libmysqlclient, which is entirely 
  in C.
  (we need it to be portable to a variety of systems).
  Example:
    update user set password=PASSWORD("hello") where user="test"
  This saves a hashed number as a string in the password field.

  The new authentication is performed in following manner:

  SERVER:  public_seed=create_random_string()
           send(public_seed)

  CLIENT:  recv(public_seed)
           hash_stage1=sha1("password")
           hash_stage2=sha1(hash_stage1)
           reply=xor(hash_stage1, sha1(public_seed,hash_stage2)

           // this three steps are done in scramble() 

           send(reply)

     
  SERVER:  recv(reply)
           hash_stage1=xor(reply, sha1(public_seed,hash_stage2))
           candidate_hash2=sha1(hash_stage1)
           check(candidate_hash2==hash_stage2)

           // this three steps are done in check_scramble()
why Doc implemented his hash-V9 and hash-V10 functions this way? 
Don't we have 'sha1 method with 'checksum? (just basing it upon "help 
checksum")
So - I did some homework here, but I am at my limits (well, maybe 
not, but I will be very slow from now on), whereas we have ppl knowing 
C here, and ppl who did some hashing etc. for Beer (Ladislav), so 
guys, if you find some 10 minutes of spare time, please at least 
try to give me some pointers here. As I said - the world is upgrading 
mySQL to 5.0 now, so 4.11 is older, not to mention 4.0.1 or 3.23. 
It is about having mysql free scheme for rebol, or not. And don't 
think every admin will be willing to set old-password parameter for 
his server, as this can be regarded a security risk ...
Pekr
9-Jan-2006
[186]
.
Graham
9-Jan-2006
[187]
I think someone needs to pay someone to fix it.
Pekr
9-Jan-2006
[188]
:-)
Graham
9-Jan-2006
[189]
You have these open source sites where a developer offers to fix 
something for a sum.  The community then collects the money and pays 
the developer.  Whoever needs this, will donate to have this done.
Pekr
9-Jan-2006
[190]
how much, and to whom?
Graham
9-Jan-2006
[191x2]
someone first off needs to say that they will do it, and for how 
much.
Jeff could probably do it.
Pekr
9-Jan-2006
[193]
I suggested such model for a long time already. I used it with rebol 
in the past too ... so just - how much, and who does it? :-)
Graham
9-Jan-2006
[194x3]
Ask him how much he wants, and then see who is interested in contributing.
There must be quite a few rebol users using mysql.
if no one contributes .. then clearly it's not worth doing.
Pekr
9-Jan-2006
[197]
I will see what comes up on ml ....
Graham
9-Jan-2006
[198]
People have to earn a living ..
Pekr
9-Jan-2006
[199x4]
anton (sorry, can't write capital "a", my keyboard broken :-), the 
trouble is that I can see some ppl frustrated at ml .....
I don't know any other language, which would not have mysql scheme 
....
I did some preparations even for plug-in ... but nothing happened. 
To have NS kind of plug-in, not many C wrapped code would be needed 
imo!
Not investing much money in our PC shop, I would pay some ppl myself 
to do the job for me :-(
Anton
9-Jan-2006
[203]
I'd be crazy to add this to my schedule now. But ask me in about 
a month and I might look into it then.
Pekr
9-Jan-2006
[204x3]
working on some rebol stuff, if I might ask?
I would at least like to know, if checksum/secure uses typical SHa1 
method?
notice : this group is now web-public
Anton
9-Jan-2006
[207x2]
Of course, rebol, but also looking at getting broadband, and fixing 
other people's computers :-( Trojans galore last week.)
Goodness me, Petr, the checksum/secure question can be sooo easily 
answered. So easily, that I think an experienced reboler such as 
yourself in posing this question must be implying something else.
Pekr
9-Jan-2006
[209]
I don't understand what do you mean here. I probably know, from its 
help, that it supports md5 and sha1, but dunno how to use such fact 
in regards to mysql scheme. Why doc coded his own functions then? 
Or is it just that older auth schemes did not use typical sha1 hashing?
sqlab
9-Jan-2006
[210]
Only the /pro,  /command  and sdk  versions have this functions exposed
Pekr
9-Jan-2006
[211]
really?
sqlab
9-Jan-2006
[212]
If I remember, otherwise there is only encloak
Pekr
9-Jan-2006
[213]
I am not talking about encryption, just looking into 'checsum function 
help ... I just need hash ...
Anton
9-Jan-2006
[214]
We need the C code that they use to generate the checksum. That way 
we might see some comments or code which tell us how it is computed 
and if rebol's builtin checksum also does it.
Pekr
9-Jan-2006
[215x2]
I posted two links above to rebol.cz ...
Now - sorry if I am breaking some licenses, but I will post some 
stuff to my website, and remove it once we are finished:

http://www.rebol.cz/mysql/mysql-protocol.r
http://www.rebol.cz/mysql/password.c
Anton
9-Jan-2006
[217]
Yep, so now you can go and find the C code.
Pekr
9-Jan-2006
[218x3]
maybe this is better description:

The password is saved (in user.password) by using the PASSWORD() 
function in
  mysql.


  This is .c file because it's used in libmysqlclient, which is entirely 
  in C.
  (we need it to be portable to a variety of systems).
  Example:
    update user set password=PASSWORD("hello") where user="test"
  This saves a hashed number as a string in the password field.

  The new authentication is performed in following manner:

  SERVER:  public_seed=create_random_string()
           send(public_seed)

  CLIENT:  recv(public_seed)
           hash_stage1=sha1("password")
           hash_stage2=sha1(hash_stage1)
           reply=xor(hash_stage1, sha1(public_seed,hash_stage2)

           // this three steps are done in scramble() 

           send(reply)

     
  SERVER:  recv(reply)
           hash_stage1=xor(reply, sha1(public_seed,hash_stage2))
           candidate_hash2=sha1(hash_stage1)
           check(candidate_hash2==hash_stage2)

           // this three steps are done in check_scramble()
according to above, it is not so difficult - algorithm is as above 
...
what I am not sure is if I can use checksum to get equivalent of 
above sha1("password") ?
Anton
9-Jan-2006
[221x2]
Ah right:
checksum/secure checksum/secure "mypass"
== #{6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4}
looks same as in 
http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html
Pekr
9-Jan-2006
[223x2]
what is checksum/method "mypass" 'sha1 good for then?
does it mean mySQL new password method is even more rebol friendly 
as it was in the past? hmm, if so, should not be difficult to proceed 
from this point?
Volker
9-Jan-2006
[225]
that checksum has only 20 digits?
'sha1, maybe more explicit?