PostgreSQLにおけるロール
【開発環境】
xampp 1.8.3
PHP 5.5.9
PostgreSQL 9.5.7
Eclipse 4.4
■ロール(ユーザー)について
PostgreSQLにおいては接続の為のログインの管理やデータベースなどへの各権限の設定をロール単位で行います
1)ロールの確認
C:\Users\hiromi>psql -U postgres
psql (9.5.7)
"help" でヘルプを表示します.
postgres=#
postgres=# select rolname from pg_roles;
rolname
------------
postgres
testuser
sampleuser
testrole
(4 行)
2)ロールの作成
・ログイン可能なロールを作成した場合
postgres=# CREATE ROLE pguser WITH createdb LOGIN PASSWORD 'pguser';
CREATE ROLE
postgres=# select rolname from pg_roles;
rolname
------------
postgres
testuser
sampleuser
testrole
pguser
(5 行)
postgres=# ¥du

・注意、データベースを指定しないとエラーが出る
C:\Users\hiromi>psql -U pguser
ユーザ pguser のパスワード:
psql: FATAL: データベース"pguser"は存在しません
3)ロールを使ってログインするには
コマンド
psql -U ロール名 -d データベース名
例文
C:\Users\hiromi>psql -U pguser -d uriage
ユーザ pguser のパスワード:
psql (9.5.7)
"help" でヘルプを表示します.
uriage=>
4)ロールに権限を与える
構造文
GRANT 権限 ON 対象 TO 誰に
・データベース「uriage」と接続する
postgres-# \connect uriage
データベース "uriage" にユーザ"postgres"として接続しました。
・テーブル確認
uriage-# \dt
リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------+---------+----------+----------
public | shouhin | テーブル | postgres
(1 行)
・ロール「pguser」にテーブル「shouhin」の権限を与えた
uriage=# grant select,update,insert,delete on shouhin to pguser;
5)ロールを使ってテーブル表示する
一旦、終了する→uriage=# ¥q
再び、アクセスする
C:\Users\hiromi>psql -U pguser -d uriage
uriage=> select * from shouhin;
id | name
----+-------------
1 | テレビ
2 | DVDレコーダ
3 | パソコン
4 | 携帯電話
5 | プリンター
(5 行)
注意、データベース「uriage」とテーブル「shouhin」するか?ロールに
6)PDOを使ってロールからデータベース「uriage」に接続
「pdotest2.php」サンプルコード
<head><title>PHP TEST</title></head>
<body>
<?php
関数
function convert_enc($str){
$from_enc = 'utf8';
$to_enc = 'utf8';
return mb_convert_encoding($str, $to_enc, $from_enc);
}
$dsn = 'pgsql:dbname=uriage host=localhost port=5432';
$user = 'pguser';
$password = 'pguser';
try{
$dbh = new PDO($dsn, $user, $password);
print('接続に成功しました。<br>');
$sql = 'select * from shouhin';
foreach ($dbh->query($sql) as $row) {
print(convert_enc($row['id']));
print(convert_enc($row['name']).'<br>');
}
}catch (PDOException $e){
print('Error:'.$e->getMessage());
die();
}
$dbh = null;
?>
</body>
</html>
7)表示
