PostgreSQL權限(一)

     首先本身整理了個權限表,以下:sql

lihao=# \dp+數據庫

                                       Access privileges
 Schema |           Name      |   Type   |  Access privileges  | Column access privileges
----------+-----------------+--------+---------------------+--------------------------oracle

 public    | t1                       | table    | lihao=arwdDxt/lihao |
 public    | t2                       | table    | lihao=arwdDxt/lihao |post

     在這個權限表,我以爲有兩個比較特殊:LOGIN和SUPERUSERspa

1.LOGIN權限

   很顯然,這就是一個登錄權限,但它倒是NO.1權限,若是沒有這個權限,那麼哪怕是超級用戶也不能登錄數據庫,以下實驗:postgresql

lihao=# create role user1 nologin superuser password '123456';
CREATE ROLE
lihao=# \du+
                                    List of roles
 Role name |                   Attributes                   | Member of | Description
---------+-----------------------------------------+--------+-------------
 lihao     | Superuser, Create role, Create DB, Replication         | {}        | 
 user1     | Superuser, Cannot login, Replication                 | {}        |
lihao=# \c lihao user1;
FATAL:  role "user1" is not permitted to log in
Previous connection kept
lihao=# alter role user1 login;
ALTER ROLE
lihao=# \c lihao user1;
You are now connected to database "lihao" as user "user1".
lihao=#ip

    與login權限對應的還有一個登錄權限,那就是數據庫的CONNECT權限。在以前的博文《postgresql角色(一)》中提到過,默認建立的角色都會擁有public角色在全部數據庫的connect權限,那麼接下來作個實驗看看:
lihao=# create user user1 nologin password 123456';
CREATE ROLE
lihao=# create user user2 password '123456';
CREATE ROLE
lihao=# revoke connect on database db1 from public;
REVOKE
lihao=# \c db1 user1
FATAL:  role "user1" is not permitted to log in
Previous connection kept
lihao=# \c db1 user2
FATAL:  permission denied for database "db1"
DETAIL:  User does not have CONNECT privilege.
Previous connection kept
lihao=#it

   結合這個實驗以及以前的實驗,咱們能夠看出,對一個用戶而言,只有同時擁有LOGIN和CONNECT權限才能夠對數據庫進行訪問。io

2.SUPERUSER權限

     表格的「系統權限」所列的幾個權限,除了LOGIN以外,對SUPERUSER而言,其餘都可無視。table

lihao=# create role role1 superuser nocreatedb nocreaterole login password 'oracle'; CREATE ROLE lihao=# \c lihao role1 You are now connected to database "lihao" as user "role1". lihao=# create database db1 owner "lihao"; CREATE DATABASE lihao=# create role role2 ; CREATE ROLE

相關文章
相關標籤/搜索