PostgreSql里没有区分用户和角色的概念,"CREATE USER"为"CREATE ROLE"的别名,这两个命令几乎是完全相同的,唯一的区别是"CREATE USER"命令创建的用户默认带有LOGIN属性,而"CREATE ROLE"命令创建的用户默认不带LOGIN属性
创建david角色和sandy用户
CREATE ROLE david; // 默认不带LOGIN属性
CREATE USER sandy; // 默认具有LOGIN属性
\du // 查看两个用户的权限
select rolname from pg_roles; // 查看存在的角色,系统表在哪个库中都可以直接查询
select usenjame from pg_user; // 角色david创建时没有分配LOGIN权限,所以没有创建用户
角色属性
属性 | 说明 |
---|---|
login | 只有具有LOGIN属性的角色可以用做数据库连接的初始化角色 |
superuser | 数据库超级用户 |
createdb | 创建数据库权限 |
createrole | 允许其创建或删除其它普通的用户角色(超级用户除外) |
replication | 做流复制的时候用到的一个用户属性,一般单独设定。 |
password | 在登录时要求指定密码时才会起作用,比如md5或者password模式,跟客户端的连接认证方式有关。 |
inherit | 用户组对组员的一个继承标志,成员可以继承用户组的权限特性。 |
创建用户时赋予角色属性
如果要在创建角色时就赋予角色一些属性,可以使用下面的方法。首先切换到postgres用户
创建角色bella并赋予其CREATEDB的权限。
CREATE ROLE BELLA CREATEDB;
\du
创建角色renee并赋予其创建数据库及带有密码登录的属性。
CREATE ROLE renee CREATEDB PASSWORD 'abc1234'm LOGIN;
\du
测试renee角色
psql -U renee -d postgres
给已存在的用户赋予各种权限
赋予登录权限
ALTER ROLE bella WITH LOGIN;
\du
赋予renee创建角色的权限
ALTER ROLE renee WITH CREATEROLE;
\du