postgresql基本语法

转自:http://cyanqx.iteye.com/blog/1304859

1.注释、结束标记、连接符 


a.PostgreSQL既然遵循SQL语言,当然支持–注释; 

b.PostgreSQL支持/*和/**/注释,这点类似于Mysql; 

c.PostgreSQL数据库使用psql的时候,需要在命令后加上;(分号)或者是\g来表示语句已经结束以执行查询. 

d.PostgreSQL是采用||符号来连接字符串的,注意使用^,小心|被转义。 

2.自动匹配 

PostgreSQL不像Mysql能够自动匹配字段,这点类似于oracle,所以在注入的时候要注意下,而且默认情况下是支持union查询的; 

3.连接PostgreSQL 

默认情况下是不给外连的,如果想远程管理PostgreSQL数据库的话,需要修改../PostgreSQL/data/pg_bha.conf文件, 请参考 PostgreSQL学习手册.PostgreSQL默认用户是postgres(类似于mysql的root),默认端口是5432,默认系统库是 postgres。 

使用psql -h ip -d dataname -p port -U username,这里注意-U参数是大写,如果是本机采用默认安装的话,直接使用psql -U postgres后会提示输入密码,正确输入密码后会出现postgres=#的字符(类似于mysql中的mysql>),就可以正常使用 psql了。 

\? 显示pgsql命令的说明 

\h 显示sql命令的说明 

\q 是退出 

\l 是现实系统中所有的数据库 

4.pgAdmin III 

a.pgAdmin III是PostgreSQL中自带的界面化数据库管理程序,可以查询PostgreSQL数据库中所有域、函数、序列、数据表结构及相关属性、触发器函数、视图等。 

注入PostgreSQL 

既然PostgreSQL是RDBMS,所以系统中所有数据库的结构会保存系统库中,所以注入的时候就相对比较方便。由于注释方式和mysql是一样,如何判断是什么数据库?关于这点我也没有一个标准的答案,我想可以扫描5432端口(如何web和库没有分离的情况下),使用version()函数的返回结果来判断,直接使用查询语句如select * from pg_class/select * from pg_group的返回结果来判断数据库类型.由于PostgreSQL的目录页存在information_schema,我手上也没有 PostgreSQL数据库的注射点,所以我也不知道能不能使用select schema_name from information_schema_schemata来判断,不好意思,关于使用information_schema只是我的想法,有条件的朋友验证下。 

介绍下PostgreSQL中内置函数、表和视图在入侵的应用。 

current_database() 当前数据库名字 

session_user 会话用户 | 

current_user 目前执行环境中的用户名 |这三个函数调用时候不需要加() 

user 和session_user一样 | 

inet_client_port() 远程端口 

cast(sourcetype AS targettype) 定义类型转换 

current_setting() 以查询形式获取setting_name 设置的当前值 

convert() 编码转换 

pg_stat_user_tables 存放系统所有表名的视图,关键字段是relname,使用select relname from pg_stat_user_tables limit offset,1 来达到逐个读取表名的目的 

pg_stat_all_tables 和pg_stat_all_tables视图功能一样 

pg_shadow 看到shadow大家是否想到/etc/shadow,此表包含数据库用户的信息,关键字段username、passwd和usesuper(超级用户的意思),不过此表被做了权限设置 

pg_user 这个表结构和pg_shadow一样,不过此表的全局可读,passwd字段可能被清空或者加密 

pg_group 定义组以及哪些用户属于哪个组的信息,关键字段groname 

information_schema.columns 这个目录对象中保存了所有的字段,关键字段是column_name,使用select column_name from information_columns where table_name=tablename limit offset,1这样就可以达到读取每个表名的字段 

遍历PG当前数据库中的全部表 

SELECT tablename FROM pg_tables 
WHERE tablename NOT LIKE ‘pg%’ 
AND tablename NOT LIKE ‘sql_%’ 
ORDER BY tablename; 

查询PG数据库中的所有表包括系统表 

select relname as table_name from pg_class where relkind=’r'; 

这个类似mssql里的master 
然后你用SELECT datname FROM pg_database 这个就可以看到所有的数据库了 
然后你写入数据库 库名 用SELECT table_schema,table_name FROM information_schema.tables 
这个查询表 

读文件 

首先需要建立一个表,然后copy文件内容到表中,在读取表内容,思路是这样的 
create table read (line text); 
copy read from ‘/etc/passwd’;alter table read add id serial– 
select * from read; 
drop table read; 
思路就是这样的,具体怎么使用就看大家自己发挥了(encode,^_^) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值