共有する際に必要なことを学ぶ。
ユーザを増やして、仲間にもデータを利用してもらう。 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 が許されるようにしておこう。
保守性を高め、書き換えられないようにするため、自分自身にパスワードを設定しよう。
=> ALTER USER ta05001 PASSWORD 'パスワード'
自分のアカウントではパスワードがないと入れなくなったことを確かめよう。
% psql -U ta05001 ta05001
Password:
求める情報をグラフとして表す方法として、ER図が用いられる。 Entity 実体 Relation 関係の図である。
講義科目と教室の関係、時間割と教員、科目と教員などの関係は以下のとおり。
Tgif を使って ER 図を書くことができる。
起動、保存などの復習はこちら
タグを打たなくても、閉じてくれるような方法がある。
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
と書く。入れ子構造で並列な要素は、+ でつないで表す。