MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 7224|回复: 0
打印 上一主题 下一主题

[PostgreSQL] PostgreSQL数据库安全

[复制链接]
跳转到指定楼层
1#
发表于 2009-5-20 15:27:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
http://www.wohedb.com  中文数据库管理系统

第二章 数据库安全




PostgreSQL实现了基于角色的存取控制机制。角色是权限的集合。可以将权限赋给用户,也可以将权限赋给角色。可以将角色赋给一个用户,该用户将拥有角色的所有权限。也可以将角色赋给其它的角色。PostgreSQL中的用户和角色使用同一个名字空间。数据库中不能有两个用户同名,不能有两个角色同名,也不能有一个用户和一个角色同名。



数据库中存在一个内置的超级用户postgres,postgres可以在数据库中创建新的超级用户,也可以把一个超级用户变成普通用户。同时数据库中也有一个内置的名为PUBLIC的角色, 任何用户都可以给PUBLIC授权和回收权限。数据库中的所有用户和角色都自动拥有PUBLIC角色拥有的一切权限。



2.1 数据库权限
    PostgreSQL中的权限分为系统权限和对象权限。系统权限只能赋给用户,不能赋给角色。对象权限既能赋给用户,又能赋给角色。 系统权限有以下三种:





权限名称
权限功能

CREATEDB
创建数据库

CREATEROLE
创建、删除和修改角色或用户






    对象权限与具体的数据库对象有关,不同的数据库对象有不同的权限。 PostgreSQL中的对象表(table)、序列(sequnce)、数据库(database)、函数(function)、语言(languange)、模式(schema)和表空间(tablespace)都有自己的权限类型。





(1)表权限如下表



权限名称
权限功能

SELECT
查询表

INSERT
表中插入新记录

UPDATE
更新表

DELETE
删除表中的记录

REFERENCES
可以在表中创建外键约束, 必须在被外键引用的表上同时有该权限才能创建外键约束

TRIGGER
可以在表上创建触发器






(2)序列权限如下表



权限名称
权限功能

SELECT
对序列使用currval函数

USAGE
对序列使用currval 函数和nextval函数

UPDATE
对序列使用nextval 函数和setval函数






(3)数据库权限如下表



权限名称
权限功能

CONNECT
可以连接数据库

TEMPORAR
可以在数据库中创建临时表

TEMP
同上,可以在数据库中创建临时表

CREATE
可以在数据库中创建新的模式




PUBLIC角色自动拥有新建的数据库上的CONNECT权限。



(4)函数权限如下表



权限名称
权限功能

EXECUTE
可以调用函数,也可以使用任何在该函数基础上实现的运算符






(5)语言权限如下表



权限名称
权限功能

USAGE
可以使用该语言创建函数






(6)模式权限如下表



权限名称
权限功能

CREATE
在模式里面创建新的数据库对象,如果要重命令模式里面的一个数据库对象,执行命令的用户必须对该模式有CREATE权限,同时必须是并重命名的对象的所有者。

USAGE
允许访问模式里面的数据库对象






(7)表空间权限如下



权限名称
权限功能

CREATE
在表空间里面创建表、临时表和索引,新创建的数据库可以将该表空间作为它的默认表空间。 如果该权限被回收,在该表空间中被创建的数据库对象仍然被存放在该表空间中。










2.2 数据库用户和角色


2.2.1创建数据库用户


   使用下面的命令来创建数据库用户:

CREATE USER  name  [ [ WITH ]  option [ ... ] ]  [ WITH ] { ENCRYPTED | UNENCRYPTED } PASSWORD ‘password’[ [ WITH ]  option [ ... ] ]



   Option可以是:

SUPERUSER | NOSUPERUSER

| CREATEDB | NOCREATEDB

| CREATEROLE | NOCREATEROLE

| CONNECTION LIMIT connlimit

| VALID UNTIL ’timestamp’





    执行该命令的用户必须具有CREATEROLE权限或者是超级用户,其中WITH关键字可以省略。

    SUPERUSER表示新创建的用户是超级用户,NOSUPERUSER表示新创建的用户不是超级用户,默认是NOSUPERUSER,只有postgres才能创建超级用户。

    CREATEDB表示新创建的用户有CREATEDB权限,NOCREATEDB表示新创建的用户没有CREATEDB权限,默认是NOCREATEDB。

    CREATEROLE表示新新创建的用户有CREATEROLE权限,NOCREATEROLE表示新创建的用户没有CREATEROLE权限,默认是NOCREATEROLE。



    CONNECTION LIMIT connlimit 设定该用户能在数据库中建立的并发连接的上限,默认是没有上限。

    { ENCRYPTED | UNENCRYPTED } PASSWORD ‘password’设定用户的密码,指明ENCRYPTED,则用户的密码用加密的方式(MD5方法加密)存在数据库中,指明UNENCRYPTED则用户的密码用明文的方式存在数据库中。

    VALID UNTIL ‘timestamp’ 指定密码的过期时间,timestamp格式是”年-月-日”,例如” 2010-09-23”,默认是永不过期。



    下面是一些实际的例子:

(1) CREATE USER  li_ming  WITH  PASSWORD ‘jw8s0F4’  CREATEDB CREATEROLE CONNECTION LIMIT 100 LOGIN;  

    该命令创建一个名为li_ming的数据库用户,它不是超级用户,它的密码是jw8s0F4, 密码是用加密方式存放在数据库中,它具有CREATEDB、 CREATEROLE 和LOGIN权限, 它在数据库中建立的并发连接数目不能超过100。



(2) CREATE USER  li_zhe  WITH  PASSWORD ‘hjkkoi’   SUPERUSER  VALID UNTIL ‘2010-09-09’;

    该命令创建一个名为li_zhe的数据库用户,它是超级用户,它的密码是hjkkoi, 密码是用加密方式存放在数据库中,它在数据库中建立的并发连接数目没有上限,它的密码将在2010年09月09日过期。





2.2.2 修改数据库用户的属性


    使用下面的命令来修改数据库用户的属性:

ALTER USER name [ [ WITH ] option [ ... ] ]

    其中option可以是:

SUPERUSER | NOSUPERUSER

| CREATEDB | NOCREATEDB

| CREATEROLE | NOCREATEROLE

| CONNECTION LIMIT connlimit

| { ENCRYPTED | UNENCRYPTED } PASSWORD ’password’

| VALID UNTIL ’timestamp’



    具有CREATEROLE权限的用户或者超级用户才能执行该命令,option选项的含义参见CREATE USER命令。数据库超级用户可以修改任何普通用户的属性。只用postgres才能修改其它的超级用户的属性。一个用户只能修改自己的密码,不能修改自己的其它属性。



    下面是一些实际的例子:

(1)ALTER USER  li_ming  NOCREATEDB  NOCREATEROLE  NOLOGIN;

这条命令将使数据库用户li_ming失去CREATEDB、CREATEROLE和LOGIN权限。



(2)ALTER  USER  li_ming  password ‘hjkop3’;

这条命令将数据库用户li_ming的密码改为hjkop3。





2.2.3 删除用户


       使用下面的命令来删除数据库用户:

DROP USER [ IF EXISTS ] name [, ...]

   

    DROP USER命令删除一个数据库用户。执行命令的用户必须有具有CREATEROLE 权限或者是超级用户。如果被删除的用户是超级用户,执行命令的用户必须是postgres。一个用户被删除以后,该用户拥有的所有数据库对象都会被自动删除,所有依赖于该用户拥有的数据库对象的数据库对象也会被自动删除。下面是一个例子:

(1)DROP USER user1;

删除用户user1。



2.2.4 创建角色
    使用下面的命令来创建数据库角色:

CREATE ROLE name



    具有CREATEROLE权限的用户才能执行该命令。下面是一个例子:

(1)CREATE ROLE role1;

    这条命令在数据库中创建一个名为role1的角色。



2.2.5 删除角色
   使用下面的命令来删除数据库角色:

DROP ROLE [ IF EXISTS ] name [, ...]



  具有CREATEROLE权限的用户才能执行该命令。下面是一个例子:

(1)DROP ROLE role1;

    删除角色role1。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-5-4 13:51 , Processed in 0.067212 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表