News for hackers. Stuff that matters.
Re:Features I'd Like in PostgreSQL by hinkley on Saturday January 28, 2023 @06:54PM (#34563278)
The first and maybe the only time I saw UUID PKs was in a multi-tenant solution. If your customers are potentially competitors to each other, you absolutely do not want people to be able to walk IDs sniffing for other stuff. I wasn't the biggest fan of this solution, but I really didn't have a better suggestion.

On that same project we ran afoul of Javascript's 10^53 floating point limit with IDs, but I think that was a separate issue.

Re:Features I'd Like in PostgreSQL by avianlyric on Saturday January 28, 2023 @07:25PM (#34563507)
Honestly I think random UUIDs, or just UUIDs in general, make for terrible PKs and generally shouldn’t be used.

To solve the multi-tenant issue, I personally prefer either flakeID/hashID that have an ordered component and a random component to make walking IDs hard; Aggressively name spacing your data so a customer ID plus an object ID is always needed as pair to look something up, so trying to walk object IDs can only every result in someone accidentally looking up objects that already belong to them; edge layers that remap and filter internal identifiers via hashing etc so externally all ID are opaque and random; strong and careful access control, that ensures you can only ever lookup ID that belong to you, with careful consideration for side channel timing attacks.

Relying on random UUIDs for customer privacy would raise red flags for me. If being able to walk ID is enough to break your security model, then I kinda wonder if you actually have a security model.

Re:Features I'd Like in PostgreSQL by hinkley on Saturday January 28, 2023 @08:02PM (#34563793)
It's security in depth in this case, as I recall. There are subtleties in how you confirm or deny the existence of a record and for their particular solution to the problem you would get a 403 vs a 404 for a record you did not have access to.

Knowing how much activity a competitor is adding into a project management system isn't a lot of data, but it's more than zero.

Re:Features I'd Like in PostgreSQL by avianlyric on Sunday January 29, 2023 @02:19PM (#34571634)
There’s a simple solution to that. Always return 403, it’s what you should be doing regardless of your underlying data model.

You should always be determine right to access a record before attempting to look it up. If you can’t determine ACLs without the lookup, then your permissions layer should always assume the requester doesn’t have permission to view a non-existent record and return a 403.

Doing anything else is dangerous, and randomising PKs is a sticky plaster over a badly designed access control system.

Re:Features I'd Like in PostgreSQL by ccll on Saturday January 28, 2023 @07:09PM (#34563389)
How about solutions like https://hashids.org/ which let you keep auto increment intger PKs and present the IDs to the users in a obfuscated string form?
Re:Features I'd Like in PostgreSQL by nszceta on Saturday January 28, 2023 @07:28PM (#34563538)
It sounds like GP encountered UUID Version 4 keys.

UUID version 7 features a time-ordered value field derived from the widely implemented and well known Unix Epoch timestamp source, the number of milliseconds seconds since midnight 1 Jan 1970 UTC, leap seconds excluded. As well as improved entropy characteristics over versions 1 or 6.

If your use case requires greater granularity than UUID vesion 7 can provide, you might consider UUID version 8. UUID version 8 doesn't provide as good entropy characteristics as UUID version 7, but it utilizes timestamp with nanosecond level of precision.

Re:Features I'd Like in PostgreSQL by yrro on Sunday January 29, 2023 @10:06AM (#34568731)
Waiting patiently for these new UUID versions to be supported by uuid(1) or Python...
Re:Features I'd Like in PostgreSQL by ttfkam on Sunday January 29, 2023 @10:30AM (#34568958)
> Both UUIDv8 and UUIDv4 only specify that the version and variant bits are in their correct location. The difference is that UUIDv4 specifies that the remaining 122 bits be pseudo-randomly generated. UUIDv8 suggests that the generated value still be time-based however the implementation details of how that generation happens are up to the implementor. This means we have 48 bits of custom implementation, four bits for the version (1000), 12 more bits of custom implementation, two bits for the variant, and finally 62 bits as the implementation sees fit. This leaves a lot open to the implementor but it has enough rules around it that it can coexist in the existing UUID environment.

https://blog.devgenius.io/analyzing-new-unique-identifier-fo...

In other words, one CAN implement a UUIDv8 with nanosecond precision, but that is not a requirement of UUIDv8. 4 is random. 8 is a custom grab bag.

Re:Features I'd Like in PostgreSQL by winrid on Saturday January 28, 2023 @07:16PM (#34563439)
You can keep the incremental PK for internal stuff, and use an external_id for APIs. Benefit - you can change it if needed.
Re:Features I'd Like in PostgreSQL by codingdave on Sunday January 29, 2023 @07:23AM (#34567446)
If knowing/guessing an ID bypasses security between tenants, I don't think the ID itself is the security hole.