私たちのCRMでは、PHPのページを持っている6桁の請求書ID(例えば314529)与えられ、データベースから製品の行と合計をフェッチし、請求書を印刷し、ということ。
我々のような、電子メールを介して顧客に請求書のリンクを送信することができますので、我々は今、この請求書の生成ページを公開しているいくつかのスマートな作業策を実装するにはhttps://example.com/get-invoice.php?id=314529
問題は、請求書IDがプログレッシブなので、任意の顧客は、単に数をインクリメントすることにより、他のお客様の請求書にアクセスすることができ、あります。
私の考えでは、ランダムなUUIDを生成し、顧客が他の人の請求書を「推測」することはできませんのでことを、私達のデータベース内の実際の請求書番号にマッピングすることでした。
CREATE TABLE email_invoice (
public_uuid VARCHAR(128) UNIQUE,
actual_order_id INT
);
このユニークなIDを実装するための効率的、安全な方法は何ですか?万一I MD5請求書IDとそれをサブストリング、またはPHPに頼りますかuniqid
?
スターターとして:あなたはあなたのアプリケーション内の認可層を管理する必要があります。彼らは保存されたデータにアクセスしようとすると、各ユーザーが認証されなければならないとアクセス権がチェックされます。
ことでは、どちらか悪いことではありませんその上にいくつかのobsfucationを追加する、と述べました。ご使用の良い場所のように見えますが、使用する場合、UUID()
またはUUID_SHORT()
。
これらの機能は、あなたが探しているもののように見えるユニークな、予測不可能な識別子を生成します。あなただけのUUIDのカラムを使用することができる代わりに、主キーの。
欠点は、自動インクリメントのキーことを計算するために、より高価であるということである、とのデフォルト値を生成するオプションがないことinsert
のクエリは。
create table email_invoice (
id varchar(36) primary key,
email_id int,
invoice_id int
);
insert into email_invoice(id, email_id, invoice_id) values(uuid(), 1, 2);
ID | EMAIL_ID | invoice_id :----------------------------------- | -------:| ---------: b86d0d8b-7022-11ea-8095-00163e561f6d | 1 | 2
また、作成することができますbefore
割り当てトリガuuid()
あなたが声明自体に機能を呼び出すことを心配する必要はありませんので、一人ひとりの挿入のために。