暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
PostgreSQL逻辑结构
1141
4页
1次
2020-01-15
5墨值下载
1.
2.
3.
4.
PostgreSQL逻辑结构
PostgreSQL逻辑结构
在一个PostgreSQL数据库中,数据的组织结构可以分为三层:
数据库:一个postgresql数据库服务可以管理多个数据库,当应用连接到一个数据库时,一般只能访问这个数据库中的数据,而不能访问
其他数据库中的内容(除非使用dblink等其他手段)。
表、索引:一个数据库中有很多表、索引。一般,在PostgreSQL中表的术语为’Relation’,而在其他数据库中则叫“Table”
数据行:每张表中有很多行数据。在PostgreSQL中行的术语一般为“Tuple”,而在其他数据库中叫“row”。
在PostgreSQL中,一个数据库服务(或实例)下可以有多个数据库,而一个数据库不能属于多个实例。
PostgreSQL的用户和角色:
PostgreSQL使用角色的概念管理数据库访问权限。角色是一系列相关权限的集合。为了方便管理,就把角色赋给相应的用户。由于用户也拥有一系
列的相关权限。为了简化管理,在PostgreSQL中,用户和角色是没有区别的,一个用户也是一个角色,我们可以把一个用户的权限赋予另一个角色
用户和角色在整个数据库实例中都是全局的。且在同一个实例中的不同数据库中,看到的用户也都是相同的。
在初始化数据库系统时,有一个预定义的superuser,这个用户的名称与初始化该数据库的操作系统用户名相同。如果数据库是建在操作系统用户po
stgres(通常把数据库安装在此用户下)下的,这个数据库超级用户的名称也叫做“postgres”。可以用这个超级用户连接数据库,然后创建出更多
的用户。
2.创建用户和角色
创建用户和角色的语法如下:
create role name [ [with] option [....] ];
create user name [ [with] option [....] ];
PostgreSQL中,用户与角色是没有区别的。除了”create user”默认创建出来的用户有“LOGIN”的权限,而“CREATE
ROLE”创建的用户没有“LOGIN”的权限之外,“CREATE RULE”与”CREATE USER”没有其他任何的区别。
创建用户和角色语法中的option可以是以下内容:
superuser|nosuperuser:表示创建出来的用户是否为超级用户。只有超级用户才能创建超级用户。
createdb|nocreatedb:指定创建出来的用户是否有执行“create database”的权限。
createrole|nocreaterole:指定创建出来的用户是否有创建其他角色的权限
createuser|nocreateuser:指定创建出来的用户是否有创建其他用户的权限
inherit|noinherit:如果创建一个用户拥有某一个或某几个角色,这是若指定inherit,则表示用户自动拥有相应角色的权限,否则这个用户没有改
角色的权限。
login|nologin:指定创建出来的用户是否有‘login’的权限,可以临时禁止一个用户的’login’权限,这时,这个用户就不能连接到数据库了。
connection limit connlimit:指定该用户可以使用的并发连接数量。默认是-1,表示没有限制。
[encrypted|unencrypted] PASSWORD ‘password’:用于控制存储在系统表里面的口令是否加密。
VALID UNTIL ‘timestamp’:密码失效时间,如果不指定这个子句,那么口令将永远有效。
in role role_name
[,...]:指定用户称为哪些角色的成员,请注意没有任何选项可以把新角色添加为管理员,必须使用独立的GRANT命令来做这件事情。
in group role_name [,...]:与in role相同
Role role_name[,...]:role_name将成为这个新建的角色的成员。
Admin role_name[,...]:role_name将有这个新建角色的with admin option权限。
User role_name[,...]:与role子句相同。
Sysid uid[,...]:这个子句主要是为了SQL向下兼容。
3.权限管理
在postgreSQL数据库中,每个数据库的逻辑结构对象(包括数据库)都有一个所有者,也就是说任何数据库对象都是属于某个用户的。所有者默认
就拥有所有权限。所以不需要把对象权限再赋给所有者。这也很好理解,自己创建的数据库对象,自己当然有全部的权限。当然,所有者处于安全
考虑也可以选择废弃一些自己的权限。在postgreSQL数据库中,删除一个对象及任意修改它的权限都不能赋予别人.它是所有者固有的,不能被赋予
和撤销.所有者也隐含地拥有把操作对象的权限赋给他人的权力.
一个用户的权限分为两列,一类是在创建用户时候就指定的权限,这些权限包括:
1)超级用户权限
2)创建数据库的权限
3)是否允许Login权限.
这些权限是创建用户时指定的,后面使用alter role 命令来修改.
还有一类权限,是由命令grant和revoke来管理的:
1)在数据库中创建模式(schema);
2)允许在指定数据库中创建临时表;
3)连接某个数据库
4)在模式中创建数据库对象,如创建表,视图,函数等.
5)在一些表中做select,update,insert,delete操作.
6)在一张表的具体列上进行select,update,insert操作.
7)对序列进行查询(执行序列currval函数),使用(执行序列的currval函数和nextvale函数),更新等操作.
8)在声明表上创建触发器
9)可以把表\索引等建到指定表空间.
使用的时候一定要分清楚两类权限,因为其赋权方式不同.如果要给用户创建数据库的权限,创建管理员的权限等,则需要使用’ALERT
ROLE’命令,而如果给用户赋予创建模式,表,索引,函数等权限,则需要grant命令进行.
两种赋权格式:
alter role name [ [with] option [...] ]
grant role_name [,....] to role_name [with admin option]
grant some_privileges on database_object_type object_name to role_name;
其中,”some_privileges”表示在这个数据库对象中的权限,”database_object_type”是数据库对象的类型,如”table”,”sequence”,”seche
ma”等.
权限说明:
of 4
5墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜