背景

最近在学习PostgreSQL,看了用户权限管理文档,涉及到的知识点比较多,顺便写篇文章进行整理并不定时更新,也方便自己后续进行查阅。

说明

注意:创建好用户(角色)之后需要连接的话,还需要修改2个权限控制的配置文件(pg_hba.conf、pg_ident.conf)。并且创建用户(user)和创建角色(role)一样,唯一的区别是用户默认可以登录,而创建的角色默认不能登录。创建用户和角色的各个参数选项是一样的。

Tip:安装PostgreSQL会自动创建一个postgres用户,需要切换到该用户下访问PostgreSQL。

  • 创建用户/角色

    1. CREATE USER/ROLE name [ [ WITH ] option [ ... ] ] : 关键词 USER,ROLE name 用户或角色名;
    2.  
    3. where option can be:
    4.  
    5. SUPERUSER | NOSUPERUSER :超级权限,拥有所有权限,默认nosuperuser
    6. | CREATEDB | NOCREATEDB :建库权限,默认nocreatedb
    7. | CREATEROLE | NOCREATEROLE :建角色权限,拥有创建、修改、删除角色,默认nocreaterole
    8. | INHERIT | NOINHERIT :继承权限,可以把除superuser权限继承给其他用户/角色,默认inherit
    9. | LOGIN | NOLOGIN :登录权限,作为连接的用户,默认nologin,除非是create user(默认登录)。
    10. | REPLICATION | NOREPLICATION :复制权限,用于物理或则逻辑复制(复制和删除slots),默认是noreplication
    11. | BYPASSRLS | NOBYPASSRLS :安全策略RLS权限,默认nobypassrls
    1. | CONNECTION LIMIT connlimit :限制用户并发数,默认-1,不限制。正常连接会受限制,后台连接和prepared事务不受限制。
    2. | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL :设置密码,密码仅用于有login属性的用户,不使用密码身份验证,则可以省略此选项。可以选择将空密码显式写为PASSWORD NULL
      加密方法由配置参数password_encryption确定,密码始终以加密方式存储在系统目录中。
    3. | VALID UNTIL 'timestamp' :密码有效期时间,不设置则用不失效。
    4. | IN ROLE role_name [, ...] :新角色将立即添加为新成员。
    5. | IN GROUP role_name [, ...] :同上
    6. | ROLE role_name [, ...] :ROLE子句列出一个或多个现有角色,这些角色自动添加为新角色的成员。 (这实际上使新角色成为“组”)。
    7. | ADMIN role_name [, ...] :与ROLE类似,但命名角色将添加到新角色WITH ADMIN OPTION,使他们有权将此角色的成员资格授予其他人。
    8. | USER role_name [, ...] :同上
    9. | SYSID uid :被忽略,但是为向后兼容性而存在。

示例:

  1. 创建不需要密码登陆的用户zjy:

    1. postgres=# CREATE ROLE zjy LOGIN;
    2. CREATE ROLE

    创建该用户后,还不能直接登录。需要修改 pg_hba.conf 文件(后面会对该文件进行说明),加入:

    ①:本地登陆:local   all    all    trust
    ②:远程登陆:host   all    all    192.168.163.132/32     trust

  2. 创建需要密码登陆的用户zjy1:

    1. postgres=# CREATE USER zjy1 WITH PASSWORD 'zjy1';
    2. CREATE ROLE

    和ROLE的区别是:USER带LOGIN属性。也需要修改 pg_hba.conf 文件(后面会对该文件进行说明),加入:
    host    all     all     192.168.163.132/32    md5

  3. 创建有时间限制的用户zjy2:

    1. postgres=# CREATE ROLE zjy2 WITH LOGIN PASSWORD 'zjy2' VALID UNTIL '2019-05-30';
    2. CREATE ROLE

    和2的处理方法一样,修改 pg_hba.conf 文件,该用户会的密码在给定的时间之后过期不可用。

  4. 创建有创建数据库和管理角色权限的用户admin:

    1. postgres=# CREATE ROLE admin WITH CREATEDB CREATEROLE;
    2. CREATE ROLE

    注意:拥有创建数据库,角色的用户,也可以删除和修改这些对象。

  5. 创建具有超级权限的用户:admin
    1. postgres=# CREATE ROLE admin WITH SUPERUSER LOGIN PASSWORD 'admin';
    2. CREATE ROLE
  6. 创建复制账号:repl

    1. postgres=# CREATE USER repl REPLICATION LOGIN ENCRYPTED PASSWORD 'repl';
    2. CREATE ROLE
  7. 其他说明
    1. 创建复制用户
    2. CREATE USER abc REPLICATION LOGIN ENCRYPTED PASSWORD '';
    3. CREATE USER abc REPLICATION LOGIN ENCRYPTED PASSWORD 'abc';
    4. ALTER USER work WITH ENCRYPTED password '';
    5.  
    6. 创建scheme 角色
    7. CREATE ROLE abc;
    8. CREATE DATABASE abc WITH OWNER abc ENCODING UTF8 TEMPLATE template0;
    9. \c abc
    10.  
    11. 创建schema
    12. CREATE SCHEMA abc;
    13. ALTER SCHEMA abc OWNER to abc;
    14. revoke create on schema public from public;
    15.  
    16. 创建用户
    17. create user abc with ENCRYPTED password '';
    18. GRANT abc to abc;
    19. ALTER ROLE abc WITH abc;
    20.  
    21. ##创建读写账号
    22. CREATE ROLE abc_rw;
    23. CREATE ROLE abc_rr;
    24.  
    25. ##赋予访问数据库权限,schema权限
    26. grant connect ON DATABASE abc to abc_rw;
    27. GRANT USAGE ON SCHEMA abc TO abc_rw;
    28.  
    29. ##赋予读写权限
    30. grant select,insert,update,delete ON ALL TABLES IN SCHEMA abc to abc;
    31.  
    32. 赋予序列权限
    33. GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA abc to abc;
    34.  
    35. 赋予默认权限
    36. ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT select,insert,update,delete ON TABLES TO abc;
    37.  
    38. 赋予序列权限
    39. ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT ALL PRIVILEGES ON SEQUENCES TO abc;
    40.  
    41. #用户对db要有连接权限
    42. grant connect ON DATABASE abc to abc;
    43.  
    44. #用户要对schema usage 权限,不然要select * from schema_name.table ,不能用搜索路径
    45. GRANT USAGE ON SCHEMA abc TO abc;
    46. grant select ON ALL TABLES IN SCHEMA abc to abc;
    47. ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT select ON TABLES TO abc;
    48.  
    49. create user abc_w with ENCRYPTED password '';
    50. create user abc_r with ENCRYPTED password '';
    51.  
    52. GRANT abc_rw to abc_w
    53.  
    54. GRANT abc_rr to abc_r;
  • 授权,定义访问权限

    1. GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    2. [, ...] | ALL [ PRIVILEGES ] }
    3. ON { [ TABLE ] table_name [, ...]
    4. | ALL TABLES IN SCHEMA schema_name [, ...] }
    5. TO role_specification [, ...] [ WITH GRANT OPTION ]
    6.  
    7. ##单表授权:授权zjy账号可以访问schema为zjy的zjy表
      grant select,insert,update,delete on zjy.zjy to zjy;
      ##所有表授权:

      grant select,insert,update,delete on all tables in schema zjy to zjy;
    8.  
    9. GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
    10. [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
    11. ON [ TABLE ] table_name [, ...]
    12. TO role_specification [, ...] [ WITH GRANT OPTION ]
    13.  
    14. ##列授权,授权指定列(zjy schema下的zjy表的name列)的更新权限给zjy用户
      grant update (name) on zjy.zjy to zjy;
      ##指定列授不同权限,zjy schema下的zjy表,查看更新name、age字段,插入name字段
      grant select (name,age),update (name,age),insert(name) on zjy.xxx to zjy;
    15.  
    16. GRANT { { USAGE | SELECT | UPDATE }
    17. [, ...] | ALL [ PRIVILEGES ] }
    18. ON { SEQUENCE sequence_name [, ...]
    19. | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
    20. TO role_specification [, ...] [ WITH GRANT OPTION ]
    21.  
    22. ##序列(自增键)属性授权,指定zjy schema下的seq_id_seq 给zjy用户
      grant select,update on sequence zjy.seq_id_seq to zjy;
      ##序列(自增键)属性授权,给用户zjy授权zjy schema下的所有序列

      grant select,update on all sequences in schema zjy to zjy;
    23.  
    24. GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    25. ON DATABASE database_name [, ...]
    26. TO role_specification [, ...] [ WITH GRANT OPTION ]

      ##连接数据库权限,授权cc用户连接数据库zjy

      grant connect on database zjy to cc;
    27.  
    28. GRANT { USAGE | ALL [ PRIVILEGES ] }
    29. ON DOMAIN domain_name [, ...]
    30. TO role_specification [, ...] [ WITH GRANT OPTION ]
    31.  
    32. ##
    1. GRANT { USAGE | ALL [ PRIVILEGES ] }
    2. ON FOREIGN DATA WRAPPER fdw_name [, ...]
    3. TO role_specification [, ...] [ WITH GRANT OPTION ]

    ##

    1. GRANT { USAGE | ALL [ PRIVILEGES ] }
    2. ON FOREIGN SERVER server_name [, ...]
    3. TO role_specification [, ...] [ WITH GRANT OPTION ]
    1. ##
    1. GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    2. ON { { FUNCTION | PROCEDURE | ROUTINE } routine_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
    3. | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }
    4. TO role_specification [, ...] [ WITH GRANT OPTION ]
    1. ##
    2.  
    3. GRANT { USAGE | ALL [ PRIVILEGES ] }
    4. ON LANGUAGE lang_name [, ...]
    5. TO role_specification [, ...] [ WITH GRANT OPTION ]

    ##

    1. GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    2. ON LARGE OBJECT loid [, ...]
    3. TO role_specification [, ...] [ WITH GRANT OPTION ]
    1. ##
    2. GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    3. ON SCHEMA schema_name [, ...]
    4. TO role_specification [, ...] [ WITH GRANT OPTION ]
    5.  
    6. ##连接schema权限,授权cc访问zjy schema权限
      grant usage on schema zjy to cc;
    7. GRANT { CREATE | ALL [ PRIVILEGES ] }
    8. ON TABLESPACE tablespace_name [, ...]
    9. TO role_specification [, ...] [ WITH GRANT OPTION ]
    10.  
    11. GRANT { USAGE | ALL [ PRIVILEGES ] }
    12. ON TYPE type_name [, ...]
    13. TO role_specification [, ...] [ WITH GRANT OPTION ]
    14.  
    15. where role_specification can be:
    16.  
    17. [ GROUP ] role_name
    18. | PUBLIC
    19. | CURRENT_USER
    20. | SESSION_USER
    21.  
    22. GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]
      ##把zjy用户的权限授予用户cc。
      grant zjy to cc;

    权限说明

    1. SELECT:允许从指定表,视图或序列的任何列或列出的特定列进行SELECT。也允许使用COPY TO。在UPDATEDELETE中引用现有列值也需要此权限。对于序列,此权限还允许使用currval函数。对于大对象,此权限允许读取对象。
    2.  
    3. INSERT:允许将新行INSERT到指定的表中。如果列出了特定列,则只能在INSERT命令中为这些列分配(因此其他列将接收默认值)。也允许COPY FROM
    4.  
    5. UPDATE:允许更新指定表的任何列或列出的特定列,需要SELECT权限。
    6.  
    7. DELETE:允许删除指定表中的行,需要SELECT权限。
    8.  
    9. TRUNCATE:允许在指定的表上创建触发器。
    10.  
    11. REFERENCES:允许创建引用指定表或表的指定列的外键约束。
    12.  
    13. TRIGGER:允许在指定的表上创建触发器。
    14.  
    15. CREATE:对于数据库,允许在数据库中创建新的schematableindex
    16.  
    17. CONNECT:允许用户连接到指定的数据库。在连接启动时检查此权限。
    18.  
    19. TEMPORARYTEMP:允许在使用指定数据库时创建临时表。
    20.  
    21. EXECUTE:允许使用指定的函数或过程以及在函数。
    22.  
    23. USAGE:对于schema,允许访问指定模式中包含的对象;对于sequence,允许使用currvalnextval函数。对于类型和域,允许在创建表,函数和其他模式对象时使用类型或域。
    24.  
    25. ALL PRIVILEGES:一次授予所有可用权限。
  • 撤销权限
    1. REVOKE [ GRANT OPTION FOR ]
    2. { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    3. [, ...] | ALL [ PRIVILEGES ] }
    4. ON { [ TABLE ] table_name [, ...]
    5. | ALL TABLES IN SCHEMA schema_name [, ...] }
    6. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    7. [ CASCADE | RESTRICT ]
    8.  
    9. ##移除用户zjy在schema zjy上所有表的select权限
       revoke select on all tables in schema zjy from zjy;
    10.  
    11. REVOKE [ GRANT OPTION FOR ]
    12. { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
    13. [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
    14. ON [ TABLE ] table_name [, ...]
    15. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    16. [ CASCADE | RESTRICT ]
    17.  
    18. ##移除用户zjy在zjy schema的zjy表的age列的查询权限
      revoke select (age) on zjy.zjy from zjy;
    19.  
    20. REVOKE [ GRANT OPTION FOR ]
    21. { { USAGE | SELECT | UPDATE }
    22. [, ...] | ALL [ PRIVILEGES ] }
    23. ON { SEQUENCE sequence_name [, ...]
    24. | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
    25. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    26. [ CASCADE | RESTRICT ]
      ##序列
    27.  
    28. REVOKE [ GRANT OPTION FOR ]
    29. { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    30. ON DATABASE database_name [, ...]
    31. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    32. [ CASCADE | RESTRICT ]
      ##库
    33.  
    34. REVOKE [ GRANT OPTION FOR ]
    35. { USAGE | ALL [ PRIVILEGES ] }
    36. ON DOMAIN domain_name [, ...]
    37. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    38. [ CASCADE | RESTRICT]
      ##
    39.  
    40. REVOKE [ GRANT OPTION FOR ]
    41. { USAGE | ALL [ PRIVILEGES ] }
    42. ON FOREIGN DATA WRAPPER fdw_name [, ...]
    43. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    44. [ CASCADE | RESTRICT]
      ##
    45.  
    46. REVOKE [ GRANT OPTION FOR ]
    47. { USAGE | ALL [ PRIVILEGES ] }
    48. ON FOREIGN SERVER server_name [, ...]
    49. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    50. [ CASCADE | RESTRICT]
      ##
    51.  
    52. REVOKE [ GRANT OPTION FOR ]
    53. { EXECUTE | ALL [ PRIVILEGES ] }
    54. ON { { FUNCTION | PROCEDURE | ROUTINE } function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
    55. | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }
    56. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    57. [ CASCADE | RESTRICT ]
      ##
    1. REVOKE [ GRANT OPTION FOR ]
    2. { USAGE | ALL [ PRIVILEGES ] }
    3. ON LANGUAGE lang_name [, ...]
    4. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    5. [ CASCADE | RESTRICT ]
      ##
    6.  
    7. REVOKE [ GRANT OPTION FOR ]
    8. { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    9. ON LARGE OBJECT loid [, ...]
    10. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    11. [ CASCADE | RESTRICT ]
      ##
    12.  
    13. REVOKE [ GRANT OPTION FOR ]
    14. { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    15. ON SCHEMA schema_name [, ...]
    16. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    17. [ CASCADE | RESTRICT ]
      ##schena权限
    18.  
    19. REVOKE [ GRANT OPTION FOR ]
    20. { CREATE | ALL [ PRIVILEGES ] }
    21. ON TABLESPACE tablespace_name [, ...]
    22. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    23. [ CASCADE | RESTRICT ]
      ##
    24.  
    25. REVOKE [ GRANT OPTION FOR ]
    26. { USAGE | ALL [ PRIVILEGES ] }
    27. ON TYPE type_name [, ...]
    28. FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    29. [ CASCADE | RESTRICT ]
      ##
    1. REVOKE [ ADMIN OPTION FOR ]
    2. role_name [, ...] FROM role_name [, ...]
    3. [ CASCADE | RESTRICT ]
      ##

    注意:任何用户对public的schema都有all的权限,为了安全可以禁止用户对public schema

    1. ##移除所有用户(public),superuser除外,对指定DB下的public schema的create 权限。
    2. zjy=# revoke create on schema public from public;
    3. REVOKE
  • 修改用户属性
    1. ALTER USER role_specification [ WITH ] option [ ... ]
    2.  
    3. where option can be:
    4.  
    5. SUPERUSER | NOSUPERUSER
    6. | CREATEDB | NOCREATEDB
    7. | CREATEROLE | NOCREATEROLE
    8. | INHERIT | NOINHERIT
    9. | LOGIN | NOLOGIN
    10. | REPLICATION | NOREPLICATION
    11. | BYPASSRLS | NOBYPASSRLS
    12. | CONNECTION LIMIT connlimit
    13. | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
    14. | VALID UNTIL 'timestamp'
    15.  
    16. ALTER USER name RENAME TO new_name
    17.  
    18. ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
    19. ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
    20. ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
    21. ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL
    22.  
    23. where role_specification can be:
    24.  
    25. role_name
    26. | CURRENT_USER
    27. | SESSION_USER

    示例:
         
    注意:option选项里的用户都可以通过alter role进行修改

    • 修改用户为超级/非超级用户

      1. alter role caocao with superuser/nosuperuser;
    • 修改用户为可/不可登陆用户
      1. alter role caocao with nologin/login;
    • 修改用户名:
      1. alter role caocao rename to youxing;
    • 修改用户密码,移除密码用NULL
      1. alter role youxing with password 'youxing';
    • 修改用户参数,该用户登陆后的以该参数为准
      1. alter role zjy in database zjy SET geqo to 0/default;
  • 控制访问文件 pg_hba.conf
    1. local database user auth-method [auth-options]
    2. host database user address auth-method [auth-options]
    3. hostssl database user address auth-method [auth-options]
    4. hostnossl database user address auth-method [auth-options]
    5. host database user IP-address IP-mask auth-method [auth-options]
    6. hostssl database user IP-address IP-mask auth-method [auth-options]
    7. hostnossl database user IP-address IP-mask auth-method [auth-options]

    local:匹配使用Unix域套接字的连接,如果没有此类型的记录,则不允许使用Unix域套接字连接。
    host:匹配使用TCP/IP进行的连接,主机记录匹配SSL或非SSL连接,需要配置listen_addresses。
    hostssl:匹配使用TCP/IP进行的连接,仅限于使用SSL加密进行连接,需要配置ssl参数。
    hostnossl:匹配通过TCP/IP进行的连接,不使用SSL的连接。
    database:匹配的数据库名称,all指定它匹配所有数据库。如果请求的数据库与请求的用户具有相同的名称则可以使用samerole值。复制(replication)不指定数据库,多个数据库可以用逗号分隔。
    user:匹配的数据库用户名,值all指定它匹配所有用户。 可以通过用逗号分隔来提供多个用户名。
    address:匹配的客户端计算机地址,可以包含主机名,IP地址范围。如:172.20.143.89/32、172.20.143.0/24、10.6.0.0/16、:: 1/128。 0.0.0.0/0表示所有IPv4地址,:: 0/0表示所有IPv6地址。要指定单个主机,请使用掩码长度32(对于IPv4)或128(对于IPv6)。all以匹配任何IP地址。
    IP-address、IP-mask:这两个字段可用作IP地址/掩码长度,如:127.0.0.1 255.255.255.255。
    auth-method:指定连接与此记录匹配时要使用的身份验证方法:trust、reject、scram-sha-256、md5、password、gss、sspi、ident、peer、ldap、radius、cert、pam、bsd。

    1. trust:允许无条件连接,允许任何PostgreSQL用户身份登录,而无需密码或任何其他身份验证。
    2. reject:拒绝任何条件连接,这对于从组中“过滤掉”某些主机非常有用。
    3. scram-sha-:执行SCRAM-SHA-256身份验证以验证用户的密码。
    4. md5:执行SCRAM-SHA-256MD5身份验证以验证用户的密码。
    5. password:要提供未加密的密码以进行身份​​验证。由于密码是通过网络以明文形式发送的,因此不应在不受信任的网络上使用。
    6. gss:使用GSSAPI对用户进行身份验证,这仅适用于TCP / IP连接。
    7. sspi:使用SSPI对用户进行身份验证,这仅适用于Windows
    8. ident:通过联系客户端上的ident服务器获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。 Ident身份验证只能用于TCP / IP连接。为本地连接指定时,将使用对等身份验证。
    9. peer:从操作系统获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。这仅适用于本地连接。
    10. ldap:使用LDAP服务器进行身份验证。
    11. radius:使用RADIUS服务器进行身份验证。
    12. cert:使用SSL客户端证书进行身份验证。
    13. pam:使用操作系统提供的可插入身份验证模块(PAM)服务进行身份验证。
    14. bsd:使用操作系统提供的BSD身份验证服务进行身份验证。

    auth-options:在auth-method字段之后,可以存在name = value形式的字段,用于指定认证方法的选项。
    例子:

    1. # TYPE DATABASE USER ADDRESS METHOD
    2. local all all trust
    3. --在本地允许任何用户无密码登录
    4. local all all peer
    5. --操作系统的登录用户和pg的用户是否一致,一致则可以登录
    6. local all all ident
    7. --操作系统的登录用户和pg的用户是否一致,一致则可以登录
    8. host all all 192.168.163.0/ md5
    9. --指定客户端IP访问通过md5身份验证进行登录
    10. host all all 192.168.163.132/ password
    11. --指定客户端IP通过passwotd身份验证进行登录
    12.  
    13. host all all 192.168.54.1/ reject
    14. host all all 192.168.0.0/ ident
    15. host all all 127.0.0.1 255.255.255.255 trust
    16. ...

    设置完之后可以通过查看表来查看hba:

    1. zjy=# select * from pg_hba_file_rules;
    2. line_number | type | database | user_name | address | netmask | auth_method | options | error
    3. -------------+-------+---------------+-----------+---------------+-----------------------------------------+-------------+---------+-------
    4. 87 | host | {all} | {all} | 192.168.163.0 | 255.255.255.0 | md5 | |
    5. 92 | local | {all} | {all} | | | peer | |
    6. 94 | host | {all} | {all} | 127.0.0.1 | 255.255.255.255 | md5 | |
    7. 96 | host | {all} | {all} | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | md5 | |
    8. 99 | local | {replication} | {all} | | | peer | |
    9. 100 | host | {replication} | {all} | 127.0.0.1 | 255.255.255.255 | md5 | |
    10. 101 | host | {replication} | {all} | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | md5 | |

    当然,修改完pg_hba.conf文件之后,需要重新加载配置,不用重启数据库:

    1. postgres=# select pg_reload_conf();
    2. pg_reload_conf
    3. ----------------
    4. t
  • 日常使用

用户权限管理涉及到的东西很多,本文也只是大致说明了一小部分,大部分的还得继续学习。那么现在按照一个正常项目上线的流程来创建一个应用账号为例,看看需要怎么操作。

比如一个项目zjy上线:用管理账号来操作

  • 创建数据库:

    1. postgres=# create database zjy;
    2. CREATE DATABASE
  • 创建账号:账号和数据库名字保持一致(search_path)

    1. postgres=# create user zjy with password 'zjy';
    2. CREATE ROLE
  • 创建schema:不能用默认的public的schma

    1. postgres=# \c zjy
    2. You are now connected to database "zjy" as user "postgres".
    3. zjy=# create schema zjy;
    4. CREATE SCHEMA
  • 授权:
    1. #访问库
    2. zjy=# grant connect on database zjy to zjy;
    3. GRANT
    4. #访问schmea
    5. zjy=# grant usage on schema zjy to zjy;
    6. GRANT
    7. #访问表
    8. zjy=# grant select,insert,update,delete on all tables in schema zjy to zjy;
    9. GRANT
    10. #如果访问自增序列,需要授权
    11. zjy=# grant select,update on all sequences in schema zjy to zjy;
    12. GRANT
    13.  
    14. 注意:上面的授权只对历史的一些对象授权,后期增加的对象是没有权限的,需要给个默认权限
    15.  
    16. #默认表权限
    17. zjy=# ALTER DEFAULT PRIVILEGES IN SCHEMA zjy GRANT select,insert,update,delete ON TABLES TO zjy;
    18. ALTER DEFAULT PRIVILEGES
    19.  
    20. #默认自增序列权限
    21. zjy=# ALTER DEFAULT PRIVILEGES IN SCHEMA zjy GRANT select,update ON sequences TO zjy;
    22. ALTER DEFAULT PRIVILEGES
  • 常用命令

  1. 查看当前用户

    1. zjy=# \du
    2. List of roles
    3. Role name | Attributes | Member of
    4. -----------+------------------------------------------------------------+-----------
    5. admin | Superuser, Cannot login | {}
    6. postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
    7. zjy | | {}
    8.  
    9. zjy=# select * from pg_roles;
    10. rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid
    11. ----------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+-------
    12. pg_signal_backend | f | t | f | f | f | f | -1 | ******** | | f | | 4200
    13. postgres | t | t | t | t | t | t | -1 | ******** | | t | | 10
    14. admin | t | t | f | f | f | f | -1 | ******** | | f | | 16456
    15. pg_read_all_stats | f | t | f | f | f | f | -1 | ******** | | f | | 3375
    16. zjy | f | t | f | f | t | f | -1 | ******** | | f | | 16729
    17. pg_monitor | f | t | f | f | f | f | -1 | ******** | | f | | 3373
    18. pg_read_all_settings | f | t | f | f | f | f | -1 | ******** | | f | | 3374
    19. pg_stat_scan_tables | f | t | f | f | f | f | -1 | ******** | | f | | 3377
    20. (8 rows)
  2. 查看用户权限
    1. zjy=# select * from information_schema.table_privileges where grantee='zjy';
    2. grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy
    3. ----------+---------+---------------+--------------+------------+----------------+--------------+----------------
    4. postgres | zjy | zjy | zjy | zjy | INSERT | NO | NO
    5. postgres | zjy | zjy | zjy | zjy | SELECT | NO | YES
    6. postgres | zjy | zjy | zjy | zjy | UPDATE | NO | NO
    7. postgres | zjy | zjy | zjy | zjy | DELETE | NO | NO
    8. postgres | zjy | zjy | zjy | zjy1 | INSERT | NO | NO
    9. postgres | zjy | zjy | zjy | zjy1 | SELECT | NO | YES
    10. postgres | zjy | zjy | zjy | zjy1 | UPDATE | NO | NO
    11. postgres | zjy | zjy | zjy | zjy1 | DELETE | NO | NO
    12. postgres | zjy | zjy | zjy | zjy2 | INSERT | NO | NO
    13. postgres | zjy | zjy | zjy | zjy2 | SELECT | NO | YES
    14. postgres | zjy | zjy | zjy | zjy2 | UPDATE | NO | NO
    15. postgres | zjy | zjy | zjy | zjy2 | DELETE | NO | NO
    16. postgres | zjy | zjy | zjy | zjy3 | INSERT | NO | NO
    17. postgres | zjy | zjy | zjy | zjy3 | SELECT | NO | YES
    18. postgres | zjy | zjy | zjy | zjy3 | UPDATE | NO | NO
    19. postgres | zjy | zjy | zjy | zjy3 | DELETE | NO | NO

总结:

关于用户权限管理的知识点很多,如role相关member、set role以及pg_ident.conf文件等等,本文说明介绍有限,后面用到就继续更新该博文。大家还是多多查阅PostgreSQL的官方文档

PostgreSQL学习之【用户权限管理】说明的更多相关文章

  1. mysql学习(用户权限管理)

    1. 添加数据库用户 create user 'username'@'host' identified by 'password'; 提示: 如果想让该用户可以从其他主机登陆,host可以设置为'%' ...

  2. Python 学习 第十篇 CMDB用户权限管理

    Python 学习 第十篇 CMDB用户权限管理 2016-10-10 16:29:17 标签: python 版权声明:原创作品,谢绝转载!否则将追究法律责任. 不管是什么系统,用户权限都是至关重要 ...

  3. ClickHouse学习系列之二【用户权限管理】

    背景 最近花了些时间看了下ClickHouse文档,发现它在OLAP方面表现很优异,而且相对也比较轻量和简单,所以准备入门了解下该数据库系统.在安装完之后首先做的应该如何设置用户密码以及权限控制.因为 ...

  4. 如何对MongoDB 3.2.7进行用户权限管理配置

    转自:https://www.jianshu.com/p/a4e94bb8a052 上次写了一篇在CentOS7上源码安装MongoDB 3.2.7,完成了MongoDB 3.2.7的安装,但需要应用 ...

  5. Linux常用命令之用户权限管理chmod、chown、chgrp、umask命令讲解

    这节课我们重点来学习权限管理命令,说到权限大家可能第一时间能想到的就是读.写.执行 rwx 三种权限,在正式讲解权限命令之前,先简单的介绍一下rwx权限对于文件和目录的不同含义. 权限字符 权限 对文 ...

  6. 练习:python 操作Mysql 实现登录验证 用户权限管理

    python 操作Mysql 实现登录验证 用户权限管理

  7. django 基于proxy实现用户权限管理

    项目中经常会遇到用户权限管理的问题,django adminsite已经提供非常实用的用户权限管理机制.不过有些时候,我们希望根据相关用户属性来过滤adminsite中显示的内容.下文将结束如何实现: ...

  8. RDIFramework.NET ━ 9.8 用户权限管理 ━ Web部分

    RDIFramework.NET ━ .NET快速信息化系统开发框架 9.8 用户权限管理 -Web部分 在实际应用中我们会发现,权限控制会经常变动,如:需要调整角色的分配,需要收回与授予某些角色.用 ...

  9. Oracle 用户权限管理方法

    Oracle 用户权限管理方法 sys;//系统管理员,拥有最高权限 system;//本地管理员,次高权限 scott;//普通用户,密码默认为tiger,默认未解锁 sys;//系统管理员,拥有最 ...

随机推荐

  1. 阿里云***(java应用)

    阿里云***(FQ)实战 前言 ​ 因为公司涉及国外业务,依赖于google的map服务,生产环境我们使用的是亚马逊服务器,所以访问google地图没问题,但是国内的开发.测试环境,使用的是阿里云,想 ...

  2. 使用ftrace学习linux内核函数调用

    http://www.cnblogs.com/pengdonglin137/articles/4752082.html 转载: http://blog.csdn.net/ronliu/article/ ...

  3. “ORA-01747: user.table.column, table.column 或列说明无效” 的解决方案

    此问题的原因是因为表的列名称使用了Oracle声明的关键字,列名起的不好引起的. 如果列很多,又不好确定是哪个列名使用了关键字,以下建议可供参考: select * from v$reserved_w ...

  4. Android ZXing 二维码、条形码扫描介绍

    本帖最后由 Shims 于 2013-11-9 12:39 编辑 最近公司的Android项目需要用到摄像头做条码或二维码的扫描,Google一下,发现一个开源的 ZXing项目.它提供二维码和条形码 ...

  5. require.js结合项目的使用心得

    1.首先引入require.js 2.配置config.js文件 var $cdn_url=/'''/''/;----->指定文件一个共用的路径 require.config({ baseUrl ...

  6. LeetCode_Lowest Common Ancestor of a Binary Search Tree (Binary Tree)

    Lowest Common Ancestor of a Binary Search Tree 一.题目描写叙述 二.思路及代码 二叉搜索树有个性质:左子树的值都比根节点小,右子树的值比根节点大.那么我 ...

  7. react 创建组件 (三)PureComponet

    我们知道,当组件的props或者state发生变化的时候:React会对组件当前的Props和State分别与nextProps和nextState进行比较,当发现变化时,就会对当前组件以及子组件进行 ...

  8. 简谈Java的join()方法(转)

    join()是Thread类的一个方法.根据jdk文档的定义: public final void join()throws InterruptedException: Waits for this ...

  9. 分析Cocos2d-x横版ACT手游源码 1、公共

    直接上代码 不说什么 这一款源码 凝视及多 PublicDef.h 公共头文件 #define NF_PLATFORM 1 //当前版本号(默觉得普通版) //版本号列表 #define NF_PLA ...

  10. 笨鸟不乖 是这么设计Android项目架构的

    项目地址:https://github.com/benniaobuguai/android-project-wo2b部分效果图        项目结构当前项目只是其中一个例子,wo2b-common- ...