最近在学习PostgreSQL,看了用户权限管理文档,涉及到的知识点比较多,顺便写篇文章进行整理并不定时更新,也方便本身后续进行查阅。html
注意:建立好用户(角色)以后须要链接的话,还须要修改2个权限控制的配置文件(pg_hba.conf、pg_ident.conf)。而且建立用户(user)和建立角色(role)同样,惟一的区别是用户默承认以登陆,而建立的角色默认不能登陆。建立用户和角色的各个参数选项是同样的。sql
Tip:安装PostgreSQL会自动建立一个postgres用户,须要切换到该用户下访问PostgreSQL。数据库
CREATE USER/ROLE name [ [ WITH ] option [ ... ] ] : 关键词 USER,ROLE; name 用户或角色名; where option can be: SUPERUSER | NOSUPERUSER :超级权限,拥有全部权限,默认nosuperuser。 | CREATEDB | NOCREATEDB :建库权限,默认nocreatedb。 | CREATEROLE | NOCREATEROLE :建角色权限,拥有建立、修改、删除角色,默认nocreaterole。 | INHERIT | NOINHERIT :继承权限,能够把除superuser权限继承给其余用户/角色,默认inherit。 | LOGIN | NOLOGIN :登陆权限,做为链接的用户,默认nologin,除非是create user(默认登陆)。 | REPLICATION | NOREPLICATION :复制权限,用于物理或则逻辑复制(复制和删除slots),默认是noreplication。 | BYPASSRLS | NOBYPASSRLS :安全策略RLS权限,默认nobypassrls。
| CONNECTION LIMIT connlimit :限制用户并发数,默认-1,不限制。正常链接会受限制,后台链接和prepared事务不受限制。 | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL :设置密码,密码仅用于有login属性的用户,不使用密码身份验证,则能够省略此选项。能够选择将空密码显式写为PASSWORD NULL。
加密方法由配置参数password_encryption肯定,密码始终以加密方式存储在系统目录中。 | VALID UNTIL 'timestamp' :密码有效期时间,不设置则用不失效。 | IN ROLE role_name [, ...] :新角色将当即添加为新成员。 | IN GROUP role_name [, ...] :同上 | ROLE role_name [, ...] :ROLE子句列出一个或多个现有角色,这些角色自动添加为新角色的成员。 (这实际上使新角色成为“组”)。 | ADMIN role_name [, ...] :与ROLE相似,但命名角色将添加到新角色WITH ADMIN OPTION,使他们有权将此角色的成员资格授予其余人。 | USER role_name [, ...] :同上 | SYSID uid :被忽略,可是为向后兼容性而存在。
示例:安全
建立不须要密码登录的用户zjy:服务器
postgres=# CREATE ROLE zjy LOGIN; CREATE ROLE
建立该用户后,还不能直接登陆。须要修改 pg_hba.conf 文件(后面会对该文件进行说明),加入:
网络
①:本地登录:local all all trust
②:远程登录:host all all 192.168.163.132/32 trust并发
建立须要密码登录的用户zjy1:
dom
postgres=# CREATE USER zjy1 WITH PASSWORD 'zjy1'; CREATE ROLE
和ROLE的区别是:USER带LOGIN属性。也须要修改 pg_hba.conf 文件(后面会对该文件进行说明),加入:
host all all 192.168.163.132/32 md5
ide
建立有时间限制的用户zjy2:
函数
postgres=# CREATE ROLE zjy2 WITH LOGIN PASSWORD 'zjy2' VALID UNTIL '2019-05-30'; CREATE ROLE
和2的处理方法同样,修改 pg_hba.conf 文件,该用户会的密码在给定的时间以后过时不可用。
建立有建立数据库和管理角色权限的用户admin:
postgres=# CREATE ROLE admin WITH CREATEDB CREATEROLE; CREATE ROLE
注意:拥有建立数据库,角色的用户,也能够删除和修改这些对象。
postgres=# CREATE ROLE admin WITH SUPERUSER LOGIN PASSWORD 'admin'; CREATE ROLE
建立复制帐号:repl
postgres=# CREATE USER repl REPLICATION LOGIN ENCRYPTED PASSWORD 'repl'; CREATE ROLE
建立复制用户 CREATE USER abc REPLICATION LOGIN ENCRYPTED PASSWORD ''; CREATE USER abc REPLICATION LOGIN ENCRYPTED PASSWORD 'abc'; ALTER USER work WITH ENCRYPTED password ''; 建立scheme 角色 CREATE ROLE abc; CREATE DATABASE abc WITH OWNER abc ENCODING UTF8 TEMPLATE template0; \c abc 建立schema CREATE SCHEMA abc; ALTER SCHEMA abc OWNER to abc; revoke create on schema public from public; 建立用户 create user abc with ENCRYPTED password ''; GRANT abc to abc; ALTER ROLE abc WITH abc; ##建立读写帐号 CREATE ROLE abc_rw; CREATE ROLE abc_rr; ##赋予访问数据库权限,schema权限 grant connect ON DATABASE abc to abc_rw; GRANT USAGE ON SCHEMA abc TO abc_rw; ##赋予读写权限 grant select,insert,update,delete ON ALL TABLES IN SCHEMA abc to abc; 赋予序列权限 GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA abc to abc; 赋予默认权限 ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT select,insert,update,delete ON TABLES TO abc; 赋予序列权限 ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT ALL PRIVILEGES ON SEQUENCES TO abc; #用户对db要有链接权限 grant connect ON DATABASE abc to abc; #用户要对schema usage 权限,否则要select * from schema_name.table ,不能用搜索路径 GRANT USAGE ON SCHEMA abc TO abc; grant select ON ALL TABLES IN SCHEMA abc to abc; ALTER DEFAULT PRIVILEGES IN SCHEMA abc GRANT select ON TABLES TO abc; create user abc_w with ENCRYPTED password ''; create user abc_r with ENCRYPTED password ''; GRANT abc_rw to abc_w; GRANT abc_rr to abc_r;
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO role_specification [, ...] [ WITH GRANT OPTION ]
##单表受权:受权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;
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]
##列受权,受权指定列(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;
GRANT { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON { SEQUENCE sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } TO role_specification [, ...] [ WITH GRANT OPTION ]
##序列(自增键)属性受权,指定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;
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]
##链接数据库权限,受权cc用户链接数据库zjy
grant connect on database zjy to cc;
GRANT { USAGE | ALL [ PRIVILEGES ] } ON DOMAIN domain_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]
##
GRANT { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER fdw_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]
##
GRANT { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]
##
GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { { FUNCTION | PROCEDURE | ROUTINE } routine_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...] | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] } TO role_specification [, ...] [ WITH GRANT OPTION ]
##
GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]
##
GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]
##
GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ]
##链接schema权限,受权cc访问zjy schema权限
grant usage on schema zjy to cc;
GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ] GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPE type_name [, ...] TO role_specification [, ...] [ WITH GRANT OPTION ] where role_specification can be: [ GROUP ] role_name | PUBLIC | CURRENT_USER | SESSION_USER GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]
##把zjy用户的权限授予用户cc。
grant zjy to cc;
权限说明:
SELECT:容许从指定表,视图或序列的任何列或列出的特定列进行SELECT。也容许使用COPY TO。在UPDATE或DELETE中引用现有列值也须要此权限。对于序列,此权限还容许使用currval函数。对于大对象,此权限容许读取对象。
INSERT:容许将新行INSERT到指定的表中。若是列出了特定列,则只能在INSERT命令中为这些列分配(所以其余列将接收默认值)。也容许COPY FROM。
UPDATE:容许更新指定表的任何列或列出的特定列,须要SELECT权限。
DELETE:容许删除指定表中的行,须要SELECT权限。
TRUNCATE:容许在指定的表上建立触发器。
REFERENCES:容许建立引用指定表或表的指定列的外键约束。
TRIGGER:容许在指定的表上建立触发器。
CREATE:对于数据库,容许在数据库中建立新的schema、table、index。
CONNECT:容许用户链接到指定的数据库。在链接启动时检查此权限。
TEMPORARY、TEMP:容许在使用指定数据库时建立临时表。
EXECUTE:容许使用指定的函数或过程以及在函数。
USAGE:对于schema,容许访问指定模式中包含的对象;对于sequence,容许使用currval和nextval函数。对于类型和域,容许在建立表,函数和其余模式对象时使用类型或域。
ALL PRIVILEGES:一次授予全部可用权限。
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##移除用户zjy在schema zjy上全部表的select权限
revoke select on all tables in schema zjy from zjy;
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##移除用户zjy在zjy schema的zjy表的age列的查询权限
revoke select (age) on zjy.zjy from zjy;
REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON { SEQUENCE sequence_name [, ...] | ALL SEQUENCES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##序列
REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##库
REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON DOMAIN domain_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT]
##
REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER fdw_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT]
## REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT]
##
REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON { { FUNCTION | PROCEDURE | ROUTINE } function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...] | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##
REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##
REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##
REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##schena权限
REVOKE [ GRANT OPTION FOR ] { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##
REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPE type_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]
##
REVOKE [ ADMIN OPTION FOR ] role_name [, ...] FROM role_name [, ...] [ CASCADE | RESTRICT ]
##
##移除全部用户(public),superuser除外,对指定DB下的public schema的create 权限。 zjy=# revoke create on schema public from public; REVOKE
ALTER USER role_specification [ WITH ] option [ ... ] where option can be: SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL | VALID UNTIL 'timestamp' ALTER USER name RENAME TO new_name ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT } ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter ALTER USER { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL where role_specification can be: role_name | CURRENT_USER | SESSION_USER
示例:
注意:option选项里的用户均可以经过alter role进行修改
修改用户为超级/非超级用户
alter role caocao with superuser/nosuperuser;
alter role caocao with nologin/login;
alter role caocao rename to youxing;
alter role youxing with password 'youxing';
alter role zjy in database zjy SET geqo to 0/default;
local database user auth-method [auth-options] host database user address auth-method [auth-options] hostssl database user address auth-method [auth-options] hostnossl database user address auth-method [auth-options] host database user IP-address IP-mask auth-method [auth-options] hostssl database user IP-address IP-mask auth-method [auth-options] 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/3二、172.20.143.0/2四、10.6.0.0/1六、:: 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-25六、md五、password、gss、sspi、ident、peer、ldap、radius、cert、pam、bsd。
trust:容许无条件链接,容许任何PostgreSQL用户身份登陆,而无需密码或任何其余身份验证。 reject:拒绝任何条件链接,这对于从组中“过滤掉”某些主机很是有用。 scram-sha-256:执行SCRAM-SHA-256身份验证以验证用户的密码。 md5:执行SCRAM-SHA-256或MD5身份验证以验证用户的密码。 password:要提供未加密的密码以进行身份验证。因为密码是经过网络以明文形式发送的,所以不该在不受信任的网络上使用。 gss:使用GSSAPI对用户进行身份验证,这仅适用于TCP / IP链接。 sspi:使用SSPI对用户进行身份验证,这仅适用于Windows。 ident:经过联系客户端上的ident服务器获取客户端的操做系统用户名,并检查它是否与请求的数据库用户名匹配。 Ident身份验证只能用于TCP / IP链接。为本地链接指定时,将使用对等身份验证。 peer:从操做系统获取客户端的操做系统用户名,并检查它是否与请求的数据库用户名匹配。这仅适用于本地链接。 ldap:使用LDAP服务器进行身份验证。 radius:使用RADIUS服务器进行身份验证。 cert:使用SSL客户端证书进行身份验证。 pam:使用操做系统提供的可插入身份验证模块(PAM)服务进行身份验证。 bsd:使用操做系统提供的BSD身份验证服务进行身份验证。
auth-options:在auth-method字段以后,能够存在name = value形式的字段,用于指定认证方法的选项。
例子:
# TYPE DATABASE USER ADDRESS METHOD local all all trust --在本地容许任何用户无密码登陆 local all all peer --操做系统的登陆用户和pg的用户是否一致,一致则能够登陆 local all all ident --操做系统的登陆用户和pg的用户是否一致,一致则能够登陆 host all all 192.168.163.0/24 md5 --指定客户端IP访问经过md5身份验证进行登陆 host all all 192.168.163.132/32 password --指定客户端IP经过passwotd身份验证进行登陆 host all all 192.168.54.1/32 reject host all all 192.168.0.0/16 ident host all all 127.0.0.1 255.255.255.255 trust ...
设置完以后能够经过查看表来查看hba:
zjy=# select * from pg_hba_file_rules; line_number | type | database | user_name | address | netmask | auth_method | options | error -------------+-------+---------------+-----------+---------------+-----------------------------------------+-------------+---------+------- 87 | host | {all} | {all} | 192.168.163.0 | 255.255.255.0 | md5 | | 92 | local | {all} | {all} | | | peer | | 94 | host | {all} | {all} | 127.0.0.1 | 255.255.255.255 | md5 | | 96 | host | {all} | {all} | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | md5 | | 99 | local | {replication} | {all} | | | peer | | 100 | host | {replication} | {all} | 127.0.0.1 | 255.255.255.255 | md5 | | 101 | host | {replication} | {all} | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | md5 | |
固然,修改完pg_hba.conf文件以后,须要从新加载配置,不用重启数据库:
postgres=# select pg_reload_conf(); pg_reload_conf ---------------- t
用户权限管理涉及到的东西不少,本文也只是大体说明了一小部分,大部分的还得继续学习。那么如今按照一个正常项目上线的流程来建立一个应用帐号为例,看看须要怎么操做。
好比一个项目zjy上线:用管理帐号来操做
postgres=# create database zjy; CREATE DATABASE
postgres=# create user zjy with password 'zjy'; CREATE ROLE
postgres=# \c zjy You are now connected to database "zjy" as user "postgres". zjy=# create schema zjy; CREATE SCHEMA
#访问库 zjy=# grant connect on database zjy to zjy; GRANT #访问schmea zjy=# grant usage on schema zjy to zjy; GRANT #访问表 zjy=# grant select,insert,update,delete on all tables in schema zjy to zjy; GRANT #若是访问自增序列,须要受权 zjy=# grant select,update on all sequences in schema zjy to zjy; GRANT 注意:上面的受权只对历史的一些对象受权,后期增长的对象是没有权限的,须要给个默认权限 #默认表权限 zjy=# ALTER DEFAULT PRIVILEGES IN SCHEMA zjy GRANT select,insert,update,delete ON TABLES TO zjy; ALTER DEFAULT PRIVILEGES #默认自增序列权限 zjy=# ALTER DEFAULT PRIVILEGES IN SCHEMA zjy GRANT select,update ON sequences TO zjy; ALTER DEFAULT PRIVILEGES
zjy=# \du List of roles Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- admin | Superuser, Cannot login | {} postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} zjy | | {} zjy=# select * from pg_roles; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolbypassrls | rolconfig | oid ----------------------+----------+------------+---------------+-------------+-------------+----------------+--------------+-------------+---------------+--------------+-----------+------- pg_signal_backend | f | t | f | f | f | f | -1 | ******** | | f | | 4200 postgres | t | t | t | t | t | t | -1 | ******** | | t | | 10 admin | t | t | f | f | f | f | -1 | ******** | | f | | 16456 pg_read_all_stats | f | t | f | f | f | f | -1 | ******** | | f | | 3375 zjy | f | t | f | f | t | f | -1 | ******** | | f | | 16729 pg_monitor | f | t | f | f | f | f | -1 | ******** | | f | | 3373 pg_read_all_settings | f | t | f | f | f | f | -1 | ******** | | f | | 3374 pg_stat_scan_tables | f | t | f | f | f | f | -1 | ******** | | f | | 3377 (8 rows)
zjy=# select * from information_schema.table_privileges where grantee='zjy'; grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy ----------+---------+---------------+--------------+------------+----------------+--------------+---------------- postgres | zjy | zjy | zjy | zjy | INSERT | NO | NO postgres | zjy | zjy | zjy | zjy | SELECT | NO | YES postgres | zjy | zjy | zjy | zjy | UPDATE | NO | NO postgres | zjy | zjy | zjy | zjy | DELETE | NO | NO postgres | zjy | zjy | zjy | zjy1 | INSERT | NO | NO postgres | zjy | zjy | zjy | zjy1 | SELECT | NO | YES postgres | zjy | zjy | zjy | zjy1 | UPDATE | NO | NO postgres | zjy | zjy | zjy | zjy1 | DELETE | NO | NO postgres | zjy | zjy | zjy | zjy2 | INSERT | NO | NO postgres | zjy | zjy | zjy | zjy2 | SELECT | NO | YES postgres | zjy | zjy | zjy | zjy2 | UPDATE | NO | NO postgres | zjy | zjy | zjy | zjy2 | DELETE | NO | NO postgres | zjy | zjy | zjy | zjy3 | INSERT | NO | NO postgres | zjy | zjy | zjy | zjy3 | SELECT | NO | YES postgres | zjy | zjy | zjy | zjy3 | UPDATE | NO | NO postgres | zjy | zjy | zjy | zjy3 | DELETE | NO | NO
关于用户权限管理的知识点不少,如role相关member、set role以及pg_ident.conf文件等等,本文说明介绍有限,后面用到就继续更新该博文。你们仍是多多查阅PostgreSQL的官方文档。