30 lines
833 B
MySQL
30 lines
833 B
MySQL
|
|
CREATE TABLE users (
|
||
|
|
id TEXT PRIMARY KEY NOT NULL UNIQUE,
|
||
|
|
username VARCHAR(255)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE TABLE passkeys (
|
||
|
|
id TEXT PRIMARY KEY NOT NULL UNIQUE,
|
||
|
|
public_key BYTEA,
|
||
|
|
webauthn_user__id TEXT UNIQUE,
|
||
|
|
counter BIGINT,
|
||
|
|
device_type VARCHAR(32),
|
||
|
|
transports VARCHAR(255)
|
||
|
|
);
|
||
|
|
|
||
|
|
-- User/passkey junction table
|
||
|
|
CREATE TABLE user_passkeys (
|
||
|
|
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||
|
|
user_id TEXT NOT NULL,
|
||
|
|
passkey_id TEXT NOT NULL,
|
||
|
|
|
||
|
|
-- Foreign key constraints
|
||
|
|
CONSTRAINT fk_user_passkeys_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
||
|
|
CONSTRAINT fk_user_passkeys_passkeys FOREIGN KEY (passkey_id) REFERENCES passkeys(id) ON DELETE CASCADE,
|
||
|
|
|
||
|
|
-- Prevent duplicates
|
||
|
|
CONSTRAINT unique_user_passkeys UNIQUE (user_id, passkey_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX index_passkeys ON passkeys (id, webauthn_user__id);
|