发布于

数据库角色与权限

数据库角色和权限
目录
操作角色的语句:
create role db_role1; /--创建角色/
drop role db_role1; /--删除角色/
select rolename from pg_roles; /--查看所有角色/
/du --在命令格式下查看所有角色的命令
角色的权限
一个数据库角色可以有很多权限,这些权限定义了角色和拥有角色的用户可以做的事情。
create role db_role1 LOGIN; --创建具有登录权限的角色 db_role1
create role db_role2 SUPERUSER; --创建具有超级用户权限的角色
create role db_role3 CREATEDB; --创建具有创建数据库权限的角色
create role db_role4 CREATEROLE --创建具有创建角色权限的角色
alter role db_role1 nologin nocreatedb; --修改角色取消登录和创建数据库权限
用户
其实用户和角色都是角色,只是用户是具有登录权限的角色。
create user db_user1 password '123'; --创建用户
create role db_user1 password '123' LOGIN; --同上一句等价
drop user db_user1; --删除用户
alter user db_user1 password '123456'; --修改密码
alter user db_user1 createdb createrole; --对用户授权
赋予角色控制权限
我们可以使用 GRANT 和 REVOKE 命令赋予用户角色,来控制权限。
create user db_user1; --创建用户 1
create user db_user2; --创建用户 2
create role db_role1 createdb createrole; --创建角色 1
grant db_role1 to db_user1,db_user2; --给用户 1,2 赋予角色 1,两个用户就拥有了创建数据库和创
建角色的权限
revoke db_role1 from db_user1; --从用户 1 移除角色 1,用户不在拥有角色 1 的权限
OushuDB 使用 角色 的概念管理数据库访问权限。 根据角色自身的设置不同,一个角色可以看做是一个
或者一组数据库用户。 角色可以拥有数据库对象(比如表)以及可以把这些对象上的权限赋予其它角色,
以控制谁拥有访问哪些对象的权限。另外,我们也可以把一个角色的 成员 权限赋予其它角色,这样就允
许成员角色使用分配给另一个角色的权限。
数据库角色
数据库角色从概念上与操作系统用户是完全无关的,在实际使用中把它们对应起来可能比较方便。数据
库角色在整个数据库集群中是全局的,我么可以通过执行 SQL 命令 CREATE ROLE 来创建一个角色,如

要删除一个现有角色,可以使用 DROP ROLE 命令:
CREATE ROLE name;
为了方便,程序 createuser 和 dropuser 提供了对了这些 SQL 命令的封装。我们可以在 shell 命令上直接
调用它们:
要检查现有角色的集合,可以检查 pg_roles 系统表,使用 SQL 命令:
psql 的元命令 du 也可以用于列出现有角色。
为了能创建初始数据库系统,新建立的数据库总是包含一个预定义的”超级用户”角色, 通常这个角色名
叫 gpadmin。 为了创建更多角色,你必须首先以这个初始用户角色连接。
每一个和数据库的连接都必须用一个角色身份进行,这个角色决定在该连接上的初始访问权限。 一个客
户端连接可以使用的角色集合是由客户认证设置决定的, 这个我们后续会讲到。
角色属性
一个数据库角色可以有一系列属性,这些属性定义他的权限,以及与客户认证系统的交互。
登陆权限
只有具有 LOGIN 属性的角色才可以用作数据库连接的初始角色名。 一个带有 LOGIN 属性的角色可以认为
是和”数据库用户”相同的事物。 要创建一个具有登录权限的角色,可以用下列命令之一:
CREATE ROLE name LOGIN;
CREATE USER name;
除了 CREATE USER 默认赋予登陆权限之外,CREATE USER 等价于 CREATE ROLE(CREATE ROLE 默认不
赋予)。
超级用户状态
数据库超级用户超越所有权限检查。这是一个需要谨慎使用的权限,建议大家最好使用非超级用户来完
成大多数工作
要创建数据库超级用户, 可用 CREATE ROLE name SUPERUSER 命令。 要执行这条命令,我们必须登
录已经是超级用户的角色来创建。
创建数据库
除超级用户以外,角色要想拥有创建数据库的权限,则必须明确给出。 我们可以用 CREATE ROLE name
CREATEDB 这样的命令来创建角色。
创建角色
除超级用户以外,一个角色要想拥有创建角色的权限,在创建这样的角色时,需要使用 CREATE ROLE
name CREATEROLE 命令。
一个带有 CREATEROLE 权限的角色也可以更改和删除其它角色, 以及给其它角色赋予或者撤销成员关
系。不过,要创建、更改、删除一个超级用户角色的成员关系, 需要具有超级用户属性,只有
CREATEROLE 还不够。
DROP ROLE name; createuser name dropuser name SELECT rolname FROM pg_roles;
口令
只有在客户认证方法要求与数据库建立连接必须使用口令的时候,口令才比较重要。口令拥有
password, md5 和 crypt 等不同的认证方法。在创建角色的时候可以这样声明一个口令:CREATE ROLE
name PASSWORD 'string'。
一个角色的属性可以在创建后用 ALTER ROLE 修改。例如,一些常见的操作如下:
让一个角色能够创建其他角色和新的数据库:
更改一个角色的口令:
移除一个角色的口令:
更多的内容,大家可以参考手册中的讲解页面。
权限
当你创建一个数据库对象时,你就称为它的所有者。默认情况下,只有对象的所有者和超级管理员可以
对它进行任何操作。要允许其他角色使用它,必须要经过权限授予。
OushuDB 中好多种不同的权限:SELECT, INSERT, DELETE, TRUNCATE, REFERENCES, TRIGGER,
CREATE, CONNECT, TEMPORARY, EXECUTE 和 USAGE 。适用于特定对象的权限因对象类型不同而不
同。
修改或者删除一个对象的权限是对象所有者独有的权限。要改变一个表、索引、序列或者视图的所有
者,可以使用 ALTER TABLE 命令,对于其他的类型也有相应的 ALTER 命令。
要赋予权限,可以使用 GRANT 命令。如果 fred 是一个已经存在的用户,而 department 是一个已经存在
的表,可以用下面的命令更新表的权限:
在权限的位置写上 ALL 则赋予所有与该对象类型相关的权限。
授权给名为 PUBLIC 的特殊”用户”可以用于将权限赋予系统中的所有用户。 另外,还可以使用”组”角色来
帮助管理一群用户的权限。
最后,我们可以使用 REVOKE 命令撤销权限:
对象所有者总是隐含地拥有 DROP, GRANT, REVOKE 等特殊权限,并且不能赋予或者撤销。
ALTER ROLE name CREATEROLE CREATEDB; ALTER ROLE name WITH PASSWORD 'newpassword'; ALTER ROLE name WITH PASSWORD NULL; GRANT UPDATE ON department TO fred; REVOKE ALL ON accounts FROM PUBLIC;
但是对象所有者可以选择撤销自己的普通权限,比如把一个表做成对自己和别人都是只读的

评论
    test