データベース内の特定のテーブルのIDを、データベース内の特定のエントリにアクセスするためにクライアントに返す必要があるRESTfulなサービスの開発に取り組んでいました。私は、自動インクリメントを使用し、直接IDを返すに対して助言ので、私が代わりに次のようにイドを暗号化して送信するために行ってきました -データベースIdの暗号化
SET @secretKey1 = "some key";
SET @secretKey2 = CONCAT("some other key", AccountNo);
SET @encryptedAccountNo = TO_BASE64(AES_ENCRYPT(AccountNo, @secretKey1));
SET @encryptedId = TO_BASE64(AES_ENCRYPT(Id, @secretKey));
RETURN CONCAT(@encryptedAccountNo, @encryptedId);
(注意:口座番号がにさらされないように十分にランダムフィールドですクライアント)
プライマリキーとしてUUIDを使用する方が適切でしょうか?もしそうなら、UUIDを十分に使用しているか、それとも暗号化すべきか?
あなたは完全に他のデザインを使用しますか?
また、既存のデザインのセキュリティまたはパフォーマンス面を改善するためのヒントはありますか?私はあなたがそのアドバイスを誤解しているかもしれないと思う
中程度の(12文字)ランダムな文字列のような、予測できないものを使用する方が良いかもしれません。 – tadman
@tadmanランダムな12文字の文字列の場合、どうやって衝突を処理しますか? – ytibrewala
十分に堅牢な乱数生成器を持っていて、あなたの文字列にbase-62のようなものを使用しているなら、3,226,266,762,397,899,821,056の可能なシーケンスがあります。衝突する可能性のないピジョンホール原理を説明することさえある。衝突が心配な場合は、コードを設定して再試行するか、文字列の長さを増やしてください。 – tadman