0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

(PostgreSQL)テーブルの権限について

Last updated at Posted at 2023-03-19
  • データベースのオーナーとしてユーザー(user1)を作成
  • user1にテーブルの操作権限を付与
  • user1としてデータベースにログインし、テーブル操作

これらの操作を通してテーブル権限について理解を深める。

下準備

データベースとオーナーを確認
psql -l

実行結果
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313039323336362f66343330633665362d306262652d363861652d323035352d3537316335656230393465662e706e67.png

新しくデータベースを作るのも面倒なので、前にこの記事を書いた時に作った「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

権限があるセレクトはできるが、インサートはできない

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?