perl - 如何存储在 Perl 脚本中加密的数据库密码?
问题描述
我是 Perl 脚本的新手,我被要求用 Perl 编程语言编写脚本来访问数据库并读取特定表以获取一个状态值。在这个脚本中,我需要提供包含密码的数据库连接详细信息。我想以加密方式存储此密码,以便阅读脚本的任何人都不应识别密码。此外,加密值应该能够在同一个脚本中解密。
有人可以建议我如何实现这一目标吗?
解决方案
您不能通过加密某些东西并向他们提供加密数据和解密工具来对某人保密!
假设您的代码看起来像这样:
my $crypted = get_encrypted_password();
my $password = decrypt($crypted);
my $connection = connect_to_database($password);
然后有人编辑它是微不足道的,所以它看起来像:
my $crypted = get_encrypted_password();
my $password = decrypt($crypted);
print "The database password is: " . $password;
所以这种方法是行不通的。
你需要把你的限制放在用户无法控制的地方。
这可能是应用数据库级别权限的问题(例如,仅授予 SELECT 权限和对特定表的权限 - 取决于您要允许的内容)。
在这种情况下,您最好编写一个在数据库和客户端软件之间运行的 Web 服务。然后,该服务可以执行 authn/authz 并提供一组非常有限的客户端可以执行的操作。
推荐阅读
- java - Libgdx 动画在翻转时闪烁
- sql - 如何进行查询以根据两个条件对数据进行排序,然后从初始表/查询中添加与该条件相对应的所有值?
- amazon-s3 - 使用批处理作业将 S3 数据加载到 Redshift
- sql - 在结构数组中查找最大数
- java - 在不使用拆分或循环的情况下使用 IndexOf 和子字符串拆分字符串
- amazon-s3 - Route 53 和 Cloudfront 从 s3 中删除 Accept-Ranges: bytes 标头?
- python - Python 正则表达式是正确的,但返回 None
- ansible - Ansible - 当字符串不在变量中时触发失败
- python - CreateView 视力问题,django bug?
- java - 对于处于 ESTABLISHED 状态的 jedis sentinel,redis 服务器中打开的连接过多