職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

PostgreSQLにおけるロール

2017年08月05日 | PostgreSQL
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)表示

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする