首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | HR | 镜像
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux数据库>其他>正文

Oracle最佳替代者PostgreSQL数据库的整体安全性

http://www.oklinux.cn  2010-01-03  51CTO.com    会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn


清单 12. 创建一个表和函数

postgres=# SET SESSION AUTHORIZATION postgres;SETpostgres=# CREATE TABLE postgres.t4(x serial,y numeric);NOTICE: CREATE TABLE will create implicit sequence "t4_x_seq" for serial column "t4.x"CREATE TABLEpostgres=# INSERT INTO postgres.t4(y) VALUES (random::numeric(4,3));INSERT 0 1postgres=# INSERT INTO postgres.t4(y) VALUES (random::numeric(4,3));INSERT 0 1postgres=# INSERT INTO postgres.t4(y) VALUES (random::numeric(4,3));INSERT 0 1postgres=# INSERT INTO postgres.t4(y) VALUES (random::numeric(4,3));INSERT 0 1postgres=# INSERT INTO postgres.t4(y) VALUES (random::numeric(4,3));INSERT 0 1postgres=# CREATE OR REPLACE FUNCTION public.f4 (postgres(# IN a int,postgres(# OUT b numericpostgres(# ) RETURNS SETOF numeric ASpostgres-# $body$postgres$# select y from postgres.t4 where x=$1 limit 1;postgres$# $body$postgres-# LANGUAGE SQL SECURITY DEFINER;CREATE FUNCTION


清单 13 表明用户帐户 user1 现在可以访问所需的信息。


清单 13. 未授权角色通过一个函数调用访问表

postgres=# SET SESSION AUTHORIZATION user1;SETpostgres=> SELECT b as "my first record" FROM f4(1); my first record----------------- 0.379(1 row)postgres=> SELECT b as "my second record" FROM f4(2); my second record------------------ 0.200(1 row) 破解 PostgreSQL 密码

有效的密码管理是保证 DBMS 安全性的关键。DBA 的职责就是实施一项获得认可的密码策略。密码应当由随机选择的字符组成,这些字符不具备可识别的模式。常见实践表明密码至少应有 6 个字符并且需要经常更换。

PostgreSQL 用户帐户和密码

PostgreSQL 用户帐户安全策略主要与创建和管理用户帐户的 SQL 命令有关:

?CREATE ROLE
?ALTER ROLE
?DROP ROLE
下面的 SQL 语句属于比较旧的用户帐户管理(尽管有效,您仍然应当使用较新的技术管理用户角色):

?CREATE GROUP
?ALTER GROUP
?DROP GROUP
?CREATE USER
?ALTER USER
?DROP USER
密码可以以加密或非加密形式保存。非加密 密码以明文形式存储,并且可以被超级用户读取。密码的加密 包括生成并存储其 MD5 散列,MD5 散列是无法读取的。要在登录时对密码进行验证,需要对密码进行散列化并将其与已经存储在数据集群中的密码进行比较。

下面是一些创建和管理密码的示例方法:

?未使用密码创建帐户: CREATE ROLE user1 WITH LOGIN;

?使用未加密密码创建帐户: CREATE ROLE roger WITH LOGIN UNENCRYPTED PASSWORD '123'

?修改帐户并分配一个加密过的密码: ALTER ROLE user1 WITH ENCRYPTED PASSWORD '123'

由超级用户对目录表 pg_shadow 执行一个 SQL 查询,结果返回用户帐户名及其密码。清单 4 展示了代码。


清单 14. 从目录获得用户的密码

postgres=# select usename as useraccount,passwd as "password" from pg_shadow wherelength(passwd)>1 order by usename; useraccount | password------------- ------------------------------------- user1 | md5173ca5050c91b538b6bf1f685b262b35 roger | 123(2 rows)


清单 15 展示了如何为使用密码 123 的 user1 生成 MD5 散列。


清单 15. 生成 MD5 密码

postgres=# select 'md5'||md5('123user1') as "my own generated hash", passwd as "stored hash for user1" from pg_shadow where usename='user1'; my own generated hash | stored hash for user1------------------------------------- ------------------------------------- md5173ca5050c91b538b6bf1f685b262b35 | md5173ca5050c91b538b6bf1f685b262b35(1 row)


准备好再受一次惊吓了吗?PostgreSQL 几乎没有提供任何机制以实施可靠的密码策略。

可能的安全局限性包括:

?超级用户无法对将用于密码的字符限制最小字符数。
?尽管针对如何保存密码(未加密的或已加密的 MD5 散列)的配置设置提供了一个默认参数,超级用户无法强制用户使用特定的存储方法。
?不存在对用户帐户施加生命周期的机制。
?在集群的客户机身份验证配置文件 pg_hba.conf 中,当连接方法不是 PASSWORD 或 MD5 时,控制用户帐户的有效生命周期的机制将变得无关紧要。
?由 ALTER ROLE 语句修改的用户运行时参数,以及由超级用户或文件 postgresql.conf 中的默认配置设置的参数,都可以由用户帐户的所有者随意修改。
?重命名一个用户帐户将清除该帐户的密码,如果已被加密的话。
?无法跟踪谁对用户帐户做了修改或何时做了修改。
一个具有精心系统目录设计的强有力的架构可以为随时保持警惕的 DBA 带来回报。

由于存在各种各样的危害,因此有关用户帐户和密码的安全局限性需要用另一篇文章单独详细介绍。

共12页: 上一页 [1] [2] [3] [4] 5 [6] [7] [8] [9] [10] [11] [12] 下一页

上一篇:Google手机发布会仿效苹果   下一篇:豆瓣开源数据存储系统BeansDB

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Oracle数据库实例两则
·在Linux下定时备份MySQL
·出现mysql max-connections问题解决
·Oracle 如何快速查找和删除重复记录
·Oracle Dataguard备库失败与主库响应测试
·Oracle简单stream一个用户单向复制配置
·Oracle小知识集锦
·2009 MySQL数据库学习者盛会
·深入解析Oracle参数及参数文件
·查看修改Oracle10G归档日志空间的限制
·Linux环境下给MySQL数据库文件打包流程记录
·MySQL 5.1.41释出
·Ubuntu 9.10 修改 MySQL 的 datadir
·在MySQL中修改表名的SQL语句
·Eclipse连接Oracle数据库的ORA-00604 ORA-12705错误
·MySQL知识学习之my.ini详解
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Oracle数据库实例两则
·在Linux下定时备份MySQL
·出现mysql max-connections问题解决
·Oracle 如何快速查找和删除重复记录
·Oracle Dataguard备库失败与主库响应测
·Oracle简单stream一个用户单向复制配置
·Oracle小知识集锦
·2009 MySQL数据库学习者盛会
·深入解析Oracle参数及参数文件
·查看修改Oracle10G归档日志空间的限制
·Linux环境下给MySQL数据库文件打包流程
·MySQL 5.1.41释出
  阅读排行
·MySQL导入导出.sql文件步骤
·Linux下安装Oracle数据库完整笔记
·Oracle建表过程初学
·Oracle 建立临时表语法及使用技巧
·Oracle面试题及答案整理
·Linux系统下启动MySQL的命令及相关知识
·MySQL中文乱码解决方案集锦
·Oracle10g RAC for Linux配置全过程
·Linux平台下配置MySQL主从复制
·手工配置Oracle 10G Enterprise Manage
·Linux平台下启动oracle 11g EM控制台
·RHEL5.1 下安装Oracle 10.2.0.1及常见
·Oracle数据库里查看表空间使用状况
·Linux下安装Oracle客户端
·VMware中在Linux下安装Oracle9i
网摘收藏: