PostgreSQL/テーブルに対してのアクセス権限を設定する・GRANT,REVOKE
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#navi(../)
* PostgreSQLでテーブルに対してのアクセス権限を設定する・G...
テーブルに対してアクセス権限の設定を行うGRANT, REVOKEの使...
データベース毎のなどのアクセス権限については、GRANTの構文...
基本的に多少の構文が変わるだけなので、本資料は役立つと思...
使用したOSはCentOS6になります。~
また、使用したPostgreSQLのバージョンは以下の通りです。
postgres=# select version();
ver...
--------------------------------------------------------...
PostgreSQL 8.4.13 on x86_64-redhat-linux-gnu, compiled ...
(1 行)
#contents
#htmlinsertpcsp(db-top.html,db-sp.html)
* 関連記事・関連資料 [#q6264171]
-[[PostgreSQLでユーザを追加する方法>PostgreSQL/PostgreSQL...
-[[PostgreSQLでユーザを削除する方法>PostgreSQL/PostgreSQL...
-[[PostgreSQLでユーザのロールを変更する・ALTER ROLE, ALTE...
* GRANT, REVOKEを使ってユーザにアクセス権限の設定を行う [...
以下にユーザ、データベースを新規に作成しGRANT,REVOKEを使...
** GRANT, REVOKE実施前準備 [#o4baad98]
以下のようにpostgresユーザでPostgreSQLに接続し、データベ...
-データベースfooの作成
-bash-4.1$ psql
psql (8.4.13)
"help" でヘルプを表示します.
postgres=# create database foo;
CREATE DATABASE
postgres=# \l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 |...
-----------+----------+------------------+-------------+...
foo | postgres | UTF8 | ja_JP.UTF-8 |...
postgres | postgres | UTF8 | ja_JP.UTF-8 |...
template0 | postgres | UTF8 | ja_JP.UTF-8 |...
...
template1 | postgres | UTF8 | ja_JP.UTF-8 |...
...
(4 行)
- fooデータベースに切替
postgres=# \c foo
psql (8.4.13)
データベース "foo" に接続しました。.
-テーブルt1を作成
foo=# create table t1 (c1 int, c2 int);
CREATE TABLE
foo=# \d t1
テーブル "public.t1"
カラム | 型 | 修飾語
--------+---------+--------
c1 | integer |
c2 | integer |
-ユーザsakuraの作成
foo=# create user sakura with password 'sakurapass';
CREATE ROLE
foo=# SELECT usename FROM pg_user;
usename
----------
postgres
sakura
(2 行)
** GRANTでアクセス権限を付与せずt1テーブルを操作してみる ...
新しく作成したsakuraでデータベースfooに接続しinsertをして...
-sakuraでデータベースfooに接続~
(pg_hba.confの設定を変更し、以下のコマンドで接続できるよ...
-bash-4.1$ psql -U sakura -h 127.0.0.1 foo
ユーザ sakura のパスワード:
psql (8.4.13)
"help" でヘルプを表示します.
-t1テーブルの確認
foo=> \d t1
テーブル "public.t1"
カラム | 型 | 修飾語
--------+---------+--------
c1 | integer |
c2 | integer |
-INSERT文を発行すると権限がないためエラーとなる。
foo=> insert into t1 values(1,1);
ERROR: リレーション t1 への権限がありません
foo=>
** GRANTでINSERT, SELECT権限を付与してみる [#p68a88d9]
スーパーユーザpostgresにで再度fooデータベースに接続し、GR...
-postgresユーザでfooデータベースに接続
-bash-4.1$ psql foo
psql (8.4.13)
"help" でヘルプを表示します.
-GRANTでt1テーブルに対し、ユーザsakuraにSELECTとINSERTの...
foo=# GRANT SELECT, INSERT ON t1 TO sakura;
GRANT
-アクセス権限を確認するとt1テーブルに対し、sakuraにSELECT...
foo=# \z
アクセス権
スキーマ | 名前 | 型 | アクセス権 |...
----------+------+----------+---------------------------...
public | t1 | テーブル | postgres=arwdDxt/postgres |
: sakura=ar/postgres
(1 行)
-INSERT, SELECT, UPDATEを実行してみるとUPDATEがエラーにな...
-sakuraでデータベースfooに接続
-bash-4.1$ psql -U sakura -h 127.0.0.1 foo
ユーザ sakura のパスワード:
psql (8.4.13)
"help" でヘルプを表示します.
- INSERT, SELECTを発行
foo=> INSERT INTO t1 VALUES(1,1),(2,2);
INSERT 0 2
foo=> SELECT * FROM t1;
c1 | c2
----+----
1 | 1
2 | 2
(2 行)
- UPDATEを発行
foo=> UPDATE t1 SET c1=10, c2=10 WHERE c1=1;
ERROR: リレーション t1 への権限がありません
foo=>
** GRANTで全てのアクセス権限を付与する [#raff0cfa]
上記の例では、SELECTとINSERTのみテーブルt1に対しアクセス...
以下の例は、ALLを使って全ての権限を付与します。
-スーパーユーザpostgresでfooデータベースに接続。
-bash-4.1$ psql foo
psql (8.4.13)
"help" でヘルプを表示します.
- t1テーブルに対しsakuraにALLの権限を付与しています。
foo=# GRANT ALL ON t1 TO sakura;
GRANT
- \zにてアクセス権限を確認。
foo=# \z
アクセス権
スキーマ | 名前 | 型 | アクセス権 ...
----------+------+----------+---------------------------...
public | t1 | テーブル | postgres=arwdDxt/postgres |
: sakura=arwdDxt/postgres
(1 行)
** sakura=arwdDxt/postgres の意味 [#e099b5e7]
sakura=以降の文字列について説明します。~
各文字は以下の意味があります。
|文字|説明|
|a|INSERT可能(''a''pend)|
|r|SELECT可能(''r''ead)|
|w|UPDATE可能(''w''rite)|
|d|DELETE可能(''d''elete)|
|D|TRUNCATE|
|x|REFERENCES|
|t|TRIGGER|
|/yyyy|この権限を付与したロール|
** REVOKEでアクセス権限を剥奪してみる [#o43f008f]
上記では、ユーザsakuraに対しアクセス権限を付与しました。~
以下、付与した権限を剥奪してみます。
** REVOKEでTRUNCATE権限を剥奪する [#taac3a47]
-スーパーユーザpostgresでデータベースfooに接続する。
-bash-4.1$ psql foo
psql (8.4.13)
"help" でヘルプを表示します.
- REVOKEでTRUNCATE権限を剥奪する
foo=# REVOKE TRUNCATE ON t1 FROM sakura;
REVOKE
- \zでアクセス権限を確認する
foo=# \z
アクセス権
スキーマ | 名前 | 型 | アクセス権 ...
----------+------+----------+---------------------------...
public | t1 | テーブル | postgres=arwdDxt/postgres |
: sakura=arwdxt/postgres
(1 行)
#br
sakura=arwdxt/postgresの''D''が無くなっており、TRUNCATEの...
** REVOKEで全てのアクセス権限を剥奪する [#hb7c3c12]
- ALLで全てのアクセス権限を剥奪します。
foo=# REVOKE ALL ON t1 FROM sakura;
REVOKE
- \zでアクセス権限を確認する
foo=# \z
アクセス権
スキーマ | 名前 | 型 | アクセス権 ...
----------+------+----------+---------------------------...
public | t1 | テーブル | postgres=arwdDxt/postgres |
(1 行)
- ユーザsakuraは削除されません。
foo=# SELECT usename FROM pg_user;
usename
----------
postgres
sakura
(2 行)
* GRANT, REVOKEの構文確認 [#ld852b51]
psqlで接続し\hを使うと簡単に構文を確認することができます。
\h コマンド
- GRANTの構文確認
postgres=# \h GRANT
コマンド: GRANT
説明: アクセス権限を定義する
書式:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE |...
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] テーブル名 [, ...]
TO { [ GROUP ] ロール名 | PUBLIC } [, ...] [ WITH GR...
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( カラ...
[,...] | ALL [ PRIVILEGES ] ( カラム名 [, ...] ) }
ON [ TABLE ] テーブル名 [, ...]
TO { [ GROUP ] ロール名 | PUBLIC } [, ...] [ WITH GR...
<省略>
- REVOKEの構文確認
postgres=# \h REVOKE
コマンド: REVOKE
説明: アクセス権限を剥奪する
書式:
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | R...
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] テーブル名 [, ...]
FROM { [ GROUP ] ロール名 | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | REFERENCES } ( カラム...
[,...] | ALL [ PRIVILEGES ] ( カラム名 [, ...] ) }
ON [ TABLE ] テーブル名 [, ...]
FROM { [ GROUP ] ロール名 | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
<省略>
オプションが多数ありますので、必要に応じて設定してくださ...
#htmlinsertpcsp(db-btm.html,db-sp.html)
終了行:
#navi(../)
* PostgreSQLでテーブルに対してのアクセス権限を設定する・G...
テーブルに対してアクセス権限の設定を行うGRANT, REVOKEの使...
データベース毎のなどのアクセス権限については、GRANTの構文...
基本的に多少の構文が変わるだけなので、本資料は役立つと思...
使用したOSはCentOS6になります。~
また、使用したPostgreSQLのバージョンは以下の通りです。
postgres=# select version();
ver...
--------------------------------------------------------...
PostgreSQL 8.4.13 on x86_64-redhat-linux-gnu, compiled ...
(1 行)
#contents
#htmlinsertpcsp(db-top.html,db-sp.html)
* 関連記事・関連資料 [#q6264171]
-[[PostgreSQLでユーザを追加する方法>PostgreSQL/PostgreSQL...
-[[PostgreSQLでユーザを削除する方法>PostgreSQL/PostgreSQL...
-[[PostgreSQLでユーザのロールを変更する・ALTER ROLE, ALTE...
* GRANT, REVOKEを使ってユーザにアクセス権限の設定を行う [...
以下にユーザ、データベースを新規に作成しGRANT,REVOKEを使...
** GRANT, REVOKE実施前準備 [#o4baad98]
以下のようにpostgresユーザでPostgreSQLに接続し、データベ...
-データベースfooの作成
-bash-4.1$ psql
psql (8.4.13)
"help" でヘルプを表示します.
postgres=# create database foo;
CREATE DATABASE
postgres=# \l
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 |...
-----------+----------+------------------+-------------+...
foo | postgres | UTF8 | ja_JP.UTF-8 |...
postgres | postgres | UTF8 | ja_JP.UTF-8 |...
template0 | postgres | UTF8 | ja_JP.UTF-8 |...
...
template1 | postgres | UTF8 | ja_JP.UTF-8 |...
...
(4 行)
- fooデータベースに切替
postgres=# \c foo
psql (8.4.13)
データベース "foo" に接続しました。.
-テーブルt1を作成
foo=# create table t1 (c1 int, c2 int);
CREATE TABLE
foo=# \d t1
テーブル "public.t1"
カラム | 型 | 修飾語
--------+---------+--------
c1 | integer |
c2 | integer |
-ユーザsakuraの作成
foo=# create user sakura with password 'sakurapass';
CREATE ROLE
foo=# SELECT usename FROM pg_user;
usename
----------
postgres
sakura
(2 行)
** GRANTでアクセス権限を付与せずt1テーブルを操作してみる ...
新しく作成したsakuraでデータベースfooに接続しinsertをして...
-sakuraでデータベースfooに接続~
(pg_hba.confの設定を変更し、以下のコマンドで接続できるよ...
-bash-4.1$ psql -U sakura -h 127.0.0.1 foo
ユーザ sakura のパスワード:
psql (8.4.13)
"help" でヘルプを表示します.
-t1テーブルの確認
foo=> \d t1
テーブル "public.t1"
カラム | 型 | 修飾語
--------+---------+--------
c1 | integer |
c2 | integer |
-INSERT文を発行すると権限がないためエラーとなる。
foo=> insert into t1 values(1,1);
ERROR: リレーション t1 への権限がありません
foo=>
** GRANTでINSERT, SELECT権限を付与してみる [#p68a88d9]
スーパーユーザpostgresにで再度fooデータベースに接続し、GR...
-postgresユーザでfooデータベースに接続
-bash-4.1$ psql foo
psql (8.4.13)
"help" でヘルプを表示します.
-GRANTでt1テーブルに対し、ユーザsakuraにSELECTとINSERTの...
foo=# GRANT SELECT, INSERT ON t1 TO sakura;
GRANT
-アクセス権限を確認するとt1テーブルに対し、sakuraにSELECT...
foo=# \z
アクセス権
スキーマ | 名前 | 型 | アクセス権 |...
----------+------+----------+---------------------------...
public | t1 | テーブル | postgres=arwdDxt/postgres |
: sakura=ar/postgres
(1 行)
-INSERT, SELECT, UPDATEを実行してみるとUPDATEがエラーにな...
-sakuraでデータベースfooに接続
-bash-4.1$ psql -U sakura -h 127.0.0.1 foo
ユーザ sakura のパスワード:
psql (8.4.13)
"help" でヘルプを表示します.
- INSERT, SELECTを発行
foo=> INSERT INTO t1 VALUES(1,1),(2,2);
INSERT 0 2
foo=> SELECT * FROM t1;
c1 | c2
----+----
1 | 1
2 | 2
(2 行)
- UPDATEを発行
foo=> UPDATE t1 SET c1=10, c2=10 WHERE c1=1;
ERROR: リレーション t1 への権限がありません
foo=>
** GRANTで全てのアクセス権限を付与する [#raff0cfa]
上記の例では、SELECTとINSERTのみテーブルt1に対しアクセス...
以下の例は、ALLを使って全ての権限を付与します。
-スーパーユーザpostgresでfooデータベースに接続。
-bash-4.1$ psql foo
psql (8.4.13)
"help" でヘルプを表示します.
- t1テーブルに対しsakuraにALLの権限を付与しています。
foo=# GRANT ALL ON t1 TO sakura;
GRANT
- \zにてアクセス権限を確認。
foo=# \z
アクセス権
スキーマ | 名前 | 型 | アクセス権 ...
----------+------+----------+---------------------------...
public | t1 | テーブル | postgres=arwdDxt/postgres |
: sakura=arwdDxt/postgres
(1 行)
** sakura=arwdDxt/postgres の意味 [#e099b5e7]
sakura=以降の文字列について説明します。~
各文字は以下の意味があります。
|文字|説明|
|a|INSERT可能(''a''pend)|
|r|SELECT可能(''r''ead)|
|w|UPDATE可能(''w''rite)|
|d|DELETE可能(''d''elete)|
|D|TRUNCATE|
|x|REFERENCES|
|t|TRIGGER|
|/yyyy|この権限を付与したロール|
** REVOKEでアクセス権限を剥奪してみる [#o43f008f]
上記では、ユーザsakuraに対しアクセス権限を付与しました。~
以下、付与した権限を剥奪してみます。
** REVOKEでTRUNCATE権限を剥奪する [#taac3a47]
-スーパーユーザpostgresでデータベースfooに接続する。
-bash-4.1$ psql foo
psql (8.4.13)
"help" でヘルプを表示します.
- REVOKEでTRUNCATE権限を剥奪する
foo=# REVOKE TRUNCATE ON t1 FROM sakura;
REVOKE
- \zでアクセス権限を確認する
foo=# \z
アクセス権
スキーマ | 名前 | 型 | アクセス権 ...
----------+------+----------+---------------------------...
public | t1 | テーブル | postgres=arwdDxt/postgres |
: sakura=arwdxt/postgres
(1 行)
#br
sakura=arwdxt/postgresの''D''が無くなっており、TRUNCATEの...
** REVOKEで全てのアクセス権限を剥奪する [#hb7c3c12]
- ALLで全てのアクセス権限を剥奪します。
foo=# REVOKE ALL ON t1 FROM sakura;
REVOKE
- \zでアクセス権限を確認する
foo=# \z
アクセス権
スキーマ | 名前 | 型 | アクセス権 ...
----------+------+----------+---------------------------...
public | t1 | テーブル | postgres=arwdDxt/postgres |
(1 行)
- ユーザsakuraは削除されません。
foo=# SELECT usename FROM pg_user;
usename
----------
postgres
sakura
(2 行)
* GRANT, REVOKEの構文確認 [#ld852b51]
psqlで接続し\hを使うと簡単に構文を確認することができます。
\h コマンド
- GRANTの構文確認
postgres=# \h GRANT
コマンド: GRANT
説明: アクセス権限を定義する
書式:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE |...
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] テーブル名 [, ...]
TO { [ GROUP ] ロール名 | PUBLIC } [, ...] [ WITH GR...
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( カラ...
[,...] | ALL [ PRIVILEGES ] ( カラム名 [, ...] ) }
ON [ TABLE ] テーブル名 [, ...]
TO { [ GROUP ] ロール名 | PUBLIC } [, ...] [ WITH GR...
<省略>
- REVOKEの構文確認
postgres=# \h REVOKE
コマンド: REVOKE
説明: アクセス権限を剥奪する
書式:
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | R...
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] テーブル名 [, ...]
FROM { [ GROUP ] ロール名 | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | REFERENCES } ( カラム...
[,...] | ALL [ PRIVILEGES ] ( カラム名 [, ...] ) }
ON [ TABLE ] テーブル名 [, ...]
FROM { [ GROUP ] ロール名 | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
<省略>
オプションが多数ありますので、必要に応じて設定してくださ...
#htmlinsertpcsp(db-btm.html,db-sp.html)
ページ名: