redisplusplus读取有密码的数据库

redisplusplus读取有密码的数据库,第1张

Redis++是一个C++ Redis客户端库,它支持Redis服务器的所有功能。要使用Redis++连接到一个有密码的Redis数据库,您需要在连接时提供密码。以下是一个示例代码,演示如何使用Redis++连接到一个有密码的Redis数据库:

```c++

#include <sw/redis++/redis++.h>

using namespace sw::redis

int mn() {

// 创建Redis对象

Redis redis("redis://password@localhost:6379")

// 测试连接是否成功

try {

auto pong = redis.ping()

std::cout <<"Redis server is running: " <<pong <<std::endl

} catch (const Error &e) {

std::cerr <<"Error: " <<e.what() <<std::endl

}

return 0

}

```

在上面的示例代码中,我们在连接字符串中指定了密码,格式为`redis://password@localhost:6379`,其中`password`是Redis数据库的密码,`localhost`是Redis服务器的主机名或IP地址,`6379`是Redis服务器的端口号。在创建Redis对象时,我们将连接字符串作为参数传递给构造函数。然后,我们使用Redis对象的ping方法测试连接是否成功。

请注意,如果Redis数据库的密码包含特殊字符,例如`@`,则需要对密码进行URL编码。可以使用C++的`std::urlencode`函数对密码进行编码,例如:

```c++

#include <sw/redis++/redis++.h>

#include <iostream>

#include <iomanip>

using namespace sw::redis

int mn() {

std::string password = "my@password"

std::string encoded_password = std::urlencode(password)

std::cout <<"Encoded password: " <<encoded_password <<std::endl

Redis redis("redis://" + encoded_password + "@localhost:6379")

// 测试连接是否成功

try {

auto pong = redis.ping()

std::cout <<"Redis server is running: " <<pong <<std::endl

} catch (const Error &e) {

std::cerr <<"Error: " <<e.what() <<std::endl

}

return 0

}

```

在上面的示例代码中,我们使用`std::urlencode`函数对密码进行编码,并将编码后的密码添加到连接字符串中。

redis作为一个高速数据库,在互联网上,必须有对应的安全机制来进行保护,方法有2,如下。

1.比较安全的办法是采用绑定IP的方式来进行控制。

请在redis.conf文件找到如下配置

# If you want you can bind a single interface, if the bind option is not

# specified all the interfaces will listen for incoming connections.

#

# bind 127.0.0.1

把# bind 127.0.0.1前面的 注释#号去掉,然后把127.0.0.1改成你允许访问你的redis服务器的ip地址,表示只允许该ip进行访问

这种情况下,我们在启动redis服务器的时候不能再用:redis-server,改为:redis-server path/redis.conf 即在启动的时候指定需要加载的配置文件,其中path/是你上面修改的redis配置文件所在目录,这个方法有一点不太好,我难免有多台机器访问一个redis服务。

2.设置密码,以提供远程登陆

打开redis.conf配置文件,找到requirepass,然后修改如下:

requirepass yourpassword

yourpassword就是redis验证密码,设置密码以后发现可以登陆,但是无法执行命令了。

命令如下:

redis-cli -h yourIp -p yourPort//启动redis客户端,并连接服务器

keys * //输出服务器中的所有key

报错如下

(error) ERR operation not permitted

这时候你可以用授权命令进行授权,就不报错了

命令如下:

auth youpassword

另外,在连接服务器的时候就可以指定登录密码,避免单独输入上面授权命令

命令如下:

redis-cli -h yourIp-p yourPort -a youPassword

除了在配置文件redis.conf中配置验证密码以外,也可以在已经启动的redis服务器通过命令行设置密码,但这种方式是临时的,当服务器重启了密码必须重设。命令行设置密码方式如下:

config set requirepass yourPassword

有时候我们不知道当前redis服务器是否有设置验证密码,或者忘记了密码是什么,我们可以通过命令行输入命令查看密码,命令如下:

config get requirepass

如果redis服务端没有配置密码,会得到nil,而如果配置了密码,但是redis客户端连接redis服务端时,没有用密码登录验证,会提示:operation not permitted,这时候可以用命令:auth yourpassword 进行验证密码,再执行 config set requirepass,就会显示yourpassword

由于redis并发能力极强,仅仅搞密码,攻击者可能在短期内发送大量猜密码的请求,很容易暴力破解,所以建议密码越长越好,比如20位。(密码在 conf文件里是明文,所以不用担心自己会忘记)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10006418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存