I guess you can't do it with a database only solution. You can use the account identifier (account DB-> User) to put it per account. But ppl can register many accounts as you mentioned and use it.
Code:
JID StrUserID
1 Keks
3 cookie
4 log
5 log2
6 log3
7 log4
8 log5
9 log6
1 account = 1 JID
If you want to give silks only to 1 account per user you have to find a way to identify each user uniquely. In this case IP, HWID + filter etc. won't work with 100% success, because you can change both with VM, software, swapping hardware and so on.
To identify each user uniquely you might give them a unique ID, which could be required to gain silk per hr or silk per day, for example 1 per discord user. But ofc. this is also not 100% secure. Or you integrate something into your website to identify each account on creation, but ppl might simply use a 2nd random computer to create more accounts.
Fingerprint
Maybe another solution would be to use JID as mentioned and add some kind of webstore, which will give you account- or charbound items only. Still you could use many accounts to gain access to alchemy stones, but you could exclude these items from the list and add other sources to drop them for example. In theory it is also possible to "farm" pet clocks and gear extenders, thus it is hard to make it non cheatable.
Or a smart solution: don't use silk/h, use something else to distribute free charbound silk items to ppl, like ingame quests or drops from instanced maps. If you give pets and gears accountbound via quest, it will not be possible to swap them to other accounts for 1 month of time extension.