テックカリキュラム

SQLセキュリティ・データガバナンス

SQLセキュリティ・データガバナンス

大量のデータを扱う現代のシステムにおいて、セキュリティとデータ品質の担保は非常に重要です。本章では、ロールベースのアクセス制御から、個人情報保護(PII)のためのデータマスキング、そして制約による品質保証まで、実践的なガバナンス強化の手法を解説します。


ロールとアクセス制御

DBアクセスは、「誰が」「どの操作を」「どこまで」できるかを厳格に設計する必要があります。これにより、意図しない誤操作や情報漏洩を防ぎます。

PostgreSQLのロール設計例

-- 読み取り専用ロールの作成 CREATE ROLE readonly; GRANT CONNECT ON DATABASE mydb TO readonly; GRANT USAGE ON SCHEMA public TO readonly; GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; -- 自動付与のための設定 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly; 

ロールとユーザーの分離管理

-- ユーザーにロールを付与 CREATE USER report_user WITH PASSWORD 'securepass'; GRANT readonly TO report_user; 

ポイント: ユーザーとロールを分離することで、アクセス権限の再利用性と運用性が向上します。

MySQLのGRANT構文

GRANT SELECT ON mydb.* TO 'readonly_user'@'%' IDENTIFIED BY 'securepass'; 

GRANT文でアクセス権限を定義し、必要なテーブル・操作だけを許可するのが基本です。


データマスキングとPII対策(仮名化・匿名化)

個人情報(PII: Personally Identifiable Information)は、法律や社内ポリシーにより、開発環境や検証環境ではマスキング(仮名化・匿名化)が求められます。

1. データマスキング(可逆:テスト用)

-- 氏名の仮名化(例:頭文字+固定文字) SELECT CONCAT(SUBSTRING(name, 1, 1), '**') AS masked_name FROM users; 

2. 完全匿名化(不可逆)

-- メールアドレスを一方向ハッシュ SELECT MD5(email) AS anonymized_email FROM users; 

匿名化後のデータは、本人を特定できないよう変換され、再識別リスクを回避します。

3. アプリケーションレベルのマスキング例(ビュー利用)

CREATE VIEW users_masked AS SELECT id, CONCAT(LEFT(name, 1), '**') AS name, NULL AS email -- メールはマスキング不可 FROM users; 

ビューを使ったマスキングは、読み取り権限だけをビューに付与することで安全性を高められます。


データ品質の担保と制約設計

データがいくら多くても、正確で一貫性のあるデータでなければ活用できません。データベースには、品質を担保するための制約(Constraints)を設計しましょう。

1. NOT NULL, UNIQUE, CHECK制約

CREATE TABLE employees ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE, age INT CHECK (age >= 18) ); 

CHECK制約を活用すれば、年齢や日付など業務上のルールを強制できます。

2. 外部キー(FOREIGN KEY)による整合性保証

CREATE TABLE departments ( dept_id SERIAL PRIMARY KEY, name TEXT ); CREATE TABLE employees ( emp_id SERIAL PRIMARY KEY, dept_id INT REFERENCES departments(dept_id) ); 

これにより、「存在しない部署に所属している社員」などのデータ不整合を防止

3. ENUMやドメイン型の活用

-- PostgreSQL: ENUM型 CREATE TYPE gender AS ENUM ('male', 'female', 'other'); CREATE TABLE users ( id SERIAL, gender gender ); 

許容値を明示することで、入力ミスや誤登録を抑止できます。


まとめ

SQLによるセキュリティ・ガバナンス強化は、システムの信頼性と法令遵守のために欠かせません。以下の点を意識して設計・運用を進めましょう:

  • ロール設計とアクセス制御で不正操作を未然に防ぐ
  • マスキングと匿名化で個人情報の保護を徹底
  • 制約と整合性設計でデータ品質を担保

これらを実装しておくことで、セキュアで高品質なデータ基盤を構築し、組織の信頼とコンプライアンスを守ることができます。