pg快速入门--权限管理

今日长缨在手,何时缚住苍龙。这篇文章主要讲述pg快速入门--权限管理相关的知识,希望能为你提供帮助。
?
对象所有者一旦一个对象被创建,它会被分配一个所有者。所有者通常是执行创建语句的角色。对于大部分类型的对象,初始状态下只有所有者(或者超级用户)能够对该对象做任何事情。为了允许其他角色使用它,必须分配权限。
?
权限分类?有多种不同的权限:SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、CREATE、CONNECT、TEMPORARY及USAGE。可以应用于一个特定对象的权限随着对象的类型(表、函数等)而不同。修改或销毁一个对象的权力通常是只有所有者才有的权限。
?
修改权限所有者一个对象可以通过该对象类型相应的ALTER命令来重新分配所有者,例如
ALTER TABLE table_name OWNER TO new_owner;
超级用户总是可以做到这点,普通角色只有同时是对象的当前所有者(或者是拥有角色的一个成员)以及新拥有角色的一个成员时才能做同样的事。
【pg快速入门--权限管理】?
分配权限?要分配权限,可以使用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)




    推荐阅读