如何在 C 中打开数据库句柄并使用 SWIG 将其传递给 Perl?

Posted

技术标签:

【中文标题】如何在 C 中打开数据库句柄并使用 SWIG 将其传递给 Perl?【英文标题】:How can I open a DB handle in C and pass it to Perl using SWIG? 【发布时间】:2009-12-17 07:49:24 【问题描述】:

请帮助我编写 SWIG 交互。

我想在 C 程序中打开一个数据库连接句柄。这个句柄必须传递给 Perl,在这里我将使用 Perl DB 接口与数据库进行交互。出于安全目的,我们想使用这种机制。我想使用 SWIG 接口传递数据库句柄。


已添加

我们正在使用 Perl 基础架构来满足我们的业务需求。有太多的用户帐户、数据库服务器遍布整个公司。我们希望企业密码得到保护,并且只允许特权成员使用。早些时候,我们将所有密码放在一个文本文件中并从中读取。如果我们保留其他任何地方,那么他们将能够调试 Perl 模块并找到它们。如果我们在 C 中创建一个句柄并给出相同的句柄而不是返回密码,那将更有帮助。

【问题讨论】:

我没有答案。但我有一种预感,你的方法注定要失败。对不起。 你是指 Perl DBI 接口,还是别的什么? 为什么你认为在 C 中做这件事会有所帮助?为什么你甚至知道密码是什么? 【参考方案1】:

Perl DBI(数据库接口)没有为将已经打开的数据库句柄传递给驱动程序做准备——该接口假定(DBI 加上相关的数据库驱动程序或 DBD::XyzDBMS 模块)将建立连接。因此,充其量,您将编写代码来扩展 DBI 以实现这一点,并扩展相关的 DBD 以支持它,这完全是一个非常重要的练习。

那么,您为什么认为这是一个好主意 - 以这种方式做事而不是让 DBI 也处理连接有什么安全优势?


在应用程序中嵌入密码是错误的方法,从很多角度来看,很难知道从哪里开始:

更改密码意味着重新编译和重新发布程序,因此永远不会发生。 每个人都使用相同的用户名和密码连接到数据库或 Web 服务,因此您不知道是谁在进行连接。 密码将在目标文件中被发现 - 如果攻击者真的担心,他们将能够找到它们。 等等。

“通过默​​默无闻的安全”根本不安全!

但这就是你打算使用的。

请从知道的人那里获得一些关于如何编写安全软件的建议。或者阅读有关该主题的许多优秀书籍中的一些。

【讨论】:

虽然肯定不是一个简单的解决方案,但反过来可能更容易:让 DBI 创建连接,然后尝试访问 C 级处理程序。但这只是“坏主意,不要那样做”的味道。【参考方案2】:

查看 Inline::C 作为 SWIG 的替代品(或温和的包装)。您将比尝试学习如何使用 SWIG 更快地从 Perl 开始使用 C。

【讨论】:

【参考方案3】:

我们正在使用 Perl 基础架构来满足我们的业务需求。有太多的用户帐户、数据库服务器遍布整个公司。我们希望企业密码得到保护,并且只允许特权成员使用。早些时候,我们将所有密码放在一个文本文件中并从中读取。 如果我们保留其他任何地方,那么他们将能够调试 perl 模块并找到它们。 如果我们在 C 中创建一个句柄并给出相同的句柄而不是返回密码,那将更有帮助。

【讨论】:

以后,请编辑您的问题,而不是添加“答案”来解释您来自哪里。这次我会为你传递信息。现在,请删除此答案。

以上是关于如何在 C 中打开数据库句柄并使用 SWIG 将其传递给 Perl?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Perl 中使用 SWIG?

为 Python 或 SWIG 模块创建编译 C-dll,如何继续?

在 python swig 中读取 c++ 2d 数组

如何在带有 Swig 的 Python 中使用 float **?

如何使用 SWIG 在 C++ API 上生成 C 包装器? [复制]

使用 SWIG 包装 c++ 类以在 Lua 中使用它 - 需要简单的示例