Postgres High(PSD 9.6)では、オードとグライ・クラブは奇妙な共依存戦争に陥っています。オタクは喜んでクラブに秘密の計画を描く。グライクラブは楽しい歌で応えます。Postgres Highのプリンシパル・リスク
オードが暴れると、グライクラブは決して反応しません。同様に、オタクは喜んクラブからリールを取得しようとしているだけなので、喜んでクラブが応答しない場合、オタクは実際に彼らの秘密の計画を呼び出すことはありません。
プリンシパルプログラマーとして、一度に起こりうるオタクの反乱の試みが1つしかないようにすることが私の仕事です。私はまた、オタクが成功し、グライクラブが成功するか、どちらも成功しないようにする必要があります。しかし、それらの は面倒なオタク、常にSQLインジェクション攻撃を試みている。あまりにもそれを防ぐ必要があります。そして、Postgres Highの優れた指導者たちはすべて、私たちのレッスンプランをSQLに書きます。
レッスンプラン:
begin;
-- stop race conditions with a hall monitor
select from semaphore where name = 'hall_monitor' for update;
prepare nerd_rebellion (
text, -- secret_mission
date -- when_we_strike
) as
update ultimate_plan
set secret_mission = $1
where when_we_strike = $2;
prepare glee_club_counterstrike (
text, -- happy_song
boolean -- kill_them_with_love
) as
insert into song_therapy (
happy_song,
kill_them_with_love
) values (
$1,
$2
)
execute nerd_rebellion(
'Nerds do stuff like this ; drop table song_therapy --f you glee club',
'2017-01-01'
);
execute glee_club_counterstrike(
'god_bless_america',
true
);
-- let us never speak of this again ...
deallocate nerd_rebellion
deallocate glee_club_counterstrike
-- all done. Release the hall monitor
commit;
まあこれは行うには元本のためにたくさんあります。私たちの授業はとても短く、準備と解散はすべてこのクラスで行われています。ああ。本当に私のコーヒーとドーナツの時間をカットします。しかし、私は単一のトランザクションで複数のステートメントをラップし、セマフォでシリアル化する必要があります。 SQLインジェクションでも妥協することはできません。もっと簡単な解決法はありません。あなたは?
人々はそれを得ることはありません、これはおそらくすぐに閉じられます。しかし、私は質問が好きです。 –