ProgrammingSQLアーキテクト

SQLでの権限やロールを通じてデータを意図しない変更や悪意のある変更から保護する方法は何ですか? アクセスレベルの違いとは何ですか? また、多層的なセキュリティポリシーをどのように適切に実装すればよいですか?

Hintsage AIアシスタントで面接を突破

回答。

SQLサーバーは、ロールユーザー権限(GRANT/REVOKE)、およびスキーマ(schemas)を通じて多層的なアクセス権限システムをサポートしています。重要な原則は次のとおりです:

  • ロールを割り当てる = ユーザーが後で取得する権限のセット。
  • 最小限の権限のみを付与する(最小特権の原則)。
  • データベース、テーブル、ビュー、ストアドプロシージャごとに権限を分ける。
  • 特に重要な操作には、テーブルへの直接アクセスではなく、ストアドプロシージャやビューを使用する。

ロールと権限の割り当ての例:

-- アナリスト用のロールを作成 CREATE ROLE Analyst; -- 必要なテーブルに対して SELECT のみを付与 GRANT SELECT ON Sales TO Analyst; -- データの変更を禁止 REVOKE INSERT, UPDATE, DELETE ON Sales FROM Analyst; -- ユーザーにロールを割り当て GRANT Analyst TO user_ivan;

よく、読み取り(read-only)、変更、管理、および特定の操作のためのロールが区別されます。

引っかけ問題。

引っかけ:「ビュー(VIEW)のみにアクセスする権限を持つユーザーは、ビューを通じて基になるテーブルを変更できますか? 例を挙げてください。」

回答: はい、VIEWが集約/グルーピングを含まず、読み取り専用(WITH CHECK OPTION)でない場合、VIEWでINSERT/UPDATE/DELETEを実行でき、許可されている場合は基になるテーブルに変更が反映されます。

-- 不要な列を省くビュー CREATE VIEW SalesAsView AS SELECT id, total, manager_id FROM Sales; -- 許可されていれば、ユーザーは次のように変更を加えます: UPDATE SalesAsView SET total=1000 WHERE id=42; -- これにより、Sales.totalがid=42に影響します

解決策:readonly VIEWのみを使用するか、ビューを通じてデータ変更の権限を禁止します。

このテーマの詳細を知らないことによる実際のエラーの例。


ストーリー

プロジェクト: HRポータル、従業員の個人データ。

エラー: オペレーターはVIEWを介して基になるテーブルへのUPDATE権限なしにアクセスでき、互いに給与を偶然に変更しました。元々は「レポート専用」として設計されていました。



ストーリー

プロジェクト: 簿記、外部統合。

エラー: 外部システムに全DBに対してINSERTおよびSELECTの権限を与え、必要なテーブルに対してのみINSERTを許可しました。結果:DB全体の読み取りの脆弱性とGDPRに違反する可能性。



ストーリー

プロジェクト: SaaSプラットフォーム、マルチユーザーのレポート。

エラー: すべてのクライアントが共通の権限を持つ同じスキーマで作業しており、他人のデータを偶然に見たり、編集したりできました。解決策は、スキーマを分割し、個別のロールを設定し、Row Level Security (RLS)レベルで独自の制限を設けることです。