pg快速入门--权限管理

Posted 进击的CJR

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pg快速入门--权限管理相关的知识,希望对你有一定的参考价值。

对象所有者

一旦一个对象被创建,它会被分配一个所有者。所有者通常是执行创建语句的角色。对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情。为了允许其他角色使用它,必须分配权限。

权限分类​

有多种不同的权限:SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、CREATE、CONNECT、TEMPORARY及USAGE。可以应用于一个特定对象的权限随着对象的类型(表、函数等)而不同。修改或销毁一个对象的权力通常是只有所有者才有的权限。

修改权限所有者

一个对象可以通过该对象类型相应的ALTER命令来重新分配所有者,例如

ALTER TABLE table_name OWNER TO new_owner;

超级用户总是可以做到这点,普通角色只有同时是对象的当前所有者(或者是拥有角色的一个成员)以及新拥有角色的一个成员时才能做同样的事。

分配权限​

要分配权限,可以使用GRANT命令。例如,如果joe是一个已有角色,而accounts是一个已有表,更新该表的权限可以按如下方式授权:

GRANT UPDATE ON accounts TO joe;

用ALL取代特定权限会把与对象类型相关的所有权限全部授权。一个特殊的名为PUBLIC的“角色”可以用来向系统中的每一个角色授予一个权限。同时,在数据库中有很多用户时可以设置“组”角色来帮助管理权限。为了撤销一个权限,使用REVOKE 命令:

REVOKE ALL ON accounts FROM PUBLIC; 

权限实验

postgres=# \\c mydb
You are now connected to database "mydb" as user "postgres".

创建一个表
mydb=# CREATE TABLE accounts (manager text, company text, contact_email text);
CREATE TABLE
mydb=# \\dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | accounts | table | postgres
public | user_tbl | table | postgres
(2 rows)

创建一个用户
mydb=# create role joe login;
CREATE ROLE

mydb=# create schema joe authorization joe;
CREATE SCHEMA

更改所属用户
mydb=# alter table accounts owner to joe;
ALTER TABLE

mydb=# \\dt
List of relations
Schema | Name | Type | Owner
--------+----------+-------+----------
public | accounts | table | joe
public | user_tbl | table | postgres
(2 rows)

赋予update权限
mydb=# grant update on accounts to joe;
GRANT

查看表当前表不数据joe的shema下
mydb=# select tablename from pg_tables where schemaname=joe;
tablename
-----------
(0 rows)

查看表
mydb=# select * from pg_tables ;
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
--------------------+-------------------------+------------+------------+------------+----------+-------------+-------------
public | user_tbl | postgres | | f | f | f | f
pg_catalog | pg_statistic | postgres | | t | f | f | f
pg_catalog | pg_type | postgres | | t | f | f | f
sb | school | postgres | | t | f | f | f
pg_catalog | pg_foreign_server | postgres | | t | f | f | f
pg_catalog | pg_authid | postgres | pg_global | t | f | f | f
public | accounts | joe | | f | f | f | f
pg_catalog | pg_statistic_ext_data | postgres | | t | f | f | f
pg_catalog | pg_user_mapping | postgres | | t | f | f | f
pg_catalog | pg_subscription | postgres | pg_global | t | f | f | f
pg_catalog | pg_attribute | postgres | | t | f | f | f
pg_catalog | pg_proc | postgres | | t | f | f | f
pg_catalog | pg_class | postgres | | t | f | f | f
pg_catalog | pg_attrdef | postgres | | t | f | f | f
pg_catalog | pg_constraint | postgres | | t | f | f | f
pg_catalog | pg_inherits | postgres | | t | f | f | f
pg_catalog | pg_index | postgres | | t | f | f | f
pg_catalog | pg_operator
查看表的权限
select * from information_schema.table_privileges where grantee=joe;
grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy
---------+---------+---------------+--------------+------------+----------------+--------------+----------------
joe | joe | mydb | public | accounts | INSERT | YES | NO
joe | joe | mydb | public | accounts | SELECT | YES | YES
joe | joe | mydb | public | accounts | UPDATE | YES | NO
joe | joe | mydb | public | accounts | DELETE | YES | NO
joe | joe | mydb | public | accounts | TRUNCATE | YES | NO
joe | joe | mydb | public | accounts | REFERENCES | YES | NO
joe | joe | mydb | public | accounts | TRIGGER | YES | NO
(7 rows)


mydb=# select * from information_schema.usage_privileges where grantee=joe;
grantor | grantee | object_catalog | object_schema | object_name | object_type | privilege_type | is_grantable
---------+---------+----------------+---------------+-------------+-------------+----------------+--------------
(0 rows)


以上是关于pg快速入门--权限管理的主要内容,如果未能解决你的问题,请参考以下文章

pg权限系统

Linux快速入门02-文件系统管理

Bug管理工具(TCE)快速入门

pg快速入门--初步使用

pg快速入门--配置文件

pg快速入门--体系结构