首页 | 资讯动态 | 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


尽管可能无法访问表,但是用户仍然可以收集有关表的信息。

清单 4 展示了用户帐户 user1 获取了一组用户帐户及其各自的属性。普通用户自己无法访问密码。


清单 4. 获取用户帐户的属性

postgres=> select * from pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig---------- ---------- ------------- ---------- ----------- ---------- ----------postgres | 10 | t | t | t | ******** | | user1 | 18770 | f | f | f | ******** | |(2 rows)


所有用户默认情况下都能够获得集群的定义和模式。

清单 5 展示了一个可以获得有关集群完整定义模式的信息的脚本,方法就是查询系统目录。系统目录可以被超级用户修改或解密,从而减轻了这一威胁。


清单 5. 提取集群范围内的定义

#!/bin/bashpsql mydatabase << _eof_set search_path=public,information_schema,pg_catalog,pg_toast;\t\o list.txtSELECT n.nspname||'.'||c.relname as "Table Name"FROM pg_catalog.pg_class c JOIN pg_catalog.pg_roles r ON r.oid = c.relowner LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespaceWHERE c.relkind IN ('r','')ORDER BY 1;\q_eof_for i in $( cat list.txt ); do psql -c "\d $i"done


创建和访问由用户定义的函数

函数也分为可信的或不可信的。可信的 过程语言在数据库上下文内执行指令,比如创建表、索引,添加或移除数据,等等。不可信的 过程语言(除了可信的特性外)也能够影响真实的世界,比如列出目录的内容,创建或删除文件,调用系统进程,甚至是创建与其他主机的套接字连接。


清单 6. 向数据库添加过程语言并恢复对 user1 的访问

postgres=# create language plpgsql;CREATE LANGUAGEpostgres=# create language plperlu;CREATE LANGUAGEpostgres=# create language plperl;CREATE LANGUAGEpostgres=> SET SESSION AUTHORIZATION postgres;SETpostgres=# GRANT USAGE ON SCHEMA PUBLIC TO user1;GRANT


清单 7. 可信 vs. 不可信过程语言

postgres=# select lanname as language, lanpltrusted as trusted from pg_language; language | trusted---------- --------- internal | f c | f sql | t plperlu | f plperl | t(5 rows)


与表不同的是,普通用户帐户在调用某些用户的函数时不需要特殊权限,即使是由超级用户创建的函数也是如此。


清单 8. 调用超级用户的函数

postgres=# SET SESSION AUTHORIZATION postgres;SETpostgres=# CREATE OR REPLACE FUNCTION public.f1 (postgres(# OUT x textpostgres(# ) ASpostgres-# $body$postgres$# select 'hello from f1'::text;postgres$# $body$postgres-# LANGUAGE SQL;CREATE FUNCTIONpostgres=# SET SESSION AUTHORIZATION user1;SETpostgres=>postgres=> SELECT * FROM f1; x----------------- hello from f1(1 row)


下面清单 9 中的函数由超级用户通过 plperlu 创建。它返回目录的内容;user1 可以调用这个函数。一个普通用户可以同时调用可信函数和不可信函数。要应对这种威胁,最好的方法是通过撤销权限来拒绝对函数的访问。


清单 9. 函数被未授权的用户利用

postgres=> SET SESSION AUTHORIZATION postgres;SETpostgres=# CREATE OR REPLACE FUNCTION public.f2 (postgres(# OUT x textpostgres(# ) ASpostgres-# $body$postgres$# # output the root directory contents into standard outputpostgres$# # notice the use of the single back tickspostgres$# $a = `ls -l / 2>/dev/null`;postgres$# $message = "\nHere is the directory listing\n".$a;postgres$# return $message;postgres$# $body$postgres-# LANGUAGE PLPERLU;CREATE FUNCTIONpostgres=# SET SESSION AUTHORIZATION user1;SETpostgres=> SELECT * FROM f2; x---------------------------------------------------------------------------- Here is the directory listing total 120 drwxr-xr-x 2 root root 4096 Aug 29 07:03 bin drwxr-xr-x 3 root root 4096 Oct 11 05:17 boot drwxr-xr-x 3 root root 4096 Nov 26 2006 build lrwxrwxrwx 1 root root 11 Aug 22 2006 cdrom -> media/cdrom drwxr-xr-x 15 root root 14960 Oct 12 07:35 dev drwxr-xr-x 118 root root 8192 Oct 12 07:36 etc(1 row)


清单 10. 针对 user1 和组 PUBLIC 提供保护

postgres=# SET SESSION AUTHORIZATION postgres;SETpostgres=# REVOKE ALL ON FUNCTION f2 FROM user1, GROUP PUBLIC;REVOKEpostgres=# SET SESSION AUTHORIZATION user1;SETpostgres=> SELECT * FROM f2;ERROR: permission denied for function f2postgres=>


清单 11 展示了信息收集。


清单 11. 获取函数的源代码

postgres=> SET SESSION AUTHORIZATION user1;SETpostgres=> select prosrc as "function f3" from pg_proc where proname='f3'; function f3---------------# output the root directory contents into standard output# notice the use of the single back ticks $a = `ls -l / 2>/dev/null`; $message = "\nHere is the directory listing\n".$a; return $message;(1 row)

共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
网摘收藏: