手机版

PostgreSQL角色与用户管理

时间:2021-08-02 来源:互联网 编辑:宝哥软件园 浏览:

类型:数据库类大小:3.5M语言:英文评分:5.0标签:立即下载一、角色与用户的区别

角色就相当于岗位:角色可以是经理,助理。

用户就是具体的人:比如陈xx经理,朱xx助理,王xx助理。

在一种数据库系统里没有区分用户和角色的概念,'创建用户'为"创建角色"的别名,这两个命令几乎是完全相同的,唯一的区别是"创建用户"命令创建的用户默认带有注册属性,而"创建角色"命令创建的用户默认不带注册属性(创建用户等同于创建角色,只是默认情况下创建用户角色,而创建角色不创建用户角色).

1.1 创建角色与用户

创建角色语法

创建角色名[ [ WITH ]选项[.] ]

其中选项可以是:超级用户| NOSUPEREUSER | CREATEDB | NOCREATEDB | CREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | REPLICATION | NOREPLICATION | CONNECTION LIMIT conn LIMIT |[加密|未加密]PASSWORD ' PASSWORD ' | VALID TOLL '时间戳" ROLE _ ROLE _ name[,] |在组角色名[,]| ROle _ ROle _ name[,] | ADMIN角色名[,] |用户角色名[,] | SYSID uid创建大卫角色和桑迪用户

postgres=# CREATE ROLE david//默认不带注册属性

CREATE RolePostgres=# CREATE USER sandy;//默认具有注册属性CREATE ROLEpostgres=# \du角色列表角色名称|属性|成员-大卫|无法登录| {} postgres |超级用户,创建角色,创建数据库,复制| { }桑迪| | { } postgres=# postgres=#从pg_roles中选择rolnamerolname-postgres David sandy(3行)postgres=# SELECT usename from pg _ user;//角色大卫创建时没有分配注册权限,所以没有创建用户usename - postgres sandy(2行)postgres=# 1.2验证注册属性

postgres @ CS-dev : ~ psql-U David

psql:宿命论:角色“大卫”不允许登录postgres @ CS-dev : ~ psql-U sandypsql :宿命论:数据库“桑迪”不存在postgres @ CS-dev : ~ psql-U sandy-d PostgreSQL(9。1 .0)键入“救命”以获取帮助。postgres=\dtNo找到关系。postgres=用户桑迪可以登录,角色大卫不可以登录。

1.3 修改大卫的权限,增加注册权限

postgres=# ALTER ROLE David LOGING;

ALTER ROLEpostgres=# \du角色列表角色名称|属性|成员- david | | {} postgres |超级用户,创建角色,创建数据库,复制| {}桑迪| | {}postgres=#从pg_roles中选择rolnamerolname-postgres sandy David(3行)postgres=# SELECT usename from pg _ user;//给大卫角色分配注册权限,系统将自动创建同名用户大卫usename-postgres桑迪大卫(3行)postgres=# 1.4再次验证注册属性

postgres @ CS-dev : ~ psql-U David-d postgres

psql (9.1.0)键入“救命”以获取帮助。postgres=\du角色列表角色名称|属性|成员- David | | { } postgres |超级用户,创建角色,创建数据库,复制| {}桑迪| | { }波斯特格里斯=大卫现在也可以登录了。

二、查看角色信息

指数终端可以用\du或\du查看,也可以查看系统表从pg_roles中选择*;

postgres=\du

角色列表角色名称|属性|成员-大卫|无法登录| {} postgres |超级用户,创建角色,创建数据库,复制| {}桑迪| | {}postgres=\du角色列表角色名称|属性|成员|描述-大卫|无法登录| {} | postgres |超级用户,创建角色,创建数据库,复制| { } | sandy | | { } | postgres=SELECT * from pg _ roles;rol名称| rol super | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcan登录| rol复制| rolconlimit | rol密码| rolvaltil | rolconfig | oid-postgres | t | t | t | t | t | t | t |-1 | * * * * * * * * * * * * * | 10 David | f | t | f | f | f | f | f | f | f | f | | f |-1 | * * * * * * * * * * | | 49438 sandy | f | t | f | t | f |-1 | * * * * * * | | 49439(3行)postgres=三、角色属性(角色属性)

一个数据库角色可以有一系列属性,这些属性定义了他的权限。

属性说明注册只有具有注册属性的角色可以用做数据库连接的初始角色名超级用户。数据库超级用户createdb创建数据库权限createrole允许其创建或删除其他普通的用户角色(超级用户除外)复制做流复制的时候用到的一个用户属性,一般单独设定密码。在登录时要求指定密码时才会起作用,比如讯息摘要5或者密码模式,跟客户端的连接认证方式有关继承用户组对组员的一个继承标志,成员可以继承用户组的权限特性.四、创建用户时赋予角色属性

从pg_roles表里查看到的信息,在上面创建的大卫用户时,默认没有创建数据库等权限。

postgres @ CS-dev : ~ psql-U David-d PostgreSQL(9。1 .0)键入“救命”以获取帮助。postgres=\du角色列表角色名称|属性|成员- David | | { } postgres |超级用户,创建角色,Create DB,Replication | { } sandy | | { } postgres=Create DATABASE测试;错误:创建数据库数据库的权限被拒绝=如果要在创建角色时就赋予角色一些属性,可以使用下面的方法。

首先切换到数据库用户。

4.1 创建角色贝拉并赋予其CREATEDB的权限。

postgres=# CREATE ROle Bella CREATEDB;

CREATE ROLEpostgres=# \ du角色列表角色名称|属性|成员-贝拉|创建数据库,无法登录| { } david | | { } postgres |超级用户,创建角色,创建数据库,复制| {} sandy | | {}postgres=# 4.2创建角色勒妮并赋予其创建数据库及带有密码登录的属性。

postgres=# CREATE ROle Renee CREATEDB PASSWORD ' ab c 123 ' LOGING;

CREATE ROLEpostgres=# \ du角色列表角色名称|属性|成员-贝拉|创建数据库,无法登录| { } david | | { } postgres |超级用户,创建角色,创建数据库,复制| { } Renee | CREATE DB | { } sandy | | { } postgres=# 4.3测试勒妮角色

a.登录

postgres @ CS-dev : ~ psql-U Renee-d PostgreSQL(9。1 .0)键入“救命”以获取帮助。postgres=用勒妮用户登录数据库,发现不需要输入密码既可登录,不符合实际情况。

b.查找原因

在角色属性中关于密码的说明,在登录时要求指定密码时才会起作用,比如讯息摘要5或者密码模式,跟客户端的连接认证方式有关。

查看pg_hba.conf文件,发现当地的的方法为信任,所以不需要输入密码。

将当地的的方法更改为密码,然后保存重启postgresql。

c.再次验证

提示输入密码,输入正确密码后进入到数据库。

d.测试创建数据库

创建成功。

五、给已存在用户赋予各种权限

使用改变角色命令。

改变角色语法:

更改角色名称[ [ WITH ]选项[.] ]

其中选项可以是:超级用户| NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | log IN | NOLOGIN | REPLICATION | no REPLICATION | CONNECTION LIMIT conn LIMIT |[ENCRYPTED | undefined]PASSWORD ' PASSWORD ' | VALID TO ' timestamp ' ALTER ROLE name RENAME TO new _ name ALTER ROLE name[IN DATABASE _ name]SET configuration _ parameter { TO |=} { value | DEFAULT } ALTER ROLE name[IN DATABASE _ name]从当前设置配置参数角色名[数据库中的数据库名]重置配置参数更改角色名[数据库中的数据库名]重置所有5.1赋予贝拉登录权限

a.查看现在的角色属性

postgres=# \du

角色列表角色名称|属性|成员-贝拉|创建数据库,无法登录| {} david | | {} postgres |超级用户,创建角色,创建数据库,复制| {}雷尼|创建数据库| {}桑迪| | {}postgres=# b赋予登录权限

postgres=# ALTER ROLE Bella WITH LOGING;

ALTER ROLEpostgres=# \du角色列表角色名称|属性|成员-贝拉|创建数据库| {} david | | {} postgres |超级用户,创建角色,创建数据库,复制| {}雷尼|创建数据库| {} sandy | | {}postgres=# 5.2赋予勒妮创建角色的权限

postgres=# ALTER ROLE Renee WITH create ROLE;

ALTER ROLEpostgres=# \du角色列表角色名称|属性|成员-贝拉|创建数据库| {} david | | {} postgres |超级用户,创建角色,创建数据库,复制| {}雷尼|创建角色,创建数据库| {} sandy | | {}postgres=# 5.3赋予大卫带密码登录权限

postgres=#用密码改变角色大卫' UFO 456 ';ALTER ROLEpostgres=#5.4设置桑迪角色的有效期

postgres=# ALTER ROLE sandy VALID直至' 2014-04-24 ';

ALTER ROLEpostgres=# \du角色列表角色名称|属性|成员-贝拉|创建数据库| {} david | | {} postgres |超级用户,创建角色,创建数据库,复制| {}雷尼|创建角色,创建数据库| { } sandy | | { } postgres=# SELECT * from pg _ roles;rol名称| rol super | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcan登录| rol复制| rolconlimit | rol密码| rolvaltil | rolconfig | oid-postgres | t | t | t | t | t | t | t | t | t | t | t |-1 | * * * * * 1 | | 10 Bella | f | t | f | t | t | f | t | f | t | t | f |-1 | * * * * * * * * * * | | 49440 Renee | f | t | t | t | f | t | f |-1 | * * * * * * * * | | 49442 David | f | t | f | t | f | t | f |-1 | * * * * * * * * * | | 49438 sandy | f | t | f | f | f | t | f | t | f |-1 | * * * * * * * 2014-04-24 00:0336000 08 | | 49439(2014-04-04-24-24 00033:00 08六、角色赋权/角色成员

在系统的角色管理中,通常会把多个角色赋予一个组,这样在设置权限时只需给该组设置即可,撤销权限时也是从该组撤销。在一种数据库系统中,首先需要创建一个代表组的角色,之后再将该角色的成员资格权限赋给独立的角色即可。

6.1 创建组角色

postgres=# CREATE ROLE父亲登录没有超级用户没有CREATE db没有CREATE ROle没有继承加密密码“ABC 123”;

CREATE ROLEpostgres=# \du角色列表角色名称|属性|成员- Bella | CREATE DB | { } David | { }父亲|无继承| {} postgres |超级用户,创建角色,创建数据库,复制| {}雷尼|创建角色,创建DB | {} sandy | | {}postgres=#6.2给父亲角色赋予数据库试验连接权限和相关表的查询权限。

postgres=# GRANT CONNECT ON DATABASE测试到父亲;

GRANTpostgres=# \ c test reneeYou您现在作为用户"蕾妮"连接到数据库测试.test=\ dtNo找到关系。测试=CREATE TABLE EMP(测试(序列号,测试(名称文本));通知:创建表格将为序列列" emp.id "创建隐式序列“emp_id_seq”,CREATE TABLE test=INSERT INTO EMP(name)VALUES(' David ');插入0 1测试=插入emp(名称)值(“桑迪”);插入0 1测试=从电磁脉冲中选择*;id | Name-1 | David 2 | sandy(2行)测试=\dt关系列表架构|名称|类型|所有者-公共|电磁脉冲|表|雷尼(1行)测试=将架构上的用法授予公共父辈;警告:没有为“公共”授予特权GRANT test=公共上的GRANT SELECT。电磁脉冲(electromagnetic pulse)给父亲;GRANTtest=6.3创建成员角色

test=\ c postgres postgresYou您现在作为用户“postgres”连接到数据库postgres .postgres=# CREATE ROLE son1登录没有超级用户没有CREATE db没有CREATE ROle继承加密密码“ABC 123”;CREATE ROLEpostgres=#这里创建了son1角色,并开启继承属性PostgreSQL。里的角色赋权是通过角色继承(INHERIT)的方式实现的。

6.4 将父亲角色赋给son1

postgres=# GRANT父亲对son1GRANT ROLEpostgres=#还有另一种方法,就是在创建用户的时候赋予角色权限。

postgres=# CREATE ROLE son2登录没有超级用户没有CREATE db没有CREATE ROle继承角色父亲中的加密密码“ABC 123”;CREATE ROLEpostgres=# 6.5测试son1角色

postgres=# \c测试son1

您现在作为用户“son1”连接到数据库测试.测试=\dt关系列表架构|名称|类型|所有者-公共|电磁脉冲|表|雷尼(1行)test=SELECT * from empid | name-1 | David 2 | sandy(2行)测试=用勒妮角色新创建一张表,再次测试

test=\c test renee

您现在作为用户"蕾妮"连接到数据库测试.test=CREATE TABLE dept(test)(deptid)整数,测试(deptname文本);创建表格测试=插入部门(部门,部门名称)值(1,‘ts’);插入0 1测试=\c测试son1您现在作为用户“son1”连接到数据库"测试"。测试=从部门中选择*;错误:关系depttest=son1的权限被拒绝角色只能查询电磁脉冲表的数据,而不能查询处表的数据,测试成功。

6.6 查询角色组信息

测试=\c postgres postgres

您现在作为用户“postgres”连接到数据库postgres .postgres=# postgres=# \du角色列表角色名称|属性|成员-贝拉|创建数据库| { }大卫| { }父亲|无继承| {} postgres |超级用户,创建角色,创建数据库,复制| {}雷尼|创建角色,创建DB | { } sandy | | { } son1 | | {父亲} son2 | | {父亲}postgres=# "成员"项表示son1和son2角色属于父亲角色组。

版权声明:PostgreSQL角色与用户管理是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

相关文章推荐