- データベースのオーナーとしてユーザー(user1)を作成
- user1にテーブルの操作権限を付与
- user1としてデータベースにログインし、テーブル操作
これらの操作を通してテーブル権限について理解を深める。
下準備
データベースとオーナーを確認
psql -l
新しくデータベースを作るのも面倒なので、前にこの記事を書いた時に作った「mydb」を今回も使う。
mydbにオーナーとしてログイン
psql -U オーナー名 mydb
検証用テーブルを作成、データの挿入
CREATE TABLE test_permission_table (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL
);
INSERT INTO test_permission_table (name) VALUES
('denji'),
('power'),
('aki');
用意したテーブル
id | name |
---|---|
1 | 'denji' |
2 | 'power' |
3 | 'aki' |
ユーザーの作成
SQL
CREATE USER user1 WITH PASSWORD 'user1';
今回パスワードはてきとー
作成したユーザーは以下のコマンドで確認できる
ユーザー一覧を確認
SELECT usename FROM pg_user;
権限の付与
構文
GRANT SELECT, INSERT, UPDATE, DELETE ON table_name TO user_name;
今回は、user1に対し、test_permission_tableについて、SELECTのみ権限を与える
構文
GRANT SELECT ON test_permission_table TO user1;
権限を確認したい場合は以下のSQLを実行
テーブルに設定されている権限を確認
SELECT grantee, privilege_type
FROM information_schema.table_privileges
WHERE table_name = 'テーブル名';
ユーザーの切り替え
オーナーからuser1に切り替えてログインし直す
user1でmydbにログインし直す
psql -U user1 mydbv
テーブル操作してみる
セレクト、インサート
SELECT * FROM test_permission_table;
-- 実行できた
INSERT INTO test_permission_table (name) VALUES ('kishibe');
-- ERROR: permission denied for table test_permission_table
権限があるセレクトはできるが、インサートはできない