問題タブ [row-level-security]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3057 参照

database - ビューまたは結合による選択を含む PostgreSQL の行レベルのセキュリティ

(より良い、またはよりわかりやすいタイトルの提案を歓迎します)。

RLS(またはその他のメカニズム)を使用して、PostgreSQLで次のことが可能かどうか疑問に思います。ユーザー名が別のテーブルの列と一致する場合、ユーザーがテーブルの特定の行を更新できるようにします。次の例では、 tableのnenecolumn として表示されるuserが、 columnおよびtableを更新できるように します。私が表現したいのは、次の select ステートメントによって一致する t2 の行にポリシーを適用することです。 ut0apt2SELECT a, p FROM t2 INNER JOIN t1 ON (t2.t1id = t1.id) INNER JOIN t0 ON (t1.t0id = t0.id) WHERE t0.u = 'nene';

これは可能ですか?続行する方法について何か提案はありますか? 明らかな回避策は、テーブル t2 でユーザー名を複製することですが、これにより t2 に余分な情報が追加され、強制するための追加の制約が必要になります。

これが私の 3 つのテーブルです (実際の状況では、さらに多くのフィールドがあり、テーブル t1 を問題から除外することはできません。2 つの結合が必要になるとソリューション スペースが変わる可能性があるため、この例では残しました)。

  • テーブルt0は次のもので作成されCREATE TABLE t0 (id TEXT PRIMARY KEY, u TEXT UNIQUE, pn TEXT);、現在含まれています:

    /li>
  • テーブルt1は次のもので作成されCREATE TABLE t1 (id TEXT PRIMARY KEY, t0id TEXT REFERENCES t0(id), pn TEXT);、現在含まれています:

    /li>
  • テーブルt2は で作成されCREATE TABLE t2 (id TEXT, t1id TEXT REFERENCES t1(id), a INET, p INT);、現在含まれています

    /li>
0 投票する
1 に答える
57 参照

php - 行レベルのセキュリティを実装しながら、PHP を介して MySQL データベース アカウントにログインする

私が取り組んでいるプロジェクトのポイントでは、情報が多すぎて MySQL の経験が不足しているため、物事を非常に考えすぎています。これ。" 私のアプローチ全体が愚かであり、見直されるべきであるという提案にもオープンです。このプロジェクトで交渉の余地のない唯一のものは、php と MySQL の使用です。

そこで、MySQL に行レベルのセキュリティを実装しようとしています。MySQL にはロールがないため、FGAC が必要なテーブルごとにビューを使用するか、ユーザー ID などのユーザーを特定できる情報をフィルタリングする条件を使用する必要があることを説明する良い記事を読んでください。データベースの相対的な複雑さと、データベースの性質によるセキュリティ上の懸念から、私はビュー ルートを選択しました。私が持っているビューの例を次に示します。

各ユーザーは独自のデータベース アカウントを持ち、大部分のユーザーは関連するビューの選択、更新、挿入などしかできないため、これにより、ユーザーが働いている組織、ユーザーの組織の直接の子組織が完璧に得られます。 、および前述の組織のいずれかに属するシステム。ユーザー名はメールアドレスであるため、ユーザー関数の substring_index の 2 であり、パスワードは十分にハッシュされています。

ここで問題が発生するのは、Web インターフェイスを追加するときです。明らかに、ユーザーがユーザー名とパスワードでログインすると、これらは mysqli_connect() を介してデータベースに渡されます。私の知る限り、ベスト プラクティスは、各トランザクションまたはトランザクション グループの実行後に接続を閉じることです。

問題は、ユーザーが自分のデータベース アカウントでどのように接続するのかということです。もちろん、毎回パスワードを再入力するように彼に求めるつもりはありません。ハッシュ化されたパスワードを $_SESSION 変数に保存するのはよくない考えですよね? それを考えると、より一般的なアカウントとして接続するためにMySQL側で実行できることはありますが、user()が実際のデータベースアカウント名を返すようにユーザーを自分自身として設定することはできますか?

それとも、冒頭で私が尋ねたように、このアプローチは単にばかげているのでしょうか? 提供できる情報をありがとう。