首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于获取当前密码的PostgreSQL查询

用于获取当前密码的PostgreSQL查询
EN

Stack Overflow用户
提问于 2018-06-08 01:44:42
回答 3查看 3.3K关注 0票数 -7

我想写一个查询,它应该会给我带来以下详细信息:

主机、端口、用户名、密码。

EN

回答 3

Stack Overflow用户

发布于 2018-06-08 02:56:01

您可以使用以下命令获取登录用户和当前活动的角色

代码语言:javascript
复制
SELECT session_user, current_user;

您可以使用以下命令获取客户端地址和端口

代码语言:javascript
复制
SELECT client_addr, client_port
FROM pg_stat_activity
WHERE pid = pg_backend_pid();

您可以使用以下命令获取服务器端口

代码语言:javascript
复制
SHOW port;

没有办法用SQL找出服务器地址。

票数 1
EN

Stack Overflow用户

发布于 2018-06-08 06:50:12

您可以使用inet_server_addr()获取当前连接的服务器地址,使用inet_server_port()获取端口(但不是服务器侦听的所有地址和端口)。当前用户可以通过current_user获取(如果您想获取会话用户,则可以使用session_user )。(参见"9.25. System Information Functions")

密码在pg_catalog.pg_authid.rolpassword中。但是普通用户可能没有查询pg_catalog.pg_authid的权限。即使他们这样做了,密码很可能是MD5散列的,这是不可逆的。(参见"50.8. pg_authid)

但是如果你得到了很多(真的很多!)现在,您可能希望尝试使用递归CTE对密码散列进行暴力攻击。

所有这些都会导致类似这样的结果:

代码语言:javascript
复制
WITH RECURSIVE c(c)
AS
(
SELECT chr(s.i) c FROM generate_series(97, 122) s(i)
UNION ALL
SELECT concat(c.c, chr(s.i))
       FROM c
            CROSS JOIN generate_series(97, 122) s(i)
       WHERE length(concat(c.c, chr(s.i))) <= 4
)
SELECT inet_server_addr() "host",
       inet_server_port() "port",
       current_user "username",
       c.c "password"
       FROM pg_catalog.pg_authid pgai
            INNER JOIN c c
                       ON pgai.rolpassword = concat('md5', md5(concat(c.c, current_user)))
                          AND pgai.rolname = current_user;

将生成的单词和使用的字符的最大长度更改为您想要尝试的长度。此示例使用长度不超过4的所有小写字母和单词。

(但请注意,您应该更多地将此视为一个笑话。想一想如何在SQL中做这样的事情是很有趣的。但是,为了获得一个好的密码,使用所有可打印文件并且长度足够长,您肯定不希望等待查询结束。;) )

票数 1
EN

Stack Overflow用户

发布于 2018-06-08 16:21:59

您不能显示当前密码。

要显示当前用户,服务器主机和端口使用:

代码语言:javascript
复制
SELECT CURRENT_USER, inet_server_addr( ), inet_server_port() port;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50747272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档