データの共有

共有する際に必要なことを学ぶ。

データを他の人に使ってもらおう

ユーザを増やして、仲間にもデータを利用してもらう。 1 人目はデータベースにアクセスしてユーザを作ってみよう。

CREATE USER ユーザ名

実は KTerm からもデータベースにアクセスできるので、 2 人目を Kterm から加えてみよう。

% psql -c 'CREATE USER ユーザ名'

% psql -c 'SQL 実行文'

データベースのチェック

psql -l でどのようなデータベースがあるか調べることができる。


% psql -l       
        List of databases
   Name    |  Owner  | Encoding  
-----------+---------+-----------
 TEST      | pgsql   | SQL_ASCII
 madoka    | madoka  | SQL_ASCII
 pgsql     | pgsql   | SQL_ASCII
 postgres  | pgsql   | SQL_ASCII
 ta05001   | ta05001 | SQL_ASCII
 template0 | pgsql   | SQL_ASCII
 template1 | pgsql   | SQL_ASCII
 test      | madoka  | SQL_ASCII
(8 rows)

Owner が自分のユーザ ID であるものが、自分の所有しているデータベースである。

表のチェック

自分の所有しているデータベースに存在する表をチェックしてみよう。


ta05001=> \d
          List of relations
 Schema |   Name   | Type  |  Owner  
--------+----------+-------+---------
 public | practice | table | ta05001
(1 row)

ユーザのチェック

データベース作成を許可した人間、PostgresQL を動かすプログラム本人と、 自分が含まれていることを確認することができる。


ta05001=> \du
                               List of roles
 Role name | Superuser | Create role | Create DB | Connections | Member of 
-----------+-----------+-------------+-----------+-------------+-----------
 madoka    | yes       | yes         | yes       | no limit    | {}
 pgsql     | yes       | yes         | yes       | no limit    | {}
 ta05001   | no        | no          | yes       | no limit    | {}

アクセス許可

データベースは誰でもが書き込んだり、誰でもが閲覧できる必要は必ずしもない。 例えば、アルバイト店員が、時給を自由に設定できたり、 学生が他の学生の成績を閲覧できたりするようなシステムは、 データベースサーバとしてはよくない。

アクセスを制限する場合、アクセスするユーザを認可することによって可能 になる。アクセスの認可は GRANT、取り消しは REVOKE を使用する。 ここでは GRANT を練習する。

この講義の受講者は guest アカウントで SELECT が可能になるようなデータベースにしよう。

ta05001=> GRANT SELECT ON practice TO guest;

guest アカウントで自分のデータベースに guest アカウントで入るには、

ta05001=> \c - guest;

隣の学生の作成したデータベースに入ってみよう。-U で guest アカウント、 また隣の学生の作成したデータベースを指定しよう。同じ操作ができるか確認しよう。

% psql -U guest c10XXXX

まずは表をのぞいてみよう。


ta05001=> select * from practice;
ERROR:  permission denied for relation practice

guest アカウントには何も許可をしていないため、 表にアクセスすることができない。SELECT だけを許可しよう。


ta05001=> GRANT SELECT ON practice TO guest;
GRANT

guest アカウントにより、select ができることを確認しよう。


ta05001=> \c - ta05001;
You are now connected to database "ta05001" as user "ta05001".
ta05001=>  select * from practice;
 西村まどか | 月   |  4 | 前期 | 公益自由研究         | 102
 西村まどか | 月   |  5 | 通年 | 専門演習I            | 102
 西村まどか | 月   |  6 | 前期 | 専門演習II           | 102
 西村まどか | 火   |  1 | 前期 | 基礎プログラミングIB | 101
 西村まどか | 火   |  2 | 前期 | 基礎プログラミングIC | 101
 西村まどか | 水   |  1 | 前期 | 情報交換概論         | 102
 西村まどか | 火   |  1 | 後期 | 基礎プログラミングII | 101
 西村まどか | 火   |  2 | 後期 | 基礎プログラミングII | 101
 西村まどか | 水   |  2 | 後期 | 基礎の自然科学(物理) | 102

guest は UPDATE ができないことを確かめよ

アクセス停止

アクセスを停止するには REVOKE を使う。

データを削除させないよう設定するには次のとおり。

ta05001=> REVOKE DELETE ON practice FROM ta05yyy;

書き換えもできないようにするためにはどのようにしたらよいか。

アカウント削除

アカウントを削除するのは、dropuser を用いる。1 度 guest アカウントを 削除しよう。

% dropuser guest

パスワード付きアカウントの発行

% /opt/pgsql/bin/createuser -A -D -P
Enter name of role to add: guest0
Enter password for new role: 
Enter it again: 
Shall the new role be allowed to create more new roles? (y/n) n

guest0 にも SELECT が許されるようにしておこう。

SQL 言語によるパスワードの許可

保守性を高め、書き換えられないようにするため、自分自身にパスワードを設定しよう。


=> ALTER USER ta05001 PASSWORD 'パスワード'

自分のアカウントではパスワードがないと入れなくなったことを確かめよう。


% psql -U ta05001 ta05001
Password:

ER図

求める情報をグラフとして表す方法として、ER図が用いられる。 Entity 実体 Relation 関係の図である。

講義科目と教室の関係、時間割と教員、科目と教員などの関係は以下のとおり。

Tgif で ER 図

Tgif を使って ER 図を書くことができる。

起動、保存などの復習はこちら

HTML を Ruby 言語で書く方法

タグを打たなくても、閉じてくれるような方法がある。

cgi 変数 = CGI.new("html4")

という CGI 変数が指定されていたとき、

cgi 変数.tag 名("ppp" => "qqq", "rrr" => "sss"){"内容"}

と Ruby 言語で書くと、見え方は

<tag 名 ppp="qqq" rrr="sss">"内容"</tag 名>

となる。また、入れ子構造では

cgi 変数.tag 名(tag のクラス要素等) do 
    入れ子の中身
end

と書く。例えば、最初の入れ子構造

<html>
<head>
<title>
たいとる
</title>
</head>
<body>
</body>
</html>

を出力するためには

cgi.out() do
   cgi.html() do
      cgi.head{cgi.title{"題名"}}
      end + # 後に書く
      cgi.body() do
      cgi.p{"中身"}
      end
   end
end

と書く。入れ子構造で並列な要素は、+ でつないで表す。

サンプル例 ソースコード