大量のデータを扱う現代のシステムにおいて、セキュリティとデータ品質の担保は非常に重要です。本章では、ロールベースのアクセス制御から、個人情報保護(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によるセキュリティ・ガバナンス強化は、システムの信頼性と法令遵守のために欠かせません。以下の点を意識して設計・運用を進めましょう:
- ロール設計とアクセス制御で不正操作を未然に防ぐ
- マスキングと匿名化で個人情報の保護を徹底
- 制約と整合性設計でデータ品質を担保
これらを実装しておくことで、セキュアで高品質なデータ基盤を構築し、組織の信頼とコンプライアンスを守ることができます。