注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

PostgreSQL: 通过角色赋权  

2011-11-29 11:22:23|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


              在开始话题之前,先讲解下 PostgreSQL 里的用户和角色的一些知识,在 PostgreSQL 里没有区分用户和角色的概念,"CREATE USER" 为 "CREATE ROLE" 的别名,这两个命令几乎是完全相同的,唯一的区别是"CREATE USER"命令创建的用户的 LOGIN 属性默认为 on , 而  "CREATE ROLE"  命令创建的用户的 NOLOGIN 属性默认为 on。
 
        在 Oracle 里,可以通过角色赋权,例如新建一个用户后,可以把 connect ,RESOURCE 等角色赋给新建的用户,在PostgreSQL 里也可以实现通过角色赋权,PostgreSQL 是通过角色继承的方式实现,下面看下具体实现过程

 

--1 创建 CP 用户(也可以称之为角色)

postgres=# create role cp login nosuperuser nocreatedb nocreaterole noinherit encrypted password 'cp';
CREATE ROLE


--2 给 CP 用户赋予数据库 skytf 连接权限和相关表的查询权限

postgres=# grant connect on database skytf to cp;
GRANT

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

skytf=> grant usage on schema skytf to cp;
GRANT

skytf=> grant  select on skytf.test_1 to cp;
GRANT


--3 创建用户 cp_1

skytf=> \c postgres postgres
You are now connected to database "postgres" as user "postgres".

postgres=#  create role cp_1 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'cp_1';
CREATE ROLE

  备注:这里创建 cp_1 用户,并开启 inherit 属性。


--4 将 cp 角色赋给 cp_1 用户

方法一
skytf=# grant cp to cp_1;
GRANT ROLE

方法二
postgres=# create role cp_2 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'cp_2' in role cp;
CREATE ROLE

    备注:上面提供了两种方法将 cp 角色的权限赋给其它用户,第二种方法是在创建用户时即赋予了角色权限。


--5 测试 cp_1 用户的权限

skytf=# \c skytf cp_1;
You are now connected to database "skytf" as user "cp_1".

skytf=> select * from skytf.test_1 limit 1;
 id
----
(0 rows)


--6 查询角色组信息

postgres=# \du
    Role name     |                    Attributes                     | Member of
------------------+---------------------------------------------------+-----------
 cp               | No inheritance                                    | {}
 cp_1             |                                                   | {cp}
 cp_2             |                                                   | {cp}

 备注:\du 命令显示用户信息, " Member of " 项表示 cp_1, cp_2 用户属于 cp 用户组。

 

--7 附 CREATE ROLE 语法

CREATE ROLE
Name
CREATE ROLE -- define a new database role
Synopsis
CREATE ROLE name [ [ WITH ] option [ ... ] ]

where option can be:
   
      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid Description

  评论这张
 
阅读(30297)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016