2013年9月27日 星期五

PostgreSQL 新增使用者及設定「唯讀」權限

新增user

以下是新增使用者之指令及相關選項:

Usage:
  createuser [OPTION]... [ROLENAME]

Options:
  -c, --connection-limit=N  connection limit for role (default: no limit)
  -d, --createdb            role can create new databases
  -D, --no-createdb         role cannot create databases
  -e, --echo                show the commands being sent to the server
  -E, --encrypted           encrypt stored password
  -i, --inherit             role inherits privileges of roles it is a
                            member of (default)
  -I, --no-inherit          role does not inherit privileges
  -l, --login               role can login (default)
  -L, --no-login            role cannot login
  -N, --unencrypted         do not encrypt stored password
  -P, --pwprompt            assign a password to new role
  -r, --createrole          role can create new roles
  -R, --no-createrole       role cannot create roles
  -s, --superuser           role will be superuser
  -S, --no-superuser        role will not be superuser
  --help                    show this help, then exit
  --version                 output version information, then exit

Connection options:
  -h, --host=HOSTNAME       database server host or socket directory
  -p, --port=PORT           database server port
  -U, --username=USERNAME   user name to connect as (not the one to create)
  -w, --no-password         never prompt for password
  -W, --password            force password prompt

If one of -d, -D, -r, -R, -s, -S, and ROLENAME is not specified, you will
be prompted interactively.

其中比較重要的是 -P 這個選項,在建立使用者的同時為他設定密碼。如最後一行(紅字)提到的,「創建DB」(d)、「創建user」(r)、「是否為最高權限」(s)。


為使用者設定唯讀權限


在postgres中,並沒有所謂的「唯獨權限」,所以我們必須透過修改使用者的預設參數來達到這個目的:

alter role digoal set default_transaction_read_only=true;



開放 Tables 和 Sequences 權限給使用者


特定 Table:
GRANT SELECT ON table_name TO role_name;

所有 Tables:
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name(通常是public) TO role_name;

所有 Sequences:
GRANT SELECT ON ALL SEQUENCES IN SCHEMA schema_name TO role_name;

Reference

德哥@Digoal的博格:http://blog.163.com/digoal@126/blog/static/1638770402011111274336235/

沒有留言:

張貼留言