【问题标题】:Firebird database connection credentialsFirebird 数据库连接凭据
【发布时间】:2014-06-10 17:11:01
【问题描述】:

在每个带有 Firebird 的 c 接口代码程序中,我都在传递用户凭据以连接到数据库。如果我不传递这些凭据并直接调用isc_attach_database() 连接到数据库,则会抛出错误:您的用户名和密码未定义。请让您的数据库管理员设置 Firebird 登录。

有没有办法跳过这些或将这些设置为默认设置。我的意思是我想为每个程序连接到数据库而不传递unamepassword

以下是我用来连接数据库的示例代码。

int main()
{
    isc_db_handle db1 = NULL; // Database handle.
    isc_tr_handle   trans = NULL;//transaction handle
    // Allocate some pointers to a dpb (database parameter buffer).
    // You use the dpb to talk with the database.
    char dpb_buffer[256], *dpb, *p;

    short dpb_length;
    char *uname; // user-name.
    char *upass; // password.
    ISC_STATUS status_vector[20]; // Status vector, to monitor connection.

    char *str = "/Users/Sumanth/Desktop/NewDB2.fdb";
    uname = "SYSDBA";
    upass = "masterkey";

    dpb = dpb_buffer;

    // Specify the version of the parameter buffer, always the
    // compile-time constant isc_dpb_version1.
    *dpb++ = isc_dpb_version1;

    //    # of cache buffers to allocate for use with the database,
    //   default = // 75. In the API guide I think isc_dpb_num_buffers is
    //specified as // isc_num_buffers, but that I could not get to work.
    *dpb++ = isc_dpb_num_buffers;
    *dpb++ = 1;
    *dpb++ = 90;

    *dpb++ = isc_dpb_user_name; //    Save user-name in dpb.
    *dpb++ = strlen(uname);
    for (p = uname; *p;)
        *dpb++ = *p++;

    *dpb++ = isc_dpb_password;  //   Save password in dpb.
    *dpb++ = strlen(upass);
    for (p = upass; *p;)
        *dpb++ = *p++;

    dpb_length = dpb - dpb_buffer;

    //   Attach to the database.
    isc_attach_database(status_vector, strlen(str), str, &db1,dpb_length, dpb_buffer);
}

【问题讨论】:

    标签: c xcode firebird firebird2.5


    【解决方案1】:

    您可以设置环境变量ISC_USERISC_PASSWORD 以连接到Firebird 数据库,而无需在应用程序中指定用户名和密码。见Setting The ISC_USER And ISC_PASSWORD Environment Variables。请注意,链接的文档只涉及SYSDBA 帐户,但它适用于任何帐户。

    Helen Borrie 第二版火鸟书说:

    可以在服务器上设置ISC_USERISC_PASSWORD这两个环境变量,避免在本地使用数据库时需要登录。您将能够执行允许指定用户执行的所有操作,而无需每次都提供凭据。

    文本提到“在服务器上”,但它实际上是客户端应用程序的本地。

    Interbase 6.0 操作指南(可从Firebird website 获得)说:

    如果您在连接数据库时没有提供用户名和密码,或者 如果您运行 gbakgstatgfix 等实用程序,InterBase 会查看是否设置了 ISC_USERISC_PASSWORD 环境变量并使用该用户和密码作为 InterBase 用户。

    虽然设置这些环境变量很方便,但强烈不 如果安全存在问题,建议使用。

    【讨论】:

    • 我已经尝试过这样做。我在终端中设置了这些凭据。但是,当我执行代码时,它仍然要求提供凭据以连接到数据库
    • @user3723478 您确定您的执行环境与您的终端共享这些环境变量吗?
    • 奇怪。我通常不使用 C API,但我查看了 firebird 源代码,并在 attach 方法中将用户名 i 和密码添加到 dpb 中。如果 dpb 中没有提供。我会看看我是否可以重现这个(可能需要几天)。
    猜你喜欢
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多